Настройка сжатия MJPEG

Я сделал консольную программу, которая просматривает видео с веб-камеры и записывает его через фильтр сжатия MJPEG в формат .avi. Моя схема:

WebCam
->IBaseFilter(Video capture filter)
 ->IBaseFilter(MJPEG compression filter)
  ------------->ICaptureGraphBuilder2::RenderStream
                ->.avi
  1. Любые советы о том, как настроить параметры сжатия MJPEG через интерфейс IAMVideoCompression, чтобы получить наименьший размер видео и хотя бы среднее качество? Сейчас я установил для параметра метода putQuality значение 0,1, и это мне очень помогает; размер моего видеофайла составляет около 15 мб/минуту.

  2. Я не могу воспроизвести этот захваченный файл .avi ни с одним видеоплеером (я пробовал Windows Media Player, WMP Classic, VLC). Нужно ли делать декомпрессор перед просмотром этого видео?

  3. Есть ли другой фильтр сжатия, который я должен использовать? Какой из них лучше?

Моя цель - написать сервер потокового видео (например, Skype). Считаете ли вы, что 15 МБ/мин — это хороший размер для передачи видеопакетов по сети? Я собираюсь использовать сокет UDP (RTP) для передачи медиапотока.


person al072    schedule 05.11.2011    source источник
comment
хороший вопрос! я тоже поищу ответы   -  person Mustafa Ekici    schedule 05.11.2011


Ответы (1)


Вы можете посмотреть на Gstreamer.

Пример конвейера для декодирования потока MJPEG:

gst-launch -v souphttpsrc location="http://[ip]:[port]/[dir]/xxx.cgi" do-timestamp=true is_live=true ! multipartdemux ! jpegdec ! ffmpegcolorspace ! autovideosink

Чтобы вместо этого сохранить его в файл

gst-launch -v souphttpsrc location="http://[ip]:[port]/[dir]/xxx.cgi" do-timestamp=true is_live=true ! multipartdemux ! jpegdec ! ffmpegcolorspace ! filesink location=test.avi

Чтобы получить видео с веб-камеры и сохранить его (проверено на Ubuntu Linux)

gst-launch v4l2src ! jpegdec ! filesink location=test.avi

jpegdec — это бин для декодирования формата jpeg, который содержит «idct-метод» для качества

Вы можете написать вышеуказанные конвейеры в эквивалентном коде C/C++, Java или Python. У него очень красивые крепления.

Для программирования посмотрите мой другой пост

Воспроизведение RTSP с помощью python-gstreamer

Для вещей, связанных с сетью, вы можете посмотреть RTSP (RTP на основе UDP), посмотрите мой ответ на сообщение здесь

Потоковая передача с использованием GStreamer

person enthusiasticgeek    schedule 29.03.2012