aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/rtsp.c
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2010-04-20 07:38:52 +0000
committerMartin Storsjö <martin@martin.st>2010-04-20 07:38:52 +0000
commit5948f8222706d63f603167bf1a17c20bdee0b321 (patch)
tree3e2a4b1010f72d96e0f46f49eb0a3b99d2c8ee2f /libavformat/rtsp.c
parent2cab6b48ad9595abe24615c3262f22b76c9b921d (diff)
downloadffmpeg-5948f8222706d63f603167bf1a17c20bdee0b321.tar.gz
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. Originally committed as revision 22918 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/rtsp.c')
-rw-r--r--libavformat/rtsp.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index 0931201f81..06a6e9c55f 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -1314,6 +1314,7 @@ static int rtsp_read_play(AVFormatContext *s)
{
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 @@ static int rtsp_read_play(AVFormatContext *s)
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;