Я хочу транслировать прямой эфир (h264 -> фрагментированный mp4) с avformat
functions.
Теперь в основном у меня есть рабочий пример с этим псевдо:
avformat_write_header
while (!end) {
av_read_frame
av_write_frame
}
avformat_write_tailer
У меня это как флаги вывода: movflags +frag_keyframe+empty_moov+default_base_moof
.
Я отправляю вывод в видео html5, которое воспроизводится нормально и плавно. Однако я хочу транслировать его, поэтому всякий раз, когда появляется новый игрок, я хочу передать ему те же данные:
avformat_write_header
while (!end) {
av_read_frame
av_write_frame (to multiple clients)
}
avformat_write_tailer
Однако первый клиент может воспроизводить поток, а остальные - нет.
Это потому, что структура fmp4: первый клиент получает правильные атомы ftyp
и moov
, тогда как остальные клиенты - нет.
Теперь я могу взломать свой код, чтобы предоставить более ранние атомы ftype и moov более поздним клиентам, но я думаю, что это неразумно - поправьте меня, если я ошибаюсь.
Мои вопросы:
- Как я могу попросить avformat во время потока (вычислить) и включить атомы ftyp и moov?
- Не испортит ли включение ftyp и moov во время стрима первого клиента? (Допустимо ли в fmp4 иметь ftype и moov не только один раз в начале?)
Спасибо