Подтвердить что ты не робот

Прямая трансляция через MP4

Я работаю над онлайн-сервисом. Одна из целей заключается в том, чтобы видео воспроизводилось без каких-либо дополнительных плагинов для браузера (кроме 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, поэтому, если мне нужно поддерживать оба, мне придется перекодировать дважды.

4b9b3361

Ответ 1

Здесь мои мысли, ребята, некоторые из них могут быть прав на других. Я умоляю невежество, потому что никто действительно не документировал этот процесс полностью, его все обоснованное предположение.

AvAssetWriter только кодирует файл, кажется, нет способа получить закодированное видео в память. Чтение файла во время его записи из фонового потока, чтобы сказать, что сокет приводит к элементарному потоку, это по существу m4v, который представляет собой контейнер с h264/acc mdata, но не атомы moov. (другими словами, нет заголовка) Ни один проигрыватель, поставляемый яблоком, не может воспроизводить этот поток, но модифицированный плеер, основанный на ffplay, должен иметь возможность декодировать и воспроизводить поток. Это должно работать, потому что ffplay использует libavformat, который может декодировать элементарные потоки, одно предостережение, поскольку информация об объеме файла отсутствует, некоторые вещи должны определяться игрой, DTS и PTS, а также игрок не может искать в файле.

В качестве альтернативы необработанный naul из потока m4v можно использовать для построения потока rtmp.

Если вы хотите продолжить обсуждение, вы можете напрямую связаться со мной.

Как вы получаете данные.

Так как вам все равно придется перестроить файл на принимающей стороне, я думаю, вы могли бы просто отчасти его сегментировать, Стив Макфарин написал немного appleSegmentedEcorder, который вы можете найти на его странице github, это решает некоторые проблемы для moov атомов, поскольку у вас есть вся информация о файле.

Ответ 2

Вы можете использовать фрагментированный MP4. Разделенный файл MP4 построен следующим образом:

moov [moof mdat]+

В поле moov затем содержится только основная информация о дорожках (сколько их тип, инициализация кодека и т.д.), но нет информации о образцах в треке. Информация о местах размещения образцов и размерах образцов находится в поле moof, за каждым полем moof следует mdat, который содержит образцы, как описано в предыдущем поле foof. Обычно можно выбрать длину (moof, mdat) -пары примерно на 2,4 или 8 секунд (спецификации нет, но эти значения кажутся разумными для большинства случаев использования).

Это способ построения бесконечного потока MP4.

Ответ 3

Нет, это не просто длинная длина. Вам нужно знать точный размер каждого кадра, чтобы создать заголовок в mp4. [вот почему он создается в конце разными кодами].

Ответ 4

Просто взглянув на второй пункт вашего вопроса ( "Видео перекодировано из ASF на сервере с помощью ffmpeg." ), вы упомянули, что используете ffmpeg для транскодирования видео на сервере.

Используйте qt-faststart или MP4Box для размещения атома MOOV в начале файла. (также вы убедитесь, что с помощью кодека H264 Video и AAC Audio для универсальной поддержки)

Надеюсь, это помогло вам.

Ответ 5

MP4 - это формат файлов, разработанный MPEG (группа экспертов по движущимся изображениям). Это было создано для Международной организации по стандартизации и было сделано на основе QTFF. Во время первоначального выпуска MP4 был очень похож на QTFF. Тем не менее, он разработал и стал более продвинутым форматом файлового контейнера. MP4 может использоваться на устройствах Apple как для iOS, так и для macOS без необходимости перекодирования всего видео. Указанный формат файла имеет большое преимущество перед QTFF; он может передаваться по сети, а последний - нет. Формат файла MP4 поддерживается большинством операционных систем и инструментов для редактирования видео. Для файла, содержащего как видео, так и аудио, обычно используется расширение .MP4. Однако аудиофайлы используют только расширение .M4A. Аудиокниги используют расширение .M4B, позволяющее создавать закладки для аудио файла из-за изменения кода. Расширение .M4V используется для необработанных видеопотоков MPEG4, в то время как мобильные телефоны обычно используют расширение .3G2 и .3GP. Dumpmedia Video Converter - лучший конвертер, который я когда-либо использовал. Он может поддерживать многие форматы видеофайлов, такие как MP4, MOV, WMV, AVI, MKV, FLV, 3GP, MPEG и другие обычные форматы видео, есть простое руководство о том, как конвертировать MP4 в AVI, вы можете нажать его Узнать больше!