• Windows下 WebRTC Demo运行: PeerConnection


    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。启动命令如下:

    .	urnserver -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()函数为如下代码:

    1.  
      bool Conductor::CreatePeerConnection(bool dtls) {
    2.  
      ASSERT(peer_connection_factory_.get() != NULL);
    3.  
      ASSERT(peer_connection_.get() == NULL);
    4.  
       
    5.  
      webrtc::PeerConnectionInterface::RTCConfiguration config;
    6.  
      webrtc::PeerConnectionInterface::IceServer server;
    7.  
      server.uri = "turn:13.115.245.41:3478";
    8.  
      server.username = "name";
    9.  
      server.password = "pass";
    10.  
      config.tcp_candidate_policy = webrtc::PeerConnectionInterface::kTcpCandidatePolicyDisabled;
    11.  
      config.servers.push_back(server);
    12.  
       
    13.  
      webrtc::FakeConstraints constraints;
    14.  
      if (dtls) {
    15.  
      constraints.AddOptional(webrtc::MediaConstraintsInterface::kEnableDtlsSrtp,
    16.  
      "true");
    17.  
      } else {
    18.  
      constraints.AddOptional(webrtc::MediaConstraintsInterface::kEnableDtlsSrtp,
    19.  
      "false");
    20.  
      }
    21.  
      constraints.AddOptional(webrtc::MediaConstraintsInterface::kEnableIPv6, "false");
    22.  
       
    23.  
      peer_connection_ = peer_connection_factory_->CreatePeerConnection(
    24.  
      config, &constraints, NULL, NULL, this);
    25.  
      return peer_connection_.get() != NULL;
    26.  
      }

    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

  • 相关阅读:
    【转】angular通过$http与服务器通信
    【转】Angular运行原理揭秘 Part 1
    【转】 定义模板和服务
    【转】angular Ajax请求
    【转】AngularJS路由和模板
    算法之美--2.2 Array
    算法之美--2.2数组
    人工神经网络--ANN
    AVL树原理及实现 +B树
    学习计划 2016//11//28
  • 原文地址:https://www.cnblogs.com/lidabo/p/14442060.html
Copyright © 2020-2023  润新知