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

Как изменить мою команду FFMPEG, чтобы сделать мои потоки HTTP Live более эффективными?

Я хочу уменьшить накладные расходы при создании файлов .ts с помощью FFMPEG.

Я использую FFMPEG для создания серии файлов транспортных потоков, используемых для потоковой передачи по HTTP.

./ffmpeg -i myInputFile.ismv \
         -vcodec copy \
         -acodec copy \
         -bsf h264_mp4toannexb \
         -map 0 \
         -f segment \
         -segment_time 10\
         -segment_list_size 999999 \
         -segment_list output/myVarientPlaylist.m3u8 \
         -segment_format mpegts \
         output/myAudioVideoFile-%04d.ts

Мой ввод в формате ismv и содержит видео и аудио поток:

Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 320x240, 348 kb/s, 29.97 tbr, 10000k tbn, 59.94 tbc
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 63 kb/s

Существует проблема, связанная с мультиплексированием, которое приводит к добавлению большого количества накладных расходов в потоки. Вот как проблема была описана мне для аудио:

enter image description here

Таким образом, для данного потока aac издержки будут 88% (так как 200 байтов будут сопоставлены с 2 x 188 байтовыми пакетами).

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

Решение состоит в том, чтобы объединить несколько пакетов aac в один больший поток перед упаковкой их в .ts. Это возможно из коробки с FFMPEG?

4b9b3361

Ответ 1

Это не. Кодеки полагаются на инкапсулирующий контейнер для кадрирования, что означает сигнализацию начала и длины кадра.

Ваша графика фактически пропускает элемент, который является пакетом PES. Ваш звуковой фрейм сначала будет помещен в пакет PES (который указывает его длина), тогда пакет PES будет разрезан на меньшие фрагменты, которые будут TS-пакетами.

По дизайну вы не можете запустить новый пакет PES (содержащий звуковой фрейм в вашем случае) в пакете TS, который уже содержит данные. Новый пакет PES всегда будет запускаться в новом пакете TS. В противном случае было бы невозможно начать играть в средние потоки (трансляция) - было бы невозможно узнать, на каком байте в TS начинается новый PES (помните, что вы пропустили начало текущей PES).

Есть некоторые смягчающие факторы, дополнение FF FF FF, вероятно, будет сжато сетевым оборудованием. Также, если вы используете HTTP (вместо UDP или RDP), сжатие gzip может быть включено (но я сомневаюсь, что это очень помогло).