一、环境说明:
在centos7上运行turn+peerconnection_server
一台网关下的局域网ubuntu20运行peerconnection_client
一台wifi ubuntu20运行peerconnection_client
资源:编译好的peerconnection_client和peerconnection_server已上传csdn免费下载,文末附链接。
期待:要么打洞成功,要么中继,两端都应该能看到视频
二、在centos7上配置turn:
安装相关依赖:
yum install -y make gcc cc gcc-c++ wget openssl-devel libevent libevent-devel
下载源码编译:
wget https://coturn.net/turnserver/v4.5.0.8/turnserver-4.5.0.8.tar.gz
tar -zxvf turnserver-4.5.0.8.tar.gz
cd turnserver-4.5.0.8/
./configure --prefix=/usr/local/turnserver # 指定安装的目录
make && make install
配置环境变量
vim ~/.bashrc
export turnserver_home=/usr/local/turnserver
export PATH=$PATH:$turnserver_home/bin
配置turn服务器
find /usr -name turnserver.conf
vim /usr/local/turnserver/share/examples/turnserver/etc/turnserver.conf
配置如下,这里可配的选项很多,这里我测试用简单配置,笔者的是阿里云服务器,需要先打开端口的tcp和udp访问权限和关闭防火墙。
listening-port=8889
external-ip=139.129.91.106
user=deviser:hotdog
realm=stun.deviseryqw.cn
运行:
turnserver -v -r 139.129.91.106 -a -o -c /usr/local/turnserver/share/examples/turnserver/etc/turnserver.conf
查看是否配置成功:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
填好URL用户名密码,点击Add Server。
点击Gather candidates,最后一行有“Done”出现,则说明中继服务器配置成功。
三、修改peerconnection_client,注意turnserver服务器包含了stun服务器,会先尝试打洞,不成功后就作中转服务器。
src/examples/peerconnection/client/conductor.cc
bool Conductor::CreatePeerConnection() {
RTC_DCHECK(peer_connection_factory_);
RTC_DCHECK(!peer_connection_);
webrtc::PeerConnectionInterface::RTCConfiguration config;
config.sdp_semantics = webrtc::SdpSemantics::kUnifiedPlan;
//屏蔽部分
// webrtc::PeerConnectionInterface::IceServer server;
// server.uri = GetPeerConnectionString();
// config.servers.push_back(server);
//屏蔽部分
//新增部分
webrtc::PeerConnectionInterface::IceServer turnServer;
turnServer.uri = "turn:139.129.91.106:8889";
turnServer.username = "deviser";
turnServer.password = "hotdog";
config.servers.push_back(turnServer);
//新增部分
peer_connection_ = peer_connection_factory_->CreatePeerConnection(
config, nullptr, nullptr, this);
return peer_connection_ != nullptr;
}
void Conductor::DeletePeerConnection() {
main_wnd_->StopLocalRenderer();
main_wnd_->StopRemoteRenderer();
peer_connection_ = nullptr;
peer_connection_factory_ = nullptr;
peer_id_ = -1;
loopback_ = false;
}
四、运行
上面配置时已经使用如下命令运行了turnserver
turnserver -v -r 139.129.91.106 -a -o -c /usr/local/turnserver/share/examples/turnserver/etc/turnserver.conf
在阿里云centos7上,再运行peerconnection_server(笔者这个在ubuntu18上编译的能成功运行,在ubuntu20上编译的不能直接运行)
在网关后的局域网(私网)ubuntu20运行peerconnection_client
在wifi的ubuntu20运行peerconnection_client
运行这两个时,ip填阿里云ip,端口填8888,这里是配置信令服务器参数。
五、结果,两端视频,实测延时220ms,这里是没打通,如果打通延时会更低。
peerconnection_client和peerconnection_server连接:peerconnection
配置coturn参考:coturn
国内免费的stun服务器