diff --git a/src/Rtp/RtpServer.cpp b/src/Rtp/RtpServer.cpp index f355ed14..fc256110 100644 --- a/src/Rtp/RtpServer.cpp +++ b/src/Rtp/RtpServer.cpp @@ -192,12 +192,18 @@ void RtpServer::start(uint16_t local_port, const string &stream_id, TcpMode tcp_ helper = std::make_shared(std::move(rtcp_socket), stream_id); helper->startRtcp(); helper->setRtpServerInfo(local_port,tcp_mode,re_use_port,ssrc); - rtp_socket->setOnRead([rtp_socket, helper, ssrc](const Buffer::Ptr &buf, struct sockaddr *addr, int addr_len) { + bool bind_peer_addr = false; + rtp_socket->setOnRead([rtp_socket, helper, ssrc, bind_peer_addr](const Buffer::Ptr &buf, struct sockaddr *addr, int addr_len) mutable { RtpHeader *header = (RtpHeader *)buf->data(); auto rtp_ssrc = ntohl(header->ssrc); if (ssrc && rtp_ssrc != ssrc) { WarnL << "ssrc不匹配,rtp已丢弃:" << rtp_ssrc << " != " << ssrc; } else { + if (!bind_peer_addr) { + //绑定对方ip+端口,防止多个设备或一个设备多次推流从而日志报ssrc不匹配问题 + bind_peer_addr = true; + rtp_socket->bindPeerAddr(addr, addr_len); + } helper->onRecvRtp(rtp_socket, buf, addr); } });