Проблемы транскодера потока H. 264-to-transport


Мой первый пост здесь [поэтому, пожалуйста, извините за возможные проблемы форматирования / формулировки / и т. д.]. Я пишу raw H. 264 в транскодер транспортного потока mpeg 2 (Изменение только контейнера, без перекодирования видео как такового). Я думаю, что я понимаю спецификацию транспортного потока mpeg 2 (H. 222.0), но я не могу заставить QuickTime воспроизвести полученный результат .файлы ts (VLC и FFMPEG воспроизводятся нормально). Что я делаю:

  1. создать PAT с помощью программы map pid 53
  2. создание PMT с pid 53 для ПЦР PID 70
  3. разбить необработанный NALUs на пакеты PES с PID 70-добавить поле адаптации с байтами начинки, если длина PES меньше 184 байт
У меня есть два (почти идентичных) файла - один из них-два фрейма .файл ts, выброшенный VLC, другой-это два кадра .ts-файл, сброшенный VLC, транскодируется в raw H. 264, который, в свою очередь, транскодируется в .ТС снова с моим инструментом. Различия минимальны, но для жизни во мне QuickTime воспроизводит только оригинальный VLC .ТС, только не мой транскодированный. Я использую tsreport из http://tstools.berlios.de сообщить о различном .TS файловые структуры и выглядят они почти одинаково. Ниже приведены журналы, выброшенные tsreport. Есть идеи ?

Журнал 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 3

1 ответ:

Проблема заключалась в том, что перед каждым NALU у меня был тип NALUs 9, то есть мой поток был чем - то вроде 9 7 9 8 9 6 9 5 ... вместо того, чтобы 9 7 8 6 5 9 1 9 1 ... Я изменил свой контейнерный транскодер, чтобы выводить только один разделитель единиц доступа-то есть, тип NALU 9 - на кадр (не на NALU), и теперь все хорошо.