diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index a7bd0199ff8efe2b2ef73e8a93f1958e5ad4b200..47656baa955f4e934232cbf73e3f17ebbcc3bc6e 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -392,6 +392,8 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1, codec_type = CODEC_TYPE_AUDIO; } else if (!strcmp(st_type, "video")) { codec_type = CODEC_TYPE_VIDEO; + } else if (!strcmp(st_type, "application")) { + codec_type = CODEC_TYPE_DATA; } else { s1->skip_media = 1; return; @@ -942,6 +944,12 @@ make_setup_request (AVFormatContext *s, const char *host, int port, /* RTP/TCP */ else if (lower_transport == RTSP_LOWER_TRANSPORT_TCP) { + /** For WMS streams, the application streams are only used for + * UDP. When trying to set it up for TCP streams, the server + * will return an error. Therefore, we skip those streams. */ + if (rt->server_type == RTSP_SERVER_WMS && + s->streams[rtsp_st->stream_index]->codec->codec_type == CODEC_TYPE_DATA) + continue; snprintf(transport, sizeof(transport) - 1, "%s/TCP;", trans_pref); if (rt->server_type == RTSP_SERVER_WMS)