diff --git a/libavformat/udp.c b/libavformat/udp.c index 7d2529bcfe..71dd5bf069 100644 --- a/libavformat/udp.c +++ b/libavformat/udp.c @@ -339,6 +339,8 @@ static int udp_open(URLContext *h, const char *uri, int flags) if(!ff_network_init()) return AVERROR(EIO); + if (s->is_multicast && !(h->flags & URL_WRONLY)) + s->local_port = port; #ifndef CONFIG_IPV6 udp_fd = socket(AF_INET, SOCK_DGRAM, 0); if (udp_fd < 0) @@ -346,12 +348,7 @@ static int udp_open(URLContext *h, const char *uri, int flags) my_addr.sin_family = AF_INET; my_addr.sin_addr.s_addr = htonl (INADDR_ANY); - if (s->is_multicast && !(h->flags & URL_WRONLY)) { - /* special case: the bind must be done on the multicast address port */ - my_addr.sin_port = s->dest_addr.sin_port; - } else { - my_addr.sin_port = htons(s->local_port); - } + my_addr.sin_port = htons(s->local_port); if (s->reuse_socket) if (setsockopt (udp_fd, SOL_SOCKET, SO_REUSEADDR, &(s->reuse_socket), sizeof(s->reuse_socket)) != 0) @@ -365,8 +362,6 @@ static int udp_open(URLContext *h, const char *uri, int flags) getsockname(udp_fd, (struct sockaddr *)&my_addr1, &len); s->local_port = ntohs(my_addr1.sin_port); #else - if (s->is_multicast && !(h->flags & URL_WRONLY)) - s->local_port = port; udp_fd = udp_ipv6_set_local(h); if (udp_fd < 0) goto fail;