PeerConnection Demo简介

 

成功编译WebRTC源码之后,可以运行WebRTC自带的例子体验一对一音视频通信效果。使用src/out/Debug 目录下的peerconnection_client.exe 和 peerconnection_server.exe两个文件,最终运行的架构图如下图所示:

 

 

局域网运行PeerConnection

 

局域网运行PeerConnection 例子需要用到两台电脑,并要求两台电脑都配置有摄像头和麦克风。测试步骤如下:

1. 电脑A运行peerconnection_server.exe。

2. 电脑A运行peerconnection_client.exe, Server一栏输入 localhost,点击Connect。

 

3. 电脑B运行peerconnection_client.exe,Server一栏输入电脑A的局域网ip地址,点击Connect。

4. 电脑A或电脑B双击列表框出现的第一个选项, 建立音视频通信。

 

5. 任意一方可以在中途按ESC键退出音视频通信。

 

广域网运行PeerConnection

 

PeerConnection在广域网下运行要麻烦一些,需要借助TURN 服务器做媒体数据转发(在P2P连接不成功时)。最终的运行架构如下图所示:

 

 

在广域网下测试 PeerConnection 需要两台不同网段的电脑,都需要带有摄像头和麦克风。同时也需要租用一台公网服务器,本文租用了一台Amazon的 Windows 2008 R2 32位服务器搭建TURN服务器(媒体转发服务器)和PeerConnctionServer(信令服务器)

1. 使用cygwin交叉编译TURN服务器,嫌麻烦的话可以下载我已经编译好的。

2. 在云服务器上部署Windows 2008 R2 32位服务器,在服务器上运行 peerconnection_server.exe 和 turnserver.exe。启动命令如下:

 

.\turnserver -v -L 0.0.0.0 -f -m 3 --min-port=32355 --max-port=65535 -a -u name:pass -realm=mycompany.org --max-allocate-timeout=10
.\peerconnection_server

 

如果下载了我的资源可以直接运行start.bat启动turnserver 和 peerconnection_server。

 

3. 客户端电脑使用 telnet 命令测试 peerconnection_server.exe 是否可以连接成功,端口为8888:

 

4. 使用TURN服务器测试网站验证TURN服务器是否可以连接成功,配置正确的话可以看到Done

 

 

5. 打开src/all.sln, 替换 conductor.cc的CreatePeerConnection()函数为如下代码:

 

bool Conductor::CreatePeerConnection(bool dtls) {
  ASSERT(peer_connection_factory_.get() != NULL);
  ASSERT(peer_connection_.get() == NULL);

  webrtc::PeerConnectionInterface::RTCConfiguration config;
  webrtc::PeerConnectionInterface::IceServer server;
  server.uri = "turn:13.115.245.41:3478";
  server.username = "name";
  server.password = "pass";
  config.tcp_candidate_policy = webrtc::PeerConnectionInterface::kTcpCandidatePolicyDisabled;
  config.servers.push_back(server);

  webrtc::FakeConstraints constraints;
  if (dtls) {
    constraints.AddOptional(webrtc::MediaConstraintsInterface::kEnableDtlsSrtp,
                            "true");
  } else {
    constraints.AddOptional(webrtc::MediaConstraintsInterface::kEnableDtlsSrtp,
                            "false");
  }
  constraints.AddOptional(webrtc::MediaConstraintsInterface::kEnableIPv6, "false");

  peer_connection_ = peer_connection_factory_->CreatePeerConnection(
      config, &constraints, NULL, NULL, this);
  return peer_connection_.get() != NULL;
}

 

 

 

6. 两个客户端运行peerconnection_client.exe,地址填写服务器公网地址即可在广域网下进行视频通信测试。

 

小结

* 测试时需要将3~6步中所有的公网地址改成自己的服务器公网地址。

* 检查服务器的组策略设置和防火墙设置正确,使得客户端可以正常访问服务器的对应端口。

* 第二步中启动TURN服务器的命令也可以用在Linux服务器上。

* 访问TURN服务器的用户名和密码在启动时通过 -u 参数指定。

* 第五步创建peer_connection时传递TURN服务器地址、用户名和密码;关闭了TURN TCP转发,只使用UDP转发;关闭了IPV6,只使用IPV4。

* 广域网视频联通后,可以关闭TURN服务器测试:如果视频中断则表示通过TURN服务器转发,否则为广域网P2P连接。在测试广域网连接时,需要保证两台电脑不在同一网段。

 

参考资料

https://github.com/coturn/coturn

https://www.cnblogs.com/mobilecard/p/6503301.html

 

 

Logo

致力于链接即构和开发者,提供实时互动和元宇宙领域的前沿洞察、技术分享和丰富的开发者活动,共建实时互动世界。

更多推荐