aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2010-03-15 14:20:07 +0000
committerMartin Storsjö <martin@martin.st>2010-03-15 14:20:07 +0000
commitc07c6f8183e61e81f09820ef105a7d521aa41f40 (patch)
tree94957efb7276488a53397652ef7db48239cf61cd
parent4a287145c2838aaef61c927fd5311fff643845ef (diff)
downloadffmpeg-c07c6f8183e61e81f09820ef105a7d521aa41f40.tar.gz
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. Originally committed as revision 22545 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavformat/rtsp.c6
-rw-r--r--libavformat/rtsp.h3
2 files changed, 9 insertions, 0 deletions
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;
/**