# HG changeset patch # User mstorsjo # Date 1268662807 0 # Node ID 777a89fdb1c0e90673b67e5b84720bf5bbbbe6df # Parent cc35562d3747876d6dc3dbb5ea067565af2efe68 RTSP: Synchronize the start time of the chained RTP muxers This makes sure that the streams get correctly synchronized when viewed, previously the streams were out of sync by as much time as it took between the initialization of the individual muxers. diff -r cc35562d3747 -r 777a89fdb1c0 rtsp.c --- a/rtsp.c Mon Mar 15 10:37:12 2010 +0000 +++ b/rtsp.c Mon Mar 15 14:20:07 2010 +0000 @@ -612,6 +612,7 @@ 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 @@ /* 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 @@ 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 -r cc35562d3747 -r 777a89fdb1c0 rtsp.h --- a/rtsp.h Mon Mar 15 10:37:12 2010 +0000 +++ b/rtsp.h Mon Mar 15 14:20:07 2010 +0000 @@ -271,6 +271,9 @@ * 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; /**