2008-09-15 1 views
7

Мне нужно создать что-то, что начнет обслуживать видео, закодированное H.264, на флеш-плеер на полпути через файл (для поддержки перехода к точке в видео, которое еще не было буферизировано).Как сделать флеш-псевдо-потоковое?

В настоящее время видеоролики находятся в формате контейнера FLV, но перекодировка является опцией. Мне удалось переписать заголовок файла и данные метаданных для заданного смещения байта. Это работает для старых видео, но не для файлов с кодировкой H.264. Я подозреваю, что это связано с тем, что видеотеки внутри файла также должны быть изменены, что невозможно (требуется слишком большая вычислительная мощность).

Что такое «правильный» способ сделать это?

+0

Интересный вопрос ... Я тоже буду делать это в ближайшие недели.Не могли бы вы рассказать о проблемах, с которыми вы сталкиваетесь в рамках подхода FLV? Я бы подумал, что это будет нормально ... – 2008-09-15 10:15:54

ответ

2

Флэш-плеер может начать воспроизведение видео H.264 только после загрузки атома MOOV. Существующие провайдеры псевдопотоков просто дают вам заголовок FLV - либо первые 13 байтов файла, либо жестко закодированный - и затем служат для файла из данного смещения. Если вы хотите создать псевдо-стример H.264, вам нужно будет вывести заголовок FLV, а затем атом MOOV, а затем передать остальную часть файла из заданного смещения. Если вы не используете контейнер FLV, вам не нужен заголовок FLV, но вам все равно нужен атом MOOV.

Unfortunatley, я не думаю, что вы сможете использовать атом MOOV из файла на диске; содержащаяся в нем информация будет неправильной для фрагмента файла, который вы используете. Таким образом, вам придется разбирать существующий атом и генерировать один из ваших собственных, который был бы подходящим для обслуживаемой части файла.

Если в файле H.264 есть сложные структуры, это может быть еще более сложным для псевдопотока. Если разбор файла невозможен, я боюсь, что вы не сможете использовать псевдо-поток для своих медиа.

3

@yoavf - Я думаю, что OP заинтересован в аспектах серверной стороны потоковой передачи по требованию h.264 внутри FLV-файлов. Думаю, повторное использование существующих игроков было бы неплохо для него. Или, может быть, это мои собственные потребности? <: S

Со второй ссылки yoavf есть еще одна ссылка на Tinic Uro's What just happened to video on the web?. Соответствующая цитата:

Можно ли разместить потоки H.264 в традиционную структуру файлов FLV? Это будет, но мы настоятельно призываем всех принять новый стандартный формат файла. Существуют функциональные ограничения со структурой FLV при потоковой передаче H.264, которые мы не смогли преодолеть без изменения формата файла. Это одна из причин, по которой мы отходим от традиционной файловой структуры FLV. В частности, обработка заголовков последовательностей и конечных элементов сложна с потоками FLV.

Таким образом, кажется, что можно либо возиться с кодировкой ffmpeg (если это так, как вы получаете свои FLV, как я), либо можно попасть в новый формат. Hmmmm ....

+0

Как я уже сказал, перекодирование/ремуксирование - это вариант. Но я не могу просто отрубить файл и ожидать, что он сработает, afaik. Я хотел бы знать, какой лучший подход. – Sietse 2008-09-15 11:13:31

0

две вещи, которые вы можете сделать:

1) использовать Lighttpd и это mp4 потокового плагин, который будет генерировать необходимый потоковый контейнер на лету

2) создать ключевые кадры FLV и использовать псевдопользователей (например, XMOOV) для потока вашего файла.

Если вам нужен mp4/aac, вы можете просто положить их внутрь контейнера FLV, к большому огорчению, но он работает.

Смежные вопросы