[FFmpeg-devel] [PATCH] flv muxer timestamp fix

Benjamin Larsson banan
Fri Jan 28 15:41:38 CET 2011


On 01/28/2011 02:32 PM, M?ns Rullg?rd wrote:
> Benjamin Larsson <banan at ludd.ltu.se> writes:
>
>> When streaming flv's with ffserver there is a timestamp jump in the
>> beginning of the stream caused by the timestamp in the header to always
>> start at 0. This patch fixes this by measuring between the current and
>> previous timestamp and if it is to large it biases the timestamp so they
>> are offset by a constant and thus removing the jump in timestamp.
>>
>> MvH
>> Benjamin Larsson
>>
>> Index: libavformat/flvenc.c
>> ===================================================================
>> --- libavformat/flvenc.c	(revision 26399)
>> +++ libavformat/flvenc.c	(working copy)
>> @@ -56,6 +56,8 @@
>>      int64_t duration;
>>      int delay; ///< first dts delay for AVC
>>      int64_t last_video_ts;
>> +    int64_t ts_offset;
>> +    int64_t last_ts;
>>  } FLVContext;
>>  
>>  static int get_audio_flags(AVCodecContext *enc){
>> @@ -361,6 +363,7 @@
>>      AVCodecContext *enc = s->streams[pkt->stream_index]->codec;
>>      FLVContext *flv = s->priv_data;
>>      unsigned ts;
>> +    int64_t last_ts;
>>      int size= pkt->size;
>>      uint8_t *data= NULL;
>>      int flags, flags_size;
>> @@ -404,6 +407,11 @@
>>              flv->delay = -pkt->dts;
>>      }
>>  
>> +    last_ts = flv->last_ts;
>> +    flv->last_ts = ts;
>> +    if (ts - last_ts > 10000)
>> +        flv->ts_offset = ts - last_ts - 1;
>> +
>>      ts = pkt->dts + flv->delay; // add delay to force positive dts
>>      if (enc->codec_type == AVMEDIA_TYPE_VIDEO) {
>>          if (flv->last_video_ts < ts)
> I don't see you using the new struct fields for anything.  Is the
> patch incomplete?
>
+    last_ts = flv->last_ts;
+    flv->last_ts = ts;
+    if (ts - last_ts > 10000)
+        flv->ts_offset = ts - last_ts - 1;
+



+    ts -= flv->ts_offset;

was missing :/

MvH
Benjamin Larsson



More information about the ffmpeg-devel mailing list