Настройка компрессора MJPEG - PullRequest
1 голос
/ 05 ноября 2011

Я создал консольную программу, которая просматривает видео с веб-камеры и записывает его через фильтр сжатия 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) для передачи медиапотока.

1 Ответ

0 голосов
/ 29 марта 2012

Вы можете посмотреть на 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

...