there is a bug when useing getaddrinfo in IOS when use hardcode IPv4 address and in IPv6-only networks.It can not accept a port number as second parameter as an alternative you can pass a service name or it will cause connect fail. In current video CDN dispatching mechanism the hardcode IPv4 is widly used for better performance. This problem cause many APP use ffmpeg to play this type CDN dispatched video were rejected by APP store. This patch fix this by adding a port to name map for widly used port number that these CDN use to dispatch video.
--- libavformat/tcp.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) mode change 100644 => 100755 libavformat/tcp.c diff --git a/libavformat/tcp.c b/libavformat/tcp.c old mode 100644 new mode 100755 index c105479..0de7710 --- a/libavformat/tcp.c +++ b/libavformat/tcp.c @@ -72,7 +72,7 @@ static int tcp_open(URLContext *h, const char *uri, int flags) char buf[256]; int ret; char hostname[1024],proto[1024],path[1024]; - char portstr[10]; + char portstr[64]; s->open_timeout = 5000000; av_url_split(proto, sizeof(proto), NULL, 0, hostname, sizeof(hostname), @@ -105,7 +105,19 @@ static int tcp_open(URLContext *h, const char *uri, int flags) } hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; - snprintf(portstr, sizeof(portstr), "%d", port); + + switch (port) { + case 80: + snprintf(portstr, sizeof(portstr), "%s", "http"); + break; + case 1935: + snprintf(portstr, sizeof(portstr), "%s", "macromedia-fcs"); //know as rtmp + break; + default: + snprintf(portstr, sizeof(portstr), "%d", port); + break; + } + if (s->listen) hints.ai_flags |= AI_PASSIVE; if (!hostname[0]) @@ -268,3 +280,4 @@ const URLProtocol ff_tcp_protocol = { .flags = URL_PROTOCOL_FLAG_NETWORK, .priv_data_class = &tcp_class, }; + -- 1.7.9.5 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel