Порядковый номер FMP4 - PullRequest
       156

Порядковый номер FMP4

0 голосов
/ 07 марта 2020

Я хотел сделать основную c фрагментированную программу вещания mp4 с avformat libs и HTML5 видео и MSE.

Это прямой эфир, и я использую avformat для копирования h264 данные в mp4-фрагменты.

Вот мой базовый c рисунок клиентов, подключающихся к потоку:

enter image description here

Итак, со словами:

  1. C1J: Первый клиент присоединяется:
    • Запускается процесс форматирования
    • Ящики ftyp, moov, moof, mdat будут доставлены клиенту1
    • ftyp и moov оба атома сохраняются для последующего повторного использования
  2. C2J: Второй клиент присоединяется (позднее):
    • процесс avformat продолжается (потому что он все еще продолжается обслуживая блоки moof и mdat для Client1)
    • ранее сохраненные блоки ftyp и moov будут в первую очередь поданы на Client2
    • после обслуживания блоков ftyp и moov, Client2 присоединится к потоку при следующем moof box.

Я сохранил файл mp4 на диск от обоих клиентов.

Порядок атомов в обоих файлах выглядит хорошо: ftype, moov, moof, mdat, moof, mdat ...

Оба файла могут воспроизводиться медиаплеерами (например, VL C) а также непосредственно в браузерах (Opera).

Client1 может также воспроизводиться через MSE в браузере (Opera), но поток Client2 не отображается с MSE (Opera).

Нет ошибок при консоль JS и медиа-интерфейс выглядят также хорошо (по крайней мере, эквивалентно клиенту Client1).

Теперь я понял, что каждый блок moof содержит поле mfhd (заголовок) с полем sequenceNumber.

Конечно, в первом окне moof Client1 этот порядковый номер равен 1. Однако в первом присоединенном блоке moof клиента Client2 этот sequenceNumber всегда> = 1 (в моем случае это 16).

Что нужно изменить в полях moof в Client2, чтобы иметь действительный fmp4 с начала?

Я думаю, что видео Opera 10 * не нравится, если sequenceNumber не начинается с 1, но должны быть другие требования для того, чтобы оно было действительным.

...