Преобразование потоковых необработанных данных MPEG-4 в H.264 - PullRequest
4 голосов
/ 01 сентября 2009

У меня есть сетевая камера Sony (SNC-RZ25N), из которой я отчаянно пытаюсь получить данные в каком-то значимом формате. В документации говорится, что он отправляет необработанные данные MPEG-4, но не более конкретно, чем. Я могу захватить сегмент потока, используя curl (http://techhead.biz/media/tsv.m4v), и он будет воспроизводиться с использованием VLC и ffplay (хотя в ffplay он воспроизводится слишком быстро).

После полутора дней работы я только что обнаружил, что не могу использовать ffmpeg для прямого преобразования этого потока. С одной стороны, единственный способ, которым ffmpeg принимает данные по конвейеру в качестве входных данных (о которых я знаю), - это формат 'yuv4mpegpipe'.

Я попытался передать по трубопроводу в ffmpeg, используя 'm4v' в качестве указанного формата, но, похоже, он хочет прочитать весь поток, прежде чем он начнет обработку.

Кто-нибудь знает, как я могу это сделать? Использование инструментов командной строки? Библиотеки с открытым исходным кодом на ЛЮБОМ языке программирования? Более простые решения предпочтительнее, но любое рабочее решение было бы замечательно.

1 Ответ

1 голос
/ 03 сентября 2009

Похоже, что mplayer может воспроизводить ваш файл m4v по HTTP, и, по крайней мере, с вашим примером файла это работает:

mkfifo /tmp/fifo
mplayer -benchmark -vo yuv4mpeg:file=/tmp/fifo http://techhead.biz/media/tsv.m4v
ffmpeg -f yuv4mpegpipe -i /tmp/fifo -vcodec libx264 -vpre libx264-hq /tmp/foo.mp4

(- бенчмарк говорит mplayer игнорировать длительность кадра, может быть, а может и не понадобиться)

В качестве альтернативы, просто с mencoder:

mencoder -o /tmp/foo.avi -of avi -ovc x264 -x264encopts bitrate=250 http://techhead.biz/media/tsv.m4v

Наконец, если вам на самом деле не нужен H.264, вы можете просто поместить существующие данные MPEG-ES в любой нужный вам формат контейнера; MP4Box может сделать это, а ffmpeg и mencoder могут, если они поддерживают формат вывода.

...