提交 d1c6e47c 编写于 作者: R Ronald S. Bultje

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.

Originally committed as revision 16913 to svn://svn.ffmpeg.org/ffmpeg/trunk
上级 82aaa790
...@@ -886,7 +886,7 @@ make_setup_request (AVFormatContext *s, const char *host, int port, ...@@ -886,7 +886,7 @@ make_setup_request (AVFormatContext *s, const char *host, int port,
int lower_transport, const char *real_challenge) int lower_transport, const char *real_challenge)
{ {
RTSPState *rt = s->priv_data; RTSPState *rt = s->priv_data;
int j, i, err; int j, i, err, interleave = 0;
RTSPStream *rtsp_st; RTSPStream *rtsp_st;
RTSPHeader reply1, *reply = &reply1; RTSPHeader reply1, *reply = &reply1;
char cmd[2048]; char cmd[2048];
...@@ -943,14 +943,21 @@ make_setup_request (AVFormatContext *s, const char *host, int port, ...@@ -943,14 +943,21 @@ make_setup_request (AVFormatContext *s, const char *host, int port,
/* RTP/TCP */ /* RTP/TCP */
else if (lower_transport == RTSP_LOWER_TRANSPORT_TCP) { else if (lower_transport == RTSP_LOWER_TRANSPORT_TCP) {
snprintf(transport, sizeof(transport) - 1, 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) { else if (lower_transport == RTSP_LOWER_TRANSPORT_UDP_MULTICAST) {
snprintf(transport, sizeof(transport) - 1, snprintf(transport, sizeof(transport) - 1,
"%s/UDP;multicast", trans_pref); "%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)); av_strlcat(transport, ";mode=play", sizeof(transport));
snprintf(cmd, sizeof(cmd), snprintf(cmd, sizeof(cmd),
"SETUP %s RTSP/1.0\r\n" "SETUP %s RTSP/1.0\r\n"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册