[vdr] vdr + h264

Stefan Lucke stefan at lucke.in-berlin.de
Tue Jan 15 10:10:15 CET 2008


On Tuesday 15 January 2008, Stefan Lucke wrote:
> On Tuesday 15 January 2008, Reinhard Nissl wrote:
> > Hi,
> > 
> > Stefan Lucke schrieb:
> > 
> > > is it correct that h264 is written as PES via PlayVideo() ?
> > > 
> > > For decoding with ffmpeg it would be useful to have a 
> > > PROGRAM_STREAM_MAP in front of a new video stream.
> > 
> > Basically not a bad idea, but where do you put it in live
> > streaming? 
> 
> I think it should be transmitted first, after a stream reset.
> A basic PSM that maps from PES 0x01e0 to h264 could
> look like:
> unsigned char psm_map_0xe0_to_h264 [] =
>   { 0x00, 0x00, 0x01, 0xbc,
>     0x00, 0x10,             // psm length
>     0x00, 0x00,             // unknown
>     0x00, 0x00,             // info length
>                             // info data here
>     0x00, 0x04              // map length
>                             // map data here
>     0x1b, 0xe0, 0x00, 0x00  // h264 map entry / NO map info
>     0x00, 0x00, 0x00, 0x00  // crc32
>   };
> 
> That is inspired by ffmpegs: libavformat/mpeg.c
> mpegps_psm_parse() line ~220 .

And now I know that softdevice can switch between h264 and mpeg2
when using the following addition (file remux.c line ~2552):

#define TEST_cVideoRepacker
#ifdef TEST_cVideoRepacker
     ts2pes[numTracks++] = new cTS2PES(VPid, resultBuffer, IPACKS, 0xE0, 0x00, new cVideoRepacker(h264));
#else
     ts2pes[numTracks++] = new cTS2PES(VPid, resultBuffer, IPACKS, 0xE0);
#endif
-- cut --
     if (h264) {
        resultBuffer->Put (psm_map_0xe0_to_h264, sizeof (psm_map_0xe0_to_h264));
fprintf(stderr, "---- is h264\n");
	} else {
fprintf(stderr, "---- is NO h264\n");
        }
-- cut --

The bad thing is, PSM info should be repeated more often, as the decoder
may reset itself due to bad reception (ahead of each video packet ??).

Or is there a simpler way to recognize h264 (or other codecs)
as Klaus demands?


Stefan Lucke



More information about the vdr mailing list