# HG changeset patch # User kostya # Date 1259683724 0 # Node ID 99aeb2e385dfa734b71f1786eb485e48af25e0d1 # Parent 432e1b6e15685cae19f0649fe0c667997b5d1e31 Full-header RTMP packets contain real timestamp, others contain timestamp difference, so make all read packets store absolute timestamp. As a consequence, we don't need to track audio/video timestamps separately any longer in protocol handler. diff -r 432e1b6e1568 -r 99aeb2e385df rtmppkt.c --- a/rtmppkt.c Tue Dec 01 15:13:23 2009 +0000 +++ b/rtmppkt.c Tue Dec 01 16:08:44 2009 +0000 @@ -116,6 +116,8 @@ return AVERROR(EIO); timestamp = AV_RB32(buf); } + if (hdr != RTMP_PS_TWELVEBYTES) + timestamp += prev_pkt[channel_id].timestamp; } if (ff_rtmp_packet_create(p, channel_id, type, timestamp, data_size)) return -1; diff -r 432e1b6e1568 -r 99aeb2e385df rtmpproto.c --- a/rtmpproto.c Tue Dec 01 15:13:23 2009 +0000 +++ b/rtmpproto.c Tue Dec 01 16:08:44 2009 +0000 @@ -63,8 +63,6 @@ uint8_t* flv_data; ///< buffer with data for demuxer int flv_size; ///< current buffer size int flv_off; ///< number of bytes read from current buffer - uint32_t video_ts; ///< current video timestamp in milliseconds - uint32_t audio_ts; ///< current audio timestamp in milliseconds } RTMPContext; #define PLAYER_KEY_OPEN_PART_LEN 30 ///< length of partial key used for first client digest signing @@ -515,13 +513,6 @@ uint8_t *p; uint32_t ts = rpkt.timestamp; - if (rpkt.type == RTMP_PT_VIDEO) { - rt->video_ts += rpkt.timestamp; - ts = rt->video_ts; - } else if (rpkt.type == RTMP_PT_AUDIO) { - rt->audio_ts += rpkt.timestamp; - ts = rt->audio_ts; - } // generate packet header and put data into buffer for FLV demuxer rt->flv_off = 0; rt->flv_size = rpkt.data_size + 15;