9

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

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

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

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

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

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

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

2 ответа2

4

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

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


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

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

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

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .