diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index c079fb6293..72de537956 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -612,6 +612,7 @@ void ff_rtsp_close_streams(AVFormatContext *s) static void *rtsp_rtp_mux_open(AVFormatContext *s, AVStream *st, URLContext *handle) { + RTSPState *rt = s->priv_data; AVFormatContext *rtpctx; int ret; AVOutputFormat *rtp_format = av_guess_format("rtp", NULL, NULL); @@ -634,6 +635,9 @@ static void *rtsp_rtp_mux_open(AVFormatContext *s, AVStream *st, /* Copy other stream parameters. */ rtpctx->streams[0]->sample_aspect_ratio = st->sample_aspect_ratio; + /* Set the synchronized start time. */ + rtpctx->start_time_realtime = rt->start_time; + /* Remove the local codec, link to the original codec * context instead, to give the rtp muxer access to * codec parameters. */ @@ -1340,6 +1344,8 @@ static int rtsp_setup_output_streams(AVFormatContext *s, const char *addr) char *sdp; AVFormatContext sdp_ctx, *ctx_array[1]; + rt->start_time = av_gettime(); + /* Announce the stream */ snprintf(cmd, sizeof(cmd), "ANNOUNCE %s RTSP/1.0\r\n" diff --git a/libavformat/rtsp.h b/libavformat/rtsp.h index 01caf39bf9..a322281282 100644 --- a/libavformat/rtsp.h +++ b/libavformat/rtsp.h @@ -271,6 +271,9 @@ typedef struct RTSPState { * for all subsequent RTSP requests, rather than the input URI; in * other cases, this is a copy of AVFormatContext->filename. */ char control_uri[1024]; + + /** The synchronized start time of the output streams. */ + int64_t start_time; } RTSPState; /**