WebRTC初步学习

看网上文章后随手写的, 只做为简单笔记, 还没时间真正研究WebRTC, 说实话一直觉得WebRTC太臃肿, 要不是现在要成为标准那代码除了jitterbuffer、fec、qos和音频信号处理外真心懒得看.


WebRTC流媒体通信基于RTP和RTCP. RTP用于流媒体数据传输,RTCP负责可靠传输、流量控制和拥塞控制等服务质量保证.
WebRTC支持p2p, 其实只是单点对单点, 客户端节点并没有像BT, emule之类被当做中转服务器中转数据.
ice服务包含stun和turn, turn服务器包含stun功能..
stun是用来给客户端做获取NAT ip/port的服务.
客户端a, b都连接stun, stun 获得双方的公网ip/port, 然后给双方发消息告知对方的ip/port, 让双方互相通信从而测试出双方的NAT类型.
a和b如果能通过NAT通信的话也就是打洞成功, 以后的音视频流直接p2p.
如果不能直连, 此时则需要用到turn服务, turn服务提供relay功能, 让双方通过服务器中转进行音视频聊天.
chrome内置支持webrtc, 可以使用js调用webrtc API. 目前的safari好像也支持,不过API可能有点不一样.
现在不知道relay是怎么中转数据的, 是否支持上传者一份数据直接转发给多个连接者(一般turn服务器应该不支持, 需要自己写服务器做处理).

webrtc的优势:


浏览器底层直接支持,可以使用js直接调用, 也就是说浏览器就可以当做客户端, 不过想做的更好的话最好还是自己做原生客户端.
jitterbuffer功能, 音频信号的各种处理优化, 音视频同步, 视频码率动态调整.

多人聊天:


几种方式
1. 全部p2p, 客户端互连. 客户端压力大.
2. 服务器收所有客户音视频进行混音和视频合并, 服务器cpu压力大, 因为需要解码编码, 而且音视频质量肯定下降, 另外延时变长.
3. 服务器中转数据, 客户端只发一路给服务器, 从服务器接收多个流, 类似目前流行的直播, 服务器流量压力大.

从这儿可以看出如果做多人音视频聊天, 诸如N对百人甚至万人的直播, 还是得采用现在流行的直播技术, 比如RTMP 或者像以前公司一样自己做私有协议.

STUN和Relay的优化:


先进行relay, 保证用户第一时间连通提升用户体验, 然后背后进行stun打洞, 当成功打洞后再切换到p2p.

doubango


有人测试说doubango使用了webrtc的音频库,但是效果比webrtc的效果好, 好像没开源所以不知道原因. (这个说法太古老了应该)

h264和vp8


使用h264好像不支持fec,这样在丢包率高网络不稳定的情况下花屏卡顿现象比vp8厉严重。
正常情况下h264的画面质量强于vp8,而且h264在移动端有硬编码的优势。

需要做的事情


  1. 房间服务器
    客户端要先进入房间才可以知道对方,才能发起音视频通讯。
    开源apprtc,基于gae python实现,应该只是个demo并不实用。
  2. 信令服务器
    跟楼上房间服务器一起管理控制客户端进行连接。
    上面所说的apprtc包含一个collider信令服务器,golang实现。
  3. turn服务器
    coturn用golang写的开源服务器,golang我喜欢,可以直接拿来改改。
    coturn是用c写的,其实我还是想找个golang写的,因为go用来写Relay功能更方便。
    不过看了一眼coturn的README.MD感觉还是挺强大的,而且这个大概也是使用最广泛的turn开源服务器,先用着不够用了再改,反正c语言简单修改起来方便。

收获


这个简单的学习过程最大的收获是让自己有了新的点子(保密,哈哈).

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值