Проблемы транскодера потока 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), и теперь все хорошо.