webrtc+turn+peerconnection_server测延时

一、环境说明:
在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服务器

猜你喜欢

转载自blog.csdn.net/weixin_43466192/article/details/124347740