Mercurial > libavformat.hg
diff rtsp.c @ 5967:c5a3e1951fc6 libavformat
Reset RTCP timestamps after seeking, add range start offset to the packets timestamps
If these aren't reset, the timestamps make a huge jump when the next RTCP
is received.
author | mstorsjo |
---|---|
date | Tue, 20 Apr 2010 07:38:52 +0000 |
parents | 9a86b49201bb |
children | f74198942337 |
line wrap: on
line diff
--- a/rtsp.c Tue Apr 20 07:34:28 2010 +0000 +++ b/rtsp.c Tue Apr 20 07:38:52 2010 +0000 @@ -1314,6 +1314,7 @@ { RTSPState *rt = s->priv_data; RTSPMessageHeader reply1, *reply = &reply1; + int i; char cmd[1024]; av_log(s, AV_LOG_DEBUG, "hello state=%d\n", rt->state); @@ -1330,6 +1331,22 @@ if (reply->status_code != RTSP_STATUS_OK) { return -1; } + if (reply->range_start != AV_NOPTS_VALUE && + rt->transport == RTSP_TRANSPORT_RTP) { + for (i = 0; i < rt->nb_rtsp_streams; i++) { + RTSPStream *rtsp_st = rt->rtsp_streams[i]; + RTPDemuxContext *rtpctx = rtsp_st->transport_priv; + AVStream *st = NULL; + if (rtsp_st->stream_index >= 0) + st = s->streams[rtsp_st->stream_index]; + rtpctx->last_rtcp_ntp_time = AV_NOPTS_VALUE; + rtpctx->first_rtcp_ntp_time = AV_NOPTS_VALUE; + if (st) + rtpctx->range_start_offset = av_rescale_q(reply->range_start, + AV_TIME_BASE_Q, + st->time_base); + } + } } rt->state = RTSP_STATE_STREAMING; return 0;