[FFmpeg-devel] [RFC] Private streams in MPEG PS

Måns Rullgård mans
Wed May 27 23:00:22 CEST 2009


Jai Menon <jmenon86 at gmail.com> writes:

> Hi,
>
> I'm becoming increasingly suspicious of this check in lavf/mpeg.c:370 -
>
>   4093        mru     if (startcode == PRIVATE_STREAM_1 &&
> !m->psm_es_type[startcode & 0xff]) {
>
>              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> Looking at issue 1122 and 725 on roundup,  I'm inclined to believe
> that a lot of files out there don't have a program stream map (which I
> didn't back when issue 725 was reported). Removing this check actually
> would solve both 1122 and 725 without the need for the fix commited in
> r17150.

Removing that check would break other files.  I have at least one file
that needs this, or I wouldn't have added it.

The file in issue 1122 has this program stream map:

program_stream_map                       1bc   
  program_stream_map_length              1e     30   
  current_next_indicator                 1     
  reserved                               3     
  program_stream_map_version             0     
  reserved                               7f    
  marker_bit                             1     
  program_stream_info_length             0     
  elementary_stream_map_length           14     20   
    stream_type                          2      ITU-T Rec. H.262 | ISO/IEC 13818-2 Video or ISO/IEC 11172-2 constrained parameter video stream
    elementary_stream_id                 e0    
    elementary_stream_info_length        0     
    stream_type                          3      ISO/IEC 11172 Audio
    elementary_stream_id                 c0    
    elementary_stream_info_length        0     
    stream_type                          81     ATSC A/52 Audio (unofficial)
    elementary_stream_id                 bd    
    elementary_stream_info_length        0     
    stream_type                          81     ATSC A/52 Audio (unofficial)
    elementary_stream_id                 bd    
    elementary_stream_info_length        0     
    stream_type                          3      ISO/IEC 11172 Audio
    elementary_stream_id                 c1    
    elementary_stream_info_length        0     
  CRC_32                                 301ec18b

The first bit of data relevant to private_stream_1 looks like this:

00001800  00 00 01 ba 44 00 04 06  74 31 03 46 87 f8 00 00  |....D...t1.F....|
00001810  01 bd 07 ec 80 81 08 21  00 01 d2 f1 1e 60 3a 80  |.......!.....`:.|
00001820  02 00 01 0b 77 c6 18 1c  30 e1 df fd cd d9 24 a0  |....w...0.....$.|
00001830  00 07 df da 96 a3 43 83  c2 f4 74 68 74 0a 8d 8e  |......C...tht...|

Further on, we have this:

00002000  00 00 01 ba 44 00 04 08  95 d1 03 46 87 f8 00 00  |....D......F....|
00002010  01 bd 07 ec 80 81 08 21  00 01 d2 f1 1e 60 3a 81  |.......!.....`:.|
00002020  02 00 01 0b 77 20 13 1c  30 e1 df fd cd d9 24 a0  |....w ..0.....$.|
00002030  00 07 df da 96 84 04 04  04 10 80 80 80 82 10 10  |................|

This file indeed seems to use some kind of substream tagging.

It's all very non-standard of course, so it's hard to tell how it's
meant to be detected.  The 0x81 code suggests some relation to ATSC,
but those specs say nothing whatsoever about program streams.  There
are also no descriptors (registration or other) in the PSM.

-- 
M?ns Rullg?rd
mans at mansr.com



More information about the ffmpeg-devel mailing list