Le 2014-10-09 23:17, Luca Barbato a écrit :
---
libavformat/rtsp.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index 646712e..cadf025 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -1589,7 +1589,9 @@ void ff_rtsp_close_connections(AVFormatContext
*s)
int ff_rtsp_connect(AVFormatContext *s)
{
RTSPState *rt = s->priv_data;
- char host[1024], path[1024], tcpname[1024], cmd[2048],
auth[128];
+ char proto[128], host[1024], path[1024];
+ char tcpname[1024], cmd[2048], auth[128];
+ const char *lower_rtsp_proto = "tcp";
int port, err, tcp_fd;
RTSPMessageHeader reply1 = {0}, *reply = &reply1;
int lower_transport_mask = 0;
@@ -1621,8 +1623,12 @@ int ff_rtsp_connect(AVFormatContext *s)
redirect:
lower_transport_mask = rt->lower_transport_mask;
/* extract hostname and port */
- av_url_split(NULL, 0, auth, sizeof(auth),
+ av_url_split(proto, sizeof(proto), auth, sizeof(auth),
host, sizeof(host), &port, path, sizeof(path),
s->filename);
+
+ if (!strcmp(proto, "rtsps"))
+ lower_rtsp_proto = "tls";
That seems much too simplistic to be rtsps. For a start, where is the
default RTSP/TLS port number (332)?
More importantly, the user should expect that the media content proper
will be hashed and encrypted when using rtsps. This seems to merely
encrypt the control connection, which will fail that expectation. And of
course, it makes TLS arguably totally useless. So for the time being, I
think interleaved RTP should be forced (over TLS) and no other RTP
transport should be negotiated by the client.
+
if (*auth) {
av_strlcpy(rt->auth, auth, sizeof(rt->auth));
}
@@ -1647,7 +1653,7 @@ redirect:
/* Construct the URI used in request; this is similar to
s->filename,
* but with authentication credentials removed and RTSP specific
options
* stripped out. */
- ff_url_join(rt->control_uri, sizeof(rt->control_uri), "rtsp",
NULL,
+ ff_url_join(rt->control_uri, sizeof(rt->control_uri), proto,
NULL,
host, port, "%s", path);
if (rt->control_transport == RTSP_MODE_TUNNEL) {
@@ -1726,7 +1732,8 @@ redirect:
}
} else {
/* open the tcp connection */
- ff_url_join(tcpname, sizeof(tcpname), "tcp", NULL, host,
port, NULL);
+ ff_url_join(tcpname, sizeof(tcpname), lower_rtsp_proto,
NULL,
+ host, port, NULL);
if (ffurl_open(&rt->rtsp_hd, tcpname, AVIO_FLAG_READ_WRITE,
&s->interrupt_callback, NULL) < 0) {
err = AVERROR(EIO);
--
Rémi Denis-Courmont
_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel