在成功编译WebRTC源码之后,可以运行WebRTC自带的例子体验一对一音视频通信效果。使用src/out/Debug 目录下的peerconnection_client.exe 和 peerconnection_server.exe两个文件,最终运行的架构图如下图所示:
局域网运行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在广域网下运行要麻烦一些,需要借助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