Проблемы транскодера потока H. 264-to-transport
Мой первый пост здесь [поэтому, пожалуйста, извините за возможные проблемы форматирования / формулировки / и т. д.]. Я пишу raw H. 264 в транскодер транспортного потока mpeg 2 (Изменение только контейнера, без перекодирования видео как такового). Я думаю, что я понимаю спецификацию транспортного потока mpeg 2 (H. 222.0), но я не могу заставить QuickTime воспроизвести полученный результат .файлы ts (VLC и FFMPEG воспроизводятся нормально). Что я делаю:
- создать PAT с помощью программы map pid 53
- создание PMT с pid 53 для ПЦР PID 70
- разбить необработанный NALUs на пакеты PES с PID 70-добавить поле адаптации с байтами начинки, если длина PES меньше 184 байт
Журнал Tsreport для исходного VLC .ts file
0: TS Packet 1 PID 0000 [pusi] PAT Adaptation field len 166 [flags 00] section length: 00d (13) transport stream id: 7fc2 version number 08, current next 1, section number 0, last section number 0 Program 001 ( 1) -> PID 0042 ( 66) 188: TS Packet 2 PID 0042 [pusi] PMT Adaptation field len 155 [flags 00] section length: 018 (24) program number: 0001 version number 10, current next 1, section number 0, last section number 0 PCR PID: 0044 program info length: 0 Program streams: PID 0044 -> Stream 1b H.264/14496-10 video (MPEG-4/AVC) Languages: ^@^@^@ 376: TS Packet 3 PID 0044 [pusi] stream type 1b (H.264/14496-10 video (MPEG-4/AVC)) Adaptation field len 7 [flags 10]: PCR .. PCR 0 PES header Start code: 00 00 01 Stream ID: e0 (224) SYSTEM START: Video stream 0 PES packet length: 0000 (0) Flags: 80 c0 : PTS DTS PES header len 10 PTS 0 DTS 0 Data (176 bytes): 00 00 01 e0 00 00 80 c0 0a 31 00 01 00 01 11 00 01 00 01 00... 564: TS Packet 4 PID 0044 stream type 1b (H.264/14496-10 video (MPEG-4/AVC)) 752: TS Packet 5 PID 0044 stream type 1b (H.264/14496-10 video (MPEG-4/AVC)) 940: TS Packet 6 PID 0044 stream type 1b (H.264/14496-10 video (MPEG-4/AVC)) 1128: TS Packet 7 PID 0044 stream type 1b (H.264/14496-10 video (MPEG-4/AVC)) 1316: TS Packet 8 PID 0044 stream type 1b (H.264/14496-10 video (MPEG-4/AVC)) Adaptation field len 164 [flags 10]: PCR .. PCR 562829905200 1504: TS Packet 9 PID 0044 [pusi] stream type 1b (H.264/14496-10 video (MPEG-4/AVC)) Adaptation field len 134 [flags 00] PES header Start code: 00 00 01 Stream ID: e0 (224) SYSTEM START: Video stream 0 PES packet length: 0000 (0) Flags: 80 c0 : PTS DTS PES header len 10 PTS 1876128985 DTS 1876128985 Data (49 bytes): 00 00 01 e0 00 00 80 c0 0a 33 bf 4d e9 b3 13 bf 4d e9 b3 00... Read 9 TS packets
Я взял VLC .ts файл выше, извлек из него необработанный битовый поток - затем я использовал свой инструмент для его преобразования .снова ts; журнал tsreport для моего .ТС находится ниже :
0: TS Packet 1 PID 0000 [pusi] PAT Adaptation field len 166 [flags 00] section length: 00d (13) transport stream id: 79d4 version number 08, current next 1, section number 0, last section number 0 Program 001 ( 1) -> PID 0035 ( 53) 188: TS Packet 2 PID 0035 [pusi] PMT Adaptation field len 161 [flags 00] section length: 012 (18) program number: 0001 version number 10, current next 1, section number 0, last section number 0 PCR PID: 0046 program info length: 0 Program streams: PID 0046 -> Stream 1b H.264/14496-10 video (MPEG-4/AVC) 376: TS Packet 3 PID 0046 [pusi] stream type 1b (H.264/14496-10 video (MPEG-4/AVC)) Adaptation field len 7 [flags 10]: PCR .. PCR 5370000 PES header Start code: 00 00 01 Stream ID: e0 (224) SYSTEM START: Video stream 0 PES packet length: 0000 (0) Flags: 80 c0 : PTS DTS PES header len 10 PTS 18000 DTS 18000 Data (176 bytes): 00 00 01 e0 00 00 80 c0 0a 31 00 01 8c a1 11 00 01 8c a1 00... 564: TS Packet 4 PID 0046 stream type 1b (H.264/14496-10 video (MPEG-4/AVC)) 752: TS Packet 5 PID 0046 stream type 1b (H.264/14496-10 video (MPEG-4/AVC)) 940: TS Packet 6 PID 0046 stream type 1b (H.264/14496-10 video (MPEG-4/AVC)) 1128: TS Packet 7 PID 0046 stream type 1b (H.264/14496-10 video (MPEG-4/AVC)) 1316: TS Packet 8 PID 0046 stream type 1b (H.264/14496-10 video (MPEG-4/AVC)) Adaptation field len 122 [flags 00] 1504: TS Packet 9 PID 0046 [pusi] stream type 1b (H.264/14496-10 video (MPEG-4/AVC)) Adaptation field len 122 [flags 10]: PCR .. PCR 7170000 PES header Start code: 00 00 01 Stream ID: e0 (224) SYSTEM START: Video stream 0 PES packet length: 0000 (0) Flags: 80 c0 : PTS DTS PES header len 10 PTS 24000 DTS 24000 Data (61 bytes): 00 00 01 e0 00 00 80 c0 0a 31 00 01 bb 81 11 00 01 bb 81 00... Read 9 TS packets
Обновить
Оказывается, у меня был тип NALUs 9 перед каждым NALU-то есть мой поток был чем-то вроде 9 7 9 8 9 6 9 5 ... вместо того, чтобы 9 7 8 6 5 9 1 9 1 ...1 ответ:
Проблема заключалась в том, что перед каждым NALU у меня был тип NALUs 9, то есть мой поток был чем - то вроде 9 7 9 8 9 6 9 5 ... вместо того, чтобы 9 7 8 6 5 9 1 9 1 ... Я изменил свой контейнерный транскодер, чтобы выводить только один разделитель единиц доступа-то есть, тип NALU 9 - на кадр (не на NALU), и теперь все хорошо.