[linux-dvb] How to convert MPEG-TS to MPEG-PS on the fly?

Johannes Stezenbach js at linuxtv.org
Thu Aug 28 16:40:50 CEST 2008


On Thu, Aug 28, 2008 at 12:00:20AM +0200, Josef Wolf wrote:
> 
> Inspired by your detailed description, I decided to hack together an
> quick-n-dirty script to analyze dvbsnoop's timing output.  I attach
> the script at the end of this mail.  First, I'd like to present some
> of the results.  Given a file containing TS (z.ts), I ran those commands:
> 
>   $ rm z.mpg
>   $ ffmpeg -f dvd -acodec copy -vcodec copy -i  z.ts  z.mpg
>   $  ./parsesnoop z.mpg   20
>    pkt-nr   id   len        PTS           DTS          ESCR         SCR
>   00000001 0xba 0x000c                                           14:05:04.5660
>   00000005 0xba 0x000c                                           14:05:04.7942
>   00000007 0xe0 0x0800 22:35:16.0619               13:44:30.5997
>   00000008 0xe0 0x0800 26:05:52.7719 19:59:24.0657
...
> All of those times look pretty much wired to me.  There seem to be no
> consistency at all.  Just some random numbers.  But this stream plays
> very good on all the players I tried.
> 
> Then I tried:
> 
>   $ libdvb-0.5.5.1/dvb-mpegtools/ts2ps 120 110 <z.ts >z.ts2ps
>   $ ./parsesnoop z.ts2ps 20
>    pkt-nr   id   len        PTS           DTS          ESCR         SCR
>   00000001 0xba 0x000e                                            4:42:57.2304
>   00000003 0xe0 0x0800 17:58:19.1292 17:58:19.0092
>   00000033 0xe0 0x0800 17:58:19.0492
>   00000042 0xe0 0x0800 17:58:19.0892
>   00000052 0xe0 0x0800 17:58:19.2492 17:58:19.1292
...
> This looks much more consistent.  The only strange thing is that ESCR
> is missing.  But all the players I tried (except mplayer) fail to play
> this stream in one way or another.

The ESCR isn't normally used, I think it means the PES streams don't have
a common time base. The SCR in the second case doesn't match the
DTS/PTS values. A software player would probably ignore it anyway
and sync A/V via PTS only, but a hardware deocder might decide to
play asynchronously. Are you sure dvbsnoop output is correct?

Have you tried iso13818ps from http://www.scara.com/~schirmer/o/mplex13818/ ?
(linked from http://linuxtv.org/projects.php , BTW)

You mentioned you are discarding the adaptation fields. This means
you don't handle timebase discontinuities. Try to feed the original
TS to iso13818ps (not your filtered one), it should handle it correctly.

ISO-13818-4 (MPEG2 conformance testing) explains a bit how the
decoder model works. Look for document "ISO/IEC JTC1/SC29/WG11 N0804".
(I'm assuming you already have "ITU-T Recommendation H.222.0" aka ISO-13818-1)


HTH,
Johannes



More information about the linux-dvb mailing list