# HG changeset patch # User rbultje # Date 1233495465 0 # Node ID 0d776969b70800de08a7e465c83fbb3f6d7d9d93 # Parent 49c1d3b277272b1bbbb4a56b3cedce372f4577c2 Fix the Transport: line in the SETUP request so that it works with WMS servers when trying to set up a session over TCP: - add the interleave property - add unicast, only for WMS (since it is normally only UDP, but WMS expects it for UDP and TCP) - add mode=play See discussion in "[PATCH] RTSP-MS 9/15: add interleave property to the TCP transport line of the SETUP request" thread on mailinglist. diff -r 49c1d3b27727 -r 0d776969b708 rtsp.c --- a/rtsp.c Sun Feb 01 02:00:19 2009 +0000 +++ b/rtsp.c Sun Feb 01 13:37:45 2009 +0000 @@ -886,7 +886,7 @@ int lower_transport, const char *real_challenge) { RTSPState *rt = s->priv_data; - int j, i, err; + int j, i, err, interleave = 0; RTSPStream *rtsp_st; RTSPHeader reply1, *reply = &reply1; char cmd[2048]; @@ -943,14 +943,21 @@ /* RTP/TCP */ else if (lower_transport == RTSP_LOWER_TRANSPORT_TCP) { snprintf(transport, sizeof(transport) - 1, - "%s/TCP", trans_pref); + "%s/TCP;", trans_pref); + if (rt->server_type == RTSP_SERVER_WMS) + av_strlcat(transport, "unicast;", sizeof(transport)); + av_strlcatf(transport, sizeof(transport), + "interleaved=%d-%d", + interleave, interleave + 1); + interleave += 2; } else if (lower_transport == RTSP_LOWER_TRANSPORT_UDP_MULTICAST) { snprintf(transport, sizeof(transport) - 1, "%s/UDP;multicast", trans_pref); } - if (rt->server_type == RTSP_SERVER_REAL) + if (rt->server_type == RTSP_SERVER_REAL || + rt->server_type == RTSP_SERVER_WMS) av_strlcat(transport, ";mode=play", sizeof(transport)); snprintf(cmd, sizeof(cmd), "SETUP %s RTSP/1.0\r\n"