引言

webrtc是一种免费开源的实时通信技术,集成了音视频采集、编解码、流媒体传输、渲染等功能,并在Native代码基础上,封装了简单的JavaScript api,仅通过几行代码即可实现点对点通信,且具有良好的跨平台特性,目前主流的浏览器都已支持。

基本概念

SDP: 即会话描述协议,主要保存当前会话的媒体和传输信息,其中媒体信息包括媒体类型、传输协议、媒体格式等,传输信息包括媒体的远程地址信息、带宽等;它由多行kv格式的文本信息组成,具体可参考这里。(https://tools.ietf.org/pdf/draft-nandakumar-rtcweb-sdp-08.pdf)
Offer: 通信的发起方对自己的sdp描述
Answer: 通信的接收方对自己的sdp描述
信令: 协调发起方、接收方通信的数据信息,其中包括sdp描述信息、会话控制信息(节点加入、退出及各类的业务控制信息等)、网络信息、错误信息等。

webrtc通信

基于webrtc的点对点音视频通信示意图如下图所示:

其具体的流程如下:

  1. 客户端A初始化本地音视频设备,创建一个用于offer的SDP对象,其中SDP对象中保存当前音视频的相关信息;
  2. 客户端A通过信令服务器将SDP信息发送给客户端B;
  3. 客户端B在接收到客户端A发送的SDP信息并保存后,初始化本地音视频设备并创建用于answer的SDP对象;
  4. 客户端B通过信令服务器将SDP信息发送给客户端A;
  5. 客户端A、B通过交换SDP等信息,建立P2P通道进行音视频传输;

Webrtc ICE(交互式连接建立)

在现实世界中,客户端A、B大部分位于NAT之后,只具有一个内网访问的私有ip,不足以提供足够的信息来建立一条端对端的连接。为了克服由NAT产生的网络问题,一般情况下,webrtc采用ICE框架,通过ICE来找到一条对等连接的最佳道路。

举个栗子,小A和小B是好朋友,某天他们都换了手机号,而且都绑定了一个手机短号(短号不在一个集团网中),然而都忘记新的号码是多少。为了两个人通话联系,小A尝试用短号拨号不通后,小A拨打114询问自己的电话号码,114看到来电显示后将手机号告诉小A;小B以同样的方式获得了自己的手机号;这样两人就可以相互通话了。

类似于上边的例子,客户端A和客户端B处在不同的内网环境中,首先ICE尝试采用从操作系统和网卡获得的主机地址建立连接,如果连接建立失败,ICE会发送binding request给STUN服务器,服务器探测到客户端A的公网地址后将信息加在binding request中,并返回给客户端A,这样客户端A获取到了自己的公网地址。以同样的方式客户端B获取到自己的公网地址。这样,客户端A、B就可以将SDP中的地址信息替换为公网地址进行通信了。

然而,有些情况并不是那么顺利,比如114显示小A、小B电话未知来电或者小A、小B通话线路故障等原因,导致小A、小B不能通话。这个时候114说,要不这样吧,我给你们各发一个临时号,如果你们要通信,我直接按照你们的临时号给中转一下通话信息。同理,webrtc中,如果STUN建连失败,可以采用TURN服务器的方式。TRUN可以担任中间人的角色,将客户端A、B的数据进行中继转发,实现不同内网的客户端通信。

Stun/turn服务器可以采用coturn(https://github.com/coturn/coturn),服务器验证方式可以参考这里(https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/)。

Webrtc与直播:

以下根据自己的理解,简要的说明几种直播方案的优缺点。

1、rtmp方式

众所周知,目前主流的直播方案一般采用rtmp方式,首先客户端采集音视频流,并通过rtmp协议推流到流媒体服务器,流媒体服务器做一些编码处理等将流分发给各个客户端,进而拉流播放。出于成本、安全等考虑,可能会将不同流按照一定的配比推送到不同的流媒体服务商,在特殊情况下可采用调度方式进行切流处理。

优点:

  • CDN 支持良好,主流的 CDN 厂商都支持
  • 技术比较成熟,集成方便,例如声网、即构等,集成对应平台的sdk即可进行推流。
  • 相较于端对端的webrtc方式,并发度高,适合多人直播场景;

缺点:

  • 协议基于tcp,相对于webrtc方式延时较大,对于某些低延时场景体验较差;
  • 不支持浏览器推流等;

2、基于端对端的webrtc

基于端对端的webrtc方式,严格来说不属于常规的直播场景,其主要适用于人数较少的视频会议等场景,各个节点分别建立p2p连接进行音视频的传输,主要工作流程如上边webrtc所示。

优点:

  • 在web端,对于开发者和使用者来说,音视频通信的开发和使用简单化;对于开发者来说,门槛低,不必熟悉流媒体,仅调用js api即可实现;对于使用者来说,打开浏览器等浏览器即可。
  • 点对点通信,节省服务器带宽费用。
  • 相对于基于tcp的rtmp推拉流方式,支持udp的webrtc方式延时低。

缺点:

  • 客户端浏览器的性能有局限。如果是1v1方式的直播连麦,尚好;如果多人同时进行直播连麦,浏览器需要同时给多人进行视频传输,性能欠佳。
  • 音视频处理相对来说比较困难。webrtc开放的api接口较少,集成第三方音视频处理方案较难,比如秀场直播的美颜等。
  • 音视频的传输质量难以保障,尤其在跨地区、跨运营商的情况下,仅能做一下端对端质量控制算法,无法保障。
  • 兼容性问题。在pc端,目前的主流浏览器都支持webrtc,但是在移动端,只有部分浏览器支持(目前国内的主流手机浏览器均不支持)。
  • 关于直播内容的后续工作不好展开,内容质量难以把控。比如rtmp推拉流方式生成的回放、内容审核等很难处理了。

3、基于媒体服务器的webtrc直播:

基于端对端的webrtc受限于客户端性能、连接人数等限制,很难适用于直播场景。为了解决这些问题,可以引入媒体服务器,客户端仅传输一路音视频流到媒体服务器,其余客户端通过与媒体服务器建立连接进行音视频显示。

目前开源的主流webrtc媒体服务器如下:

  • Kurento(https://github.com/Kurento/kurento-media-server)
  • licode(https://github.com/lynckia/licode)
  • janus(https://github.com/meetecho/janus-gateway)

优点:

  • 相对于端对端的webrtc方式,避免了客户端性能低、音视频处理、内容审核等问题,支持更为复杂的应用场景;
  • 支持多人进行同时观看直播,并发度高;
  • 在web端集成相对简单容易,采用浏览器即可接入,且延时较低;

缺点:

  • 该种方式相对于端对端的webrtc方式,开发成本较高,需要实现自己的媒体服务器,而目前没有比较成熟的方案。
  • 相对于成熟的rtmp配套解决方案,周边设施相对较少。

综上所述,基于端对端的webrtc直播的方式不适合直播场景;基于媒体服务器的webtrc直播,目前还没有成熟的解决方案,需要自己实现媒体服务器,门槛较高,具体可根据开发成本与收益进行定夺。

我们是花椒技术,如果想了解更多内容请关注我们的公众号:花椒技术

webrtc可以做直播吗相关推荐

  1. 基于WebRTC的互动直播实践

    互动直播已经逐渐成为直播的主要形式.映客直播资深音视频工程师叶峰峰在LiveVideoStackCon 2018大会的演讲中详细介绍了INKE自研连麦整体设计思路.如何基于WebRTC搭建互动直播SD ...

  2. 开源直播推流sdk_基于WebRTC的互动直播实践

    互动直播已经逐渐成为直播的主要形式.映客直播资深音视频工程师叶峰峰在LiveVideoStackCon 2018大会的演讲中详细介绍了INKE自研连麦整体设计思路.如何基于WebRTC搭建互动直播SD ...

  3. 做直播要准备些什么(直播硬件和网络要求)

    直播硬件设备 电脑硬件推荐配置: 系统:win7系统以上,macOS 10.13.6以上 显卡:独立2G显卡或以上 CPU:i5或以上 内存:4G或以上 选配硬件: 拍摄:外置摄像头,摄像机+采集卡 ...

  4. 七牛云徐晶:基于 WebRTC 架构的直播课堂实践

    8 月 18 日下午,在七牛云架构师实践日第三十期,七牛云教育行业产品研发总监徐晶进行了<基于 WebRTC 架构的直播课堂实践>为题的实战分享. 本文是对演讲内容的实录整理. 作者简介: ...

  5. 李子柒爆红:既然做直播能年薪过亿, 为何还要努力高考?

    "李家有女,人称子柒." 这是李子柒的简介,若不是看她粉丝达千万,很难让人把她与网红联系到一起. 她既没网红脸也没大长腿,却是网红界的一股清流. 看过李子柒视频的人,无一不对那视频 ...

  6. 小红书做直播的背后,隐藏了什么秘密?

    作者 |  婷婷的勇敢世界 来源 |  几何小姐姐(ID:jihexj) 转载请联系授权(微信ID:jihexj2019) 小红书上周发布了他们要做电商直播的消息.这是非常大的一个商业动作.对于行业里 ...

  7. 新手坐高铁怎么找车厢_一个新手怎么做直播卖衣服?找对货源供应商成功一半...

    这两年是直播的"风口",江湖上到处都是年入千万元的传说.服装作为电商第一大品类,门槛低,作为直播新人,大多数人会选择卖衣服开启直播的创业路.那么,一个新手怎么做直播卖衣服?直播卖衣 ...

  8. 计算机课程可在平板上做吗,老师做直播,孩子上网课,掌控线上学习就靠这个平板电脑了...

    原标题:老师做直播,孩子上网课,掌控线上学习就靠这个平板电脑了 根据移动APP行业分析平台QuestMobile的最新报告,春节假期以来,作业帮.猿辅导.学而思网课等众多在线教育APP纷纷推出了免费课 ...

  9. 直播间越播越没人,大部分刚开始做直播电商的人都会这样

    直播间越播越没人,大部分刚开始做直播电商的人都会这样,看着其他同行的直播间做得不错就照葫芦画瓢,并不知道背后做了哪些工作? 开播前一定要准备直播脚本和产品过款话术,不要让直播在直播间随意发挥,团队也随 ...

最新文章

  1. UITableView性能提升和优化(第3章) 之一
  2. tensorboard scalar图下载失败不完整解决
  3. 我学习Python的三个神级网站
  4. 学习笔记-------Seate解决分布式事务
  5. LeetCode 351. 安卓系统手势解锁(回溯)
  6. Notepad++快速选中多行
  7. 游族辟谣公司内斗CEO被投毒住院,警方通报带来光速反转?
  8. 在线HTML5,CSS3,VueJS,jQuery运行测试练习工具
  9. mysql8导入不同schme_新特性解读 | MySQL 8.0.22 任意格式数据导入
  10. Xcode中导入文件报错
  11. TIPTOP实施基础资料收集计划表
  12. c语言粗大误差程序框图,《粗大误差C语言程序.doc
  13. “极地测绘之父”鄂栋臣逝世,曾签下生死状首征南极
  14. 《Linux就是这种范儿》读后感
  15. 什么是 promise?
  16. 快排及时间复杂度简单证明
  17. MyEclipse在启动了诸如Tomcat等web服务后,控制台信息不显示的问题
  18. YTU 问题 : 排序
  19. oracle dba_waiters中的lockid是什么,Oracle 锁机制学习
  20. 这几种常见的保护电路,你都了解吗?

热门文章

  1. 【面向对象】抽象类和接口
  2. 这里的一切让我兴奋——专访VMware APJ总裁Duncan Hewett
  3. vue 用户登录 记住用户名和密码
  4. uniapp更好的下拉刷新动画
  5. [C5/C6] 机器学习诊断和系统设计(Machine learning Diagnostic and System Desig
  6. pyecharts 间距_pyecharts详细手册(一)
  7. 轮询功能java实现
  8. 数字人民币持续推进,带来哪些利好?
  9. 科普 |看病难又贵,如何选择靠谱医师?声誉系统来助力
  10. STM32最小系统详解