[FFmpeg-devel] Timestamp issues in live RTP->mpegts bridges

Alexandre FERRIEUX - FT/RD/SIRP/ASF/SOFTL alexandre.ferrieux
Tue Jan 20 11:14:21 CET 2009


Hi Luca,

Luca Abeni wrote:
> 
> Looks like for some reason the H.263 stream is detected as 29.97 fps.
> Now, I do not know why this is happening: it can be due to the timestamp 
> issue you noticed, or to something else... Can you dump the H.263 
> bitstream to a file (with vcodec copy) and then do "ffmpeg -i" on that 
> file and post the result?

OK, I did that. But I cannot simply generate a flat stream with standard 
options (or maybe I'm missing one):

  ./ffmpeg -i /tmp/video/h263.sdp -vcodec copy - > a.263
  ./ffmpeg -i /tmp/video/h263.sdp -vcodec copy a.263

both these commands yield an error:

  Unable to find a suitable output format for 'pipe:'/'a.263'

I suspect one missing step is the notion that glueing together the H263 
packets yields a parseable bitstream. I don't have a concrete example, 
but I can imagine an RTP encapsulation scheme of some codec where the 
packet boundaries are crucial to the downstream parsing, or at least 
important for packet loss resilience, etc... does the code reflect that, 
and thus doesn't allow the flat output ?

However I worked around that by putting an 'fwrite()' (conditioned by an 
environment variable) in my H263-specific parse_packet function, as 
suggested by Michael last week.

The generated flat H263 bitstream is played by mplayer, but too fast.

The output of ffmpeg -i is:

  Input #0, h263, from 'a.263':
    Duration: N/A, bitrate: N/A
      Stream #0.0: Video: h263, yuv420p, 176x144 [PAR 12:11 DAR 4:3], 
29.97 tb(r)
  At least one output file must be specified

So it is wrongly guessing 29.97.
Maybe I could "force" the fps through some SDP parameter or command-line 
option ?

Also, I was wondering: instead of giving a fixed frame rate, is there a 
way of just inheriting the input timestamps ? I tried -copyts -- to no 
avail...


>> Wow !!! It seems that in rtpdec.c, as soon as we have a dynamic 
>> depayloader (same for h264), then the ->parse_packet is called but *not* 
>> finalize_packet ...
> 
> Uh... Looks like you found a bug ;-)
> Yes, the dynamic payload stuff looks broken...

Not sure I'm proud :-)

> Try moving finalize_packet() out of the else block and see if it fixes 
> anything...

I did that, but it still detects 29.97.


-Alex




More information about the ffmpeg-devel mailing list