zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    多重背包POJ1276不要求恰好装满 poj1014多重背包恰好装满
    哈理工1053完全背包
    求最小公倍数与最大公约数的函数
    Bus Pass ZOJ 2913 BFS 最大中取最小的
    POJ 3624 charm bracelet 01背包 不要求装满
    HavelHakimi定理(判断一个序列是否可图)
    z0j1008Gnome Tetravex
    ZOJ 1136 Multiple BFS 取模 POJ 1465
    01背包 擎天柱 恰好装满 zjut(浙江工业大学OJ) 1355
    zoj 2412 水田灌溉,求连通分支个数
  • 原文地址:https://www.cnblogs.com/lidabo/p/14442060.html
Copyright © 2011-2022 走看看