rtsp: add option to set the socket timeout of the lower protocol.
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 7 Apr 2013 01:39:56 +0000 (03:39 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 8 Apr 2013 15:45:13 +0000 (17:45 +0200)
Fixes Ticket2294

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
doc/protocols.texi
libavformat/rtsp.c
libavformat/rtsp.h

index 9940b67..0c56b8b 100644 (file)
@@ -538,6 +538,11 @@ To receive a stream in realtime:
 ffmpeg -rtsp_flags listen -i rtsp://ownaddress/live.sdp @var{output}
 @end example
 
+@table @option
+@item stimeout
+Socket IO timeout in micro seconds.
+@end table
+
 @section sap
 
 Session Announcement Protocol (RFC 2974). This is not technically a
index fcc134f..dc94f0f 100644 (file)
@@ -91,6 +91,7 @@ const AVOption ff_rtsp_options[] = {
     { "min_port", "Minimum local UDP port", OFFSET(rtp_port_min), AV_OPT_TYPE_INT, {.i64 = RTSP_RTP_PORT_MIN}, 0, 65535, DEC|ENC },
     { "max_port", "Maximum local UDP port", OFFSET(rtp_port_max), AV_OPT_TYPE_INT, {.i64 = RTSP_RTP_PORT_MAX}, 0, 65535, DEC|ENC },
     { "timeout", "Maximum timeout (in seconds) to wait for incoming connections. -1 is infinite. Implies flag listen", OFFSET(initial_timeout), AV_OPT_TYPE_INT, {.i64 = -1}, INT_MIN, INT_MAX, DEC },
+    { "stimeout", "timeout (in micro seconds) of socket i/o operations.", OFFSET(stimeout), AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, DEC },
     RTSP_REORDERING_OPTS(),
     { NULL },
 };
@@ -1618,7 +1619,8 @@ redirect:
         }
     } else {
         /* open the tcp connection */
-        ff_url_join(tcpname, sizeof(tcpname), "tcp", NULL, host, port, NULL);
+        ff_url_join(tcpname, sizeof(tcpname), "tcp", NULL, host, port,
+                    "?timeout=%d", rt->stimeout);
         if (ffurl_open(&rt->rtsp_hd, tcpname, AVIO_FLAG_READ_WRITE,
                        &s->interrupt_callback, NULL) < 0) {
             err = AVERROR(EIO);
index 321cd7a..4af3507 100644 (file)
@@ -391,6 +391,11 @@ typedef struct RTSPState {
     int initial_timeout;
 
     /**
+     * timeout of socket i/o operations.
+     */
+    int stimeout;
+
+    /**
      * Size of RTP packet reordering queue.
      */
     int reordering_queue_size;