Почему видео в формате H.264 намного быстрее в контейнере FLV, чем в контейнере MP4?

9

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

Затем я установил mod_h264_streamingдля lighttpd работу потоковой передачи и очистки временной шкалы.

Проблема заключается в том, что большие файлы (> 500 МБ при несколько высоком разрешении) тратятся вечно, чтобы даже начать буферизацию (я читал, что Flowplayer и другим Flash-плеерам сначала нужно загружать метаданные). Я переместил атом xmov в начало файла с помощью MP4Box (я тоже попробовал Qt QuickStart), но это не помогло.

Далее я прочитал, что мне нужно чередовать звуковые дорожки, поэтому я тоже это сделал. Это не вызвало никаких изменений: видео все еще были медленными.

Поэтому я попытался поместить точно такой же фильм H.264 в контейнер FLV, и буферизация воспроизведения началась почти мгновенно - без замедления.

Так чего мне здесь не хватает? Почему я выбрал бы контейнер MP4 с модулем mod_264_streaming, который кажется очень медленным, вместо обычного контейнера FLV со встроенным lighttpd mod_flv_streaming? Очевидно, что многие сайты выбирают контейнер MP4, но я не понимаю, почему.

И как побочный вопрос, я попытался использовать <video>тег HTML5, чтобы попробовать тот же фильм H.264 MP4, и очистка была молниеносной ! Я заглянул в файл журнала lighttpd и заметил, что проигрыватели Flash добавляются video.mp4?start=234каждый раз, когда очищается временная шкала, тогда как браузеры, использующие собственный <video>тег HTML5, этого не делают. Это какое-то ограничение Flash? Почему потоковая передача Flash не может быть такой же быстрой, как потоковая передача HTML5?

Gotys
источник

Ответы:

4

TL; DR: MP4 используется, когда видеосайт хранит в видео больше метаданных, чем поддерживает FLV, или использует аудиокодек, который FLV не поддерживает. Простота FLV и дизайн для потоковой передачи делают его хорошим выбором, если у вас нет веских оснований для использования MP4.

Что касается очистки временной шкалы во флэш-памяти, я понятия не имею, почему это происходит, поскольку я никогда не кодировал флэш-память, но возможно, что это ручка, которую она использует, или что-то, что работает специально с потоковым сервером Adobe для поиска в файле. Это также работает как способ остановить надоедливого пользователя от сохранения файла на своем диске.


Некоторые вещи, которые вы уже знали:

Существуют фундаментальные различия между контейнерами FLVи MP4(aka isomedia). FLV был разработан Adobe с самого начала как потоковый контейнер, и это действительно чертовски просто . Все, что он делает, это отправляет видео пакет, затем аудио пакет, затем видео пакет ... Однако он поддерживает только очень мало кодеков и никаких метаданных, кроме меток времени в миллисекундах. Если вам не нужны MP4-специфичные функции, вы бы прекрасно справились с FLV.

СМИ ISO, с другой стороны, основаны на контейнере Apple MOV. Он разделен на атомы, и есть определенный атом moov, который необходимо декодировать, прежде чем можно будет прочитать любые другие атомы . Проблема, с которой вы столкнулись в MP4, заключается в том, что moovатом пишется в конце файла, что намного проще сделать для программ кодирования. Существуют инструменты, такие как qtfaststart , которые будут выполнять необходимые действия, чтобы поместить moovатом в начало файла. Таким образом, файл начнет воспроизведение, как только у него появятся данные, вместо того, чтобы его нужно было полностью загрузить перед запуском.

Jessidhia
источник
0

Если вы используете контейнер mov, он выходит из коробки без необходимости устанавливать модули или помещать его в контейнер flv и использовать модуль. Просто мои мысли. Используйте mov и добавьте соответствующий тип mime - готово.

RobotHumans
источник