[FFmpeg-cvslog] r22545 - in trunk/libavformat: rtsp.c rtsp.h

mstorsjo subversion
Mon Mar 15 15:20:07 CET 2010


Author: mstorsjo
Date: Mon Mar 15 15:20:07 2010
New Revision: 22545

Log:
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.

Modified:
   trunk/libavformat/rtsp.c
   trunk/libavformat/rtsp.h

Modified: trunk/libavformat/rtsp.c
==============================================================================
--- trunk/libavformat/rtsp.c	Mon Mar 15 15:03:01 2010	(r22544)
+++ trunk/libavformat/rtsp.c	Mon Mar 15 15:20:07 2010	(r22545)
@@ -612,6 +612,7 @@ void ff_rtsp_close_streams(AVFormatConte
 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(AVFormatC
     /* 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(AVF
     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"

Modified: trunk/libavformat/rtsp.h
==============================================================================
--- trunk/libavformat/rtsp.h	Mon Mar 15 15:03:01 2010	(r22544)
+++ trunk/libavformat/rtsp.h	Mon Mar 15 15:20:07 2010	(r22545)
@@ -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;
 
 /**



More information about the ffmpeg-cvslog mailing list