Я работаю над онлайн-сервисом. Одна из целей заключается в том, чтобы видео воспроизводилось без каких-либо дополнительных плагинов для браузера (кроме Flash).
Я решил использовать MP4, потому что он поддерживается большинством браузеров HTML5 и Flash (для резервного копирования). Видео перекодируются из ASF на сервере с помощью FFMpeg.
Однако я обнаружил, что MP4 не может быть потоковым потоком, потому что у него есть атом moov для метаданных, который должен указывать длину. FFMpeg не может напрямую передать mp4 в stdout, поскольку он помещает moov в конец файла. (Живое транскодирование и потоковое воспроизведение MP4 работает в Android, но сбой в Flash-проигрывателе с ошибкой NetStream.Play.FileStructureInvalid)
Конечно, MPEG-TS существует, но он не поддерживается HTML5 <video>
.
То, о чем я думал, это метод перекодировки потока в режиме реального времени в MP4 и каждый новый запрос HTTP для него, сначала отправьте moov, который указывает очень длинное число для длины видео, а затем начните отправку остальной части файла MP4.
Возможно ли использовать MP4 для потоковой передачи?
После некоторых исследований и ответа av501 я понимаю, что размеры кадров должны быть известны, чтобы он мог работать.
Может ли файл mp4 сегментироваться на более мелкие части, чтобы он мог быть потоковым?
Конечно, переход на другой контейнер/формат является опцией, но единственный формат, совместимый как с Flash, так и с HTML5, - mp4/h264, поэтому, если мне нужно поддерживать оба, мне придется перекодировать дважды.