diff --git a/src/media_stream.cc b/src/media_stream.cc index d121a40..ec8a0ab 100644 --- a/src/media_stream.cc +++ b/src/media_stream.cc @@ -103,7 +103,7 @@ rtp_error_t uvgrtp::media_stream::init_connection() if (ipv6_ && src_port_ != 0 && local_address_ != "") { multicast_sockaddr6_ = uvgrtp::socket::create_ip6_sockaddr(local_address_, src_port_); if (uvgrtp::socket::is_multicast(multicast_sockaddr6_)) { - socket_ = sfp_->create_new_socket(); + socket_ = sfp_->create_new_socket(2); new_socket_ = true; multicast = true; } @@ -111,7 +111,7 @@ rtp_error_t uvgrtp::media_stream::init_connection() else if (src_port_ != 0 && local_address_ != "") { multicast_sockaddr_ = uvgrtp::socket::create_sockaddr(AF_INET, local_address_, src_port_); if (uvgrtp::socket::is_multicast(multicast_sockaddr_)) { - socket_ = sfp_->create_new_socket(); + socket_ = sfp_->create_new_socket(2); new_socket_ = true; multicast = true; } @@ -121,14 +121,14 @@ rtp_error_t uvgrtp::media_stream::init_connection() // socket if socket multiplexing is used // Source port is given and is not in use -> create new socket if (!multicast && src_port_ != 0 && !sfp_->is_port_in_use(src_port_)) { - socket_ = sfp_->create_new_socket(); + socket_ = sfp_->create_new_socket(2); new_socket_ = true; } // Source port is in use -> fetch the existing socket else if (!multicast) { socket_ = sfp_->get_socket_ptr(src_port_); if (!socket_) { - socket_ = sfp_->create_new_socket(); + socket_ = sfp_->create_new_socket(2); new_socket_ = true; } } @@ -466,7 +466,7 @@ rtp_error_t uvgrtp::media_stream::start_components() // any socket multiplexing, it will be 0 by default if (!sfp_->is_port_in_use(rtcp_port)) { - rtcp_socket = sfp_->create_new_socket(); + rtcp_socket = sfp_->create_new_socket(1); rtcp_reader = sfp_->install_rtcp_reader(rtcp_port); rtcp_reader->set_socket(rtcp_socket); diff --git a/src/socketfactory.cc b/src/socketfactory.cc index a6fe209..c188651 100644 --- a/src/socketfactory.cc +++ b/src/socketfactory.cc @@ -68,7 +68,7 @@ rtp_error_t uvgrtp::socketfactory::set_local_interface(std::string local_addr) return RTP_OK; } -std::shared_ptr uvgrtp::socketfactory::create_new_socket() +std::shared_ptr uvgrtp::socketfactory::create_new_socket(int type) { rtp_error_t ret = RTP_OK; std::shared_ptr socket = std::make_shared(rce_flags_); @@ -96,9 +96,13 @@ std::shared_ptr uvgrtp::socketfactory::create_new_socket() socket_mutex_.lock(); used_sockets_.push_back(socket); socket_mutex_.unlock(); - std::shared_ptr flow = std::shared_ptr(new uvgrtp::reception_flow()); - std::pair pair = std::make_pair(flow, socket); - reception_flows_.insert(pair); + + // If the socket is a type 2 (non-RTCP) socket, install a reception_flow + if (type == 2) { + std::shared_ptr flow = std::shared_ptr(new uvgrtp::reception_flow()); + std::pair pair = std::make_pair(flow, socket); + reception_flows_.insert(pair); + } return socket; } diff --git a/src/socketfactory.hh b/src/socketfactory.hh index 75a41c6..994add1 100644 --- a/src/socketfactory.hh +++ b/src/socketfactory.hh @@ -27,7 +27,6 @@ namespace uvgrtp { * This is also true for RTCP: the rtcp_reader will distribute received packets depending on the * SSRCs in the packets */ - // TODO: currently RTCP sockets get both a reception_flow and an rtcp_reader. This is not necessary class socketfactory { @@ -45,8 +44,9 @@ namespace uvgrtp { /* Create a new socket. Depending on if the local address was IPv4 or IPv6, the socket * will use the correct IP version * + * Param type 1 RTCP socket, 2 for any other type of a socket * Return the created socket on success, nullptr otherwise */ - std::shared_ptr create_new_socket(); + std::shared_ptr create_new_socket(int type); /* Bind socket to the local IP address and given port *