美文网首页WebRTC
WebRTC初步学习

WebRTC初步学习

作者: 云上听风 | 来源:发表于2018-04-02 17:10 被阅读25次

    看网上文章后随手写的, 只做为简单笔记, 还没时间真正研究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语言简单修改起来方便。

    收获


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

    相关文章

      网友评论

        本文标题:WebRTC初步学习

        本文链接:https://www.haomeiwen.com/subject/fwkxhftx.html