前言
RTP over TCP这种情况,一般是WebRTC P2P打洞失败,才会选择
WebRTC默认使用UDP传输,但是也可以通过TCP传输。使用TCP传输,需要服务器中转,turnserver,licode,janus之类的服务器
解决方案
搭建coTurn中转服务器
https://blog.51cto.com/fengyuzaitu/7265986
C++修改代码
url后面必须指定?transport=tcp
kRelay强制指定中转,即使在同一个网络
webrtc::PeerConnectionInterface::RTCConfiguration config;
config.sdp_semantics = webrtc::SdpSemantics::kUnifiedPlan;
config.type = webrtc::PeerConnectionInterface::kRelay;
webrtc::PeerConnectionInterface::IceServer server;
server.uri = "turn:192.168.11.174:3478?transport=tcp"; // GetPeerConnectionString();
server.username = "dong";
server.password = "shenghua";
config.servers.push_back(server);
其他语言修改
?transport=tcp
icetransportpolicy:"relay"
流程如下
p1 <--tcp--> p1turn <--udp--> p2turn <--tcp--> p2
有可能只有一个turn
p1 <--tcp--> pturn <--tcp--> p2
参考
https://www.rfc-editor.org/rfc/rfc6544
https://blog.vline.com/post/52644825765/tunneling-webrtc-over-tcp-and-why-it-matters
https://blog.csdn.net/weixin_38102771/article/details/124530900?spm=1001.2014.3001.5502
https://github.com/ossrs/srs/issues/2852