Можно ли воспроизвести выходной видеофайл с кодировщика во время его кодирования? - PullRequest
6 голосов
/ 15 июня 2011

У меня есть видеофайл, и мне нужно закодировать его как H264 / AVC и передать клиенту через HTTP.Мне нужно, чтобы проигрыватель на стороне клиента мог воспроизводить видео во время его кодирования.

AFAIK. Чтобы проигрыватель мог воспроизводиться во время загрузки видео, необходимо поместить «moov atom» наНачало видео файла.Однако кодеры (например, ffmpeg) всегда пишут «moov atom» в конце файла после завершения кодирования.

Есть ли способ, которым кодировщик может поместить «moov atom» в начале вывода кодирования?Или воспроизводить видео без присутствия moov Atom?

Спасибо заранее

LR

Ответы [ 3 ]

13 голосов
/ 15 июня 2011

Да, это возможно, но только в некоторых форматах контейнеров. Это невозможно с контейнером QuickTime / MP4. В этих форматах атом moov содержит смещения выборок (местоположения выборок в атоме mdat). Они не известны, пока видео не будет закодировано. С VOD (видео по запросу) вы можете взять готовый файл и переместить атом moov вперед, чтобы улучшить работу потоковой передачи. Но нет никакого способа сделать это, если вы кодируете на лету. Чтобы это работало, вам нужно использовать ориентированный на поток транспортный формат. Что-то вроде FLV или MPEG-TS будет работать. Если вы передадите видео в ffmpeg и скажете, чтобы оно производило видео H.264 в контейнере FLV, вы можете затем подать эти данные на проигрыватель по мере его кодирования, и оно будет работать. Конечно, если вы хотите обслуживать его по HTTP, вам, вероятно, придется написать свой собственный сервер (или модуль для существующего сервера). Ничто из того, что я знаю, не поддерживает обработку файла в том виде, в котором он написан (проблема в том, что размер файла неизвестен при отправке заголовка длины содержимого). Однако если вы передаете видео через RTMP или RTSP, вы можете работать с существующим программным обеспечением.

2 голосов
/ 14 февраля 2012

Вы можете переместить MOOV Atom в начало файла, переписав файл с помощью инструмента в ffmpeg с именем qt-faststart.Вам нужно будет скомпилировать его самостоятельно из исходного кода (но это довольно просто, по крайней мере, в Linux / Mac OS).Просто скачайте исходный код libavcodec, например: http://libav.org/releases/libav-0.8.tar.xz

Распакуйте его и перейдите в каталог инструментов, там есть файл с именем qt-faststart.c, просто соберите его с помощью:

makeqt-faststart

теперь вы можете перераспределить MOOV Atom, вызвав его так: qt-faststart input.mp4 output.mp4

1 голос
/ 16 июня 2011

Я тоже пробовал то же самое ранее с ffmpeg, но не смог.Но с помощью vlc я смог загружать, транскодировать и транслировать на Android одновременно, хотя с помощью rtsp.Я не пробовал с http прогрессивным методом.Я использовал видео кодек MPEG4, аудио кодек MPEGA в VLC.

...