Чому відео 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?

Відповіді:


4

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

Що стосується скрабування часової шкали флеш, я не маю поняття, чому це робиться, оскільки я ніколи не кодував флеш, але можливо, що це ручка, яку вона використовує, або щось, що працює спеціально на потоковому сервері Adobe, щоб шукати у файлі. Він також працює як спосіб зупинити набридливого користувача від збереження файлу на своєму диску.


Деякі речі, які ви вже знали:

Існують принципові відмінності між контейнерами FLVта MP4(aka isomedia). FLV був розроблений Adobe з самого початку як потоковий контейнер, і це справді чорт простий . Все, що вона робить - це надіслати відеопакет, потім аудіопакет, потім відеопакет ... Однак він підтримує лише дуже мало кодеків, і ніяких метаданих, крім часових міток, у мілісекундах. Якщо вам не потрібні особливості MP4, вам було б чудово вдається з FLV.

З іншого боку, носія ISO базується на контейнері MOV від Apple. Він розділений на атоми, і є певний атом moov, який потрібно розшифрувати, перш ніж можна прочитати будь-які інші атоми . Проблема з MP4 полягає в тому, що moovв кінці файлу пишеться атом, що набагато простіше зробити для програм кодування. Існують такі інструменти, як qtfaststart , які зроблять необхідну обробку для розміщення moovатома на початку файлу. Таким чином, файл почне відтворення, як тільки він матиме дані, замість того, щоб перед завантаженням його потрібно було повністю завантажувати.


0

Якщо ви використовуєте Mov-контейнер, він витікає з коробки без необхідності встановлювати модулі або поміщати в контейнер flv та використовувати модуль. Просто мої думки. Використовуйте mov та додайте відповідний тип mime - готово.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.