0.前言

这次的需求,准备做的是一个类似与QQ视频一样的点对点视频聊天。这几天了解了一些知识后,决定使用HTML5新支持的WebRtc来作为视频通讯。客户端使用支持HTML5浏览器即可。服务器段需要提供两个主要的服务功能,一个是信令服务器(Signaling Server),一个是NAT穿透服务器(ICE Server)。简单的框架图如下:

1.安装e2esoft vcam 虚拟摄像头

由于我本地是台式电脑,没有摄像头,另一方面,为了调试的方便,安装这个虚拟摄像头。
我是在这里下载的http://www.loveliao.com/downfiles/VCam_v4.5.exe

2.安装信令服务器

网上信令服务器大多是以nodejs写的。这里以skyrtc为例,进行演示。

 apt-get install nodejs npm
git clone https://github.com/LingyuCoder/SkyRTC-demo
cd SkyRTC-demo
npm install
nodejs server.js

这样浏览器访问本地http://localhost:3000就可以访问了。(主要chrome好像46以上版本,除了本地localhost和127.0.0.1本地调试外,其他的访问方式,必须要https。否则不能运行。PC端和移动端好像都是这样) Chrome报错如下:

这里准备用Firefox进行演示。移动端也是用Firefox进行演示。

手机端,用Firefox浏览器查看的效果。

 

3.安装coturn(开源的iceserver)

这个跟谷歌开源的rfc5766-turn-server 是类似的,这里我使用coturn

 git clone https://github.com/coturn/coturn
cd coturn
./configure
make
make install

安装后在coturn/examples/etc 目录下使用该命令执行

turnserver -o -a -f -v --mobility -m 10 --max-bps=100000 --min-port=32355 --max-port=65535 --user=ling:ling1234 --user=ling2:ling1234 -r demo

这样就启动好了,默认的监听端口是3478

4.修改WebRtc 客户端配置

修改Skyrtc-demo/public/SkyRTC-client.js

免费公开的stun+turn 服务器 : https://gist.github.com/yetithefoot/7592580

5.运行,查看效果

root@debian-srv:~/workspace/SkyRTC-demo# nodejs server.js

浏览器打开两个页面

  

一个PC端 一个移动端

  

亲测,移动4G可以跟我当前的网络穿透成功,但是移动3G不行。其他的网络网络运营商没有测试。单靠这些,做着玩玩还可以,距离产品还差十万八千里呢。当下的网络还是比较复杂的,IPv4告急,有些ISP分配的IP的还有可能是内网的,有些大机构的网络还是对称性NAT。而对于对称型NAT是基本不能穿透的。要经过转发, 而转发视频对带宽的消耗是很大的。真的是希望IPv6早点普及。

在线测试工具: https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

参考资料:

  webrtc资料:  

  https://segmentfault.com/a/1190000000439103
  https://bitbucket.org/webrtc/codelab/overview
  https://github.com/LingyuCoder/SkyRTC-demo
  http://xiaol.me/2014/08/24/webrtc-stun-turn-signaling/
  http://www.mamicode.com/info-detail-513556.html

  https://simplewebrtc.com/
  https://gist.github.com/yetithefoot/7592580

  ICEServer资料

  https://github.com/coturn/coturn
  http://www.cnblogs.com/lingdhox/p/4209659.html

本文地址: http://www.cnblogs.com/wunaozai/p/5520084.html

最新文章

  1. [转]使用Jenkins搭建持续集成(CI)环境
  2. HP滤波原理浅学
  3. UDP发送和接收
  4. KlayGE 4.4中渲染的改进(二):DR的其他改进
  5. 数据结构算法C语言实现(十)--- 3.3栈与递归的实现
  6. NRF51822之修改设备名(掉电不保存)
  7. android ScrollView滚动距离和判断滚动停止状态
  8. 注意,ruby循环体定义的变量在结束时后,变量还存在
  9. java多线程知识点总结
  10. struct2访问或添加request/session/application
  11. Maven中settings.xml的配置项说明
  12. SignalR小计
  13. Sql server统计查询语句消耗时间
  14. ASCII码对应表chr(num)
  15. 企业账号打包如何通过HTML页面打开
  16. BAT级别分类
  17. Visual Studio 2015中设计UML类图
  18. 生产redis client 链接报:ERR max number of clients reached 含义: 达到最大客户端数错误
  19. SpringBoot几个重要的事件回调、监听机制
  20. C语言常用关键字及运算符操作

热门文章

  1. Sublime Text 新建文件的模版插件: SublimeTmpl
  2. .NET读取Office文件内容(word、excel、ppt)
  3. C语言实现单链表-02版
  4. SQL Server 之 GROUP BY、GROUPING SETS、ROLLUP、CUBE
  5. zookeeper 安装与配置
  6. 菜鸟日记-HTML
  7. ES6类与模块
  8. 不能返回函数内部new分配的内存的引用
  9. 用DOS批处理实现FTP自动上传、下载、清理文件
  10. Linux 查看端口被占用情况