最近由于项目的需要,我对几家云厂商的直播平台做了一下选型比较,重点考虑以下三个方面的内容:
- 该平台如何使用?
- 费用大概是多少?
- 多家产品的优劣势是什么?
今天我就以腾讯云直播产品为背影做下总结整理,希望对这方面有需要的同学能有所帮助。
腾讯云直播的使用
在我调研腾讯云直播产品时发现,它的文档写的还是蛮不错的,尤其对于初次使用它的用户来说,通过阅读其文档可以很容易实现接入。
在哪儿可以看到这份文档呢?当你注册了腾讯云直播之后,进入到它的控制台,找 新手接入指引 就可以看到之份文档了。如下图所示:
通过阅读这份文档,我们可以总结出使用腾讯云直播(其它平台也是类拟的)需要经过几下6个步骤:
- 在使用腾讯云直播之前,首先要进行注册并开通云直播业务。
- 使用云直播时,你必须已经购买了域名(便宜点的域名在 20-30块钱左右),并对该域名进行了备案(在国内使用的域名都需要进行备案,这是国家要求,否则无法使用)。这里需要特别强调一点,域名进行备案的周期一般比较长,在一个月左右。
- 域名备案好后,还需要对域名进行配置。具体的配置步骤我会在后面做详细的介绍。
- 当我们将域名配置好后,就可以使用云直播了。但对于云服务厂商来说,还有重要的一步没有做,那就是交费,即购买流量包。
- 以上步骤完成后,你就可以构建腾讯云直播的推拉流地址了。对于这一步,我还会在 如何生成推拉流地址 一节中再做详细介绍。
- 有了推拉流地址,我们就可以使用ffmpeg/OBS等工具进行推流;使ffplay/vlc等工具进行拉流了。
通过上面的6步你就可以将腾讯云直播使用起来了。下面我再从大家经常关心的几个问题的角度来详细阐述一下云直播的使用。
该购买多大的流量包?
对于刚刚开展音视频直播业务的同学来说,首先要考虑的问题是使用该直播平台的费用是多少?或者问我该买多大的流量包呢?
对于没有任何直播相关经验的同学来说,这真是一个让人头痛的问题。流量买少了怕不够,买多了又怕超出预算。更加实际的问题是,很多公司需要根据这个费用来评估自己到底要不要开展这项业务。
我想当大家看到这篇文章时就不用再焦虑了。我这里提供一个简单的公式供你参考,即流量为500kbs/人。它是什么意思呢?我这里举个例子你就清楚了,比如你的产品用户量不大,每天平均有 1000 人的访问,平均每人访问时长为 20 分钟,那你一年大约需要的流量就是27T。 计算公式如下:
代码语言:javascript复制500*1000*20*60*365/8 = 27T / 年
- 500,即每人每秒 500kb 的流量
- 1000,平均每天有1000人的观看量
- 20,平均每人每天观看 20 分种
- 60,一分种 60 秒
- 365, 一年 365 天
- 除 8 ,将 bit 位转换成字节
根据上面的公式,你再按照自己的业务模型就可以很容易计算出你需要购买的流量包大小啦。
再比如,你预计每天的观看量只能 100 人,观看的时长是 15 分种,那么你将上面公式中对应的值替换一下就OK了。
下面是腾讯云直播的流量包价格表(最终价格以腾讯云直播官网为准),这样你就知道你该买那个档的流量包了。
为什么要配置域名?
在我们使用云厂商的直播系统时,一个重要的环节是绕不开的,即域名解析。有同学可能就会问为什么要进行域名解析呢?下面我就对直播云的域名解析做一下简单介绍。
大家都知道直播云是由主干节点和边缘节点组成的,对于用户来说要想达到最佳的传输质量那最好的方式就是就近接入。也就是让用户与离它最近的,服务质量最好的服务器进行连接,只有这样用户才能享受最佳的用户体验。在直播云中那么多台服务器那台是离用户“最近”的服务器呢?我们一般这样定义,在同一地区的,同一运营商的,丢包和延迟最小的服务器我们认为是最接近用户的。(如果用户是上海电信的用户,那我们一定会选择上海电信的服务器来与它对接,而不会选择北京电信,或者上海联通的服务器)。下面这张示意图就是表达的这个间思:
如何能做到这一点呢?对于直播云来说,智能 DNS 解析就是解决这个问题的关键。 当你使用域名访问云直播的边缘节点时,智能 DNS 就会根据你的 IP 地址判断出你的那个地区,那个运营商的主机,然后给你返回离你最近的服务器的IP地址,这样你就可以做到就近接入了。
A类型域名解析
域名解析(DNS)有很多种类型,如A、CNAME、MX、 ……等。在我们本节中我们只介绍 A 类和 CNAME 类两种,对其它类型感兴趣的同学可以自己去研究其原理。
A 类型的域名解析是我们最常用的域名解析方式。它的原理还是蛮简单的,如下图所示就是一个最简单的域名解析示意图:
在我们使用域名访问某个网站之前,该域名会先被绑定到 DNS 服务器上,也就是上图中的第1步与第2步;当绑定好之后,当有主机想访问该域名时,主机会向 DNS 服务器发起请求,也就是第3步。DNS 查找到域名的注册信息后,将域名对应的外网IP地址返回给主机,也就是上图中的第4步。通过上面几个步骤就完成了一次 DNS 域名解析的过程。
当然,更加真实的 DNS 解析过程要比上面讲述的复杂的多,下面这张图才是真正的域名解析过程,我在这里就不深入讲解了,有兴趣的同学可以研究一下。
CNAME 域名解析
下面我们再来看一下 CNAME 类型的域名解析。那么CNAME类型的域名解析在云直播中又起到什么作用呢?
CNAME,就是给现有的域名起个别名。它的作用是什么呢?我们在做直播产品时,无论是给主播的推流地址还是给观众的播流地址都希望是我们自己的域名。举个列子,比如说我有一个域名 avdance.com,我希望我的推流地址为 push.avdance.com, 而拉流地址为 play.avdance.com 这样非常方便你进行推拉流地址的管理,同时也方便用户记忆。
而对于云直播来说,它本身一定是已经有了自己的域名的,那如何在你的域名与云直播域名之间建一座桥呢?这就是 DNS CNAME 的作用了。
当你的域名备案之后, 在腾讯云直播的域名管理系统中添加域名,它就会为你产生一个人我的域名对应的云直播的 CNAME, 如下图所示:
有了这个CNAME项后,你需要到腾讯云的域名管理系统中配置CNAME映射就将域名配置好了。如下图所示:
其实,CNAME 的工作原理就是将一种域名解析为别外一种域名,所以用户访问云直播时要进行两次域名解析。第一次域名解析时是进行域名跳转,第二次是将真实的域名解析成具体的IP地址最终给用户提供视频直播服务。
如何生成推拉流地址?
域名配置好之后我们就可以生成推拉流地址了,腾讯云直播是如何生成直播推拉流地址的呢?在讲解之前,我们要先了解一下直播流地址的格式。让我们来看一个具体例子吧,下面的字符串就是一个标准的直播推流地址。
代码语言:javascript复制rtmp://avdancedu.com/live/room
这个直播推流地址由几下几部分组成:
- scheme,指名此流使用rtmp传输协议,即 rtmp://
- 域名,这个非常好理解,即avdancedu.com
- path, 就是域名后面的字符串,即/live/room
- appName, 它属于path 的一部分,即 /live
- streamName, 它也属于 path 的一部分,即/room
在上面的几个组成部分中, appName 和 streamName是我们可以改变的。appName 是应用名,它类似于我们电视节目中的频道,比如中央1台,中央三台等等;streamName 流名,类似于频道中的节目。
如果不考虑安全问题的话,那么当你配置好域名之后,你就可以通过上面的规则生成推拉流地址了。并且你可以通过 ffmpeg/OBS 等工具向该地址推流。腾讯云直播中也是按照这个规则来的,通过下面的截图你可能更容易理解:
当然,一般情况下我们都会对推流地址做鉴权控制,其主要目的是防止有人盗用我们的推流地址给我们的正常业务造成影响。鉴权的方法是通过防盗链key来验证用户是否有效以及该链接是否超时。即当用户使用的 Key 不正确或推流地址超时后就不能再通过该地址进行推流了。
在腾讯云直播中,默认就是开启鉴权机制的,如下图所示:
这里需要注意的是,为了测试方便,我们可以在测试阶段将鉴权机制关掉,这样就可以直接使用ffmpeg命令进行推流了。它会大大提高我们的测试效率!
实际上,腾讯云直播提供了很多种不同的推流方法,你可以通过它的官方文档看到,如下图所示:
有了上面生成推流地址的经验后,拉流地址与它也是类似的。看下面这张图表达的已经很清晰,我在这里就不再赘述了。
如何进行推流与播放?
有了云直播的推拉流地址之后,进行音视频的推拉流就非常容易了,比如我们想使用ffmpeg进行推流,则其命令如下:
代码语言:javascript复制ffmpeg -re -i xxx.mp4 -c:v libx264 -preset ultrafast -c:a libfdk_aac -profile:a aac_he_v2 -ar 44100 -ac 2 -f flv rtmp://xxxx/live/streamName
你也可以用 ffplay 命令进行拉流播放,其命令如下:
代码语言:javascript复制ffplay rtmp://xxxx/live/streamName
如果你想拉 HLS 流,直接换一个地址就好了。如下:
代码语言:javascript复制ffplay http://xxxx/live/streamName.m3u8
ffmpeg/ffplay 一般都是专业士使用的工具,其功能非常强大。但这些命令可能对于非音视频专业的人就不那么友好了。对于普通用户我建议使用 OBS 进行推流,使用 VLC 播放器进行拉流,它们都是界面化的,对于普通用户操作起来更方便些。
OBS 也是一个功能强大的推流工具,操作起来也非常简单。其界面如下图所示:
在 OBS 中如何设置推流地址呢?其实很简单,我们看下面这图就清楚了:
通过 OBS,你既可以将一个多媒体文件推送到直播云上,也可以将摄像头采集的数据、桌面数据推送到直播云上。具体操作如下:
- 第一步,点图中的 号
- 第二步,在弹出的窗口中选择你的视频源
在上图中你可以看到,通过 OBS 你可以选择不同的直播源,它既可以是一个多媒体文件作,也可以是共享桌面,甚至桌面上的一个应用等,当然也可以是摄像头。从中你也可以知道 OBS 有多强大了。
当通过 OBS 将音视频流推送到云直播服务器之后,我们可以使用 VLC 从 CDN 的边缘节点上拉取流进行播放了。如下图所示:
第一步,打开播放列表
第二步,填入播流地址,点Open
通过以上的操作我们就实现了通过腾讯云直播进行推拉流的工作了。
当然,对于腾讯云直播来说它支持很多种类型的播流方式,你可以根据需要进行选择。如下图所示:
各产品功能比较
下面是我对几个主要直播产品功能及性能对比,通过这张表你可以更直观的了解各直播平台的特性,以及那个平台更合适你。
Feature | 腾讯云直播 | 阿里云直播 | SRS | NGINX |
---|---|---|---|---|
RTMP | Stable | Stable | Stable | Stable |
HLS | Stable | Stable | Stable | Stable |
HTTP FLV | Stable | Stable | Stable | Stable |
HLS(aonly) | Stable | Stable | Stable | X |
WebRTC | Stable | 测试中 | 开发中 | X |
小程序 | Stable | 未知 | 未知 | X |
集群 | Stable | Stable | Stable | 需要改造 |
API接口 | Stable | Stable | 未知 | X |
单机并发性能 | 未知 | 未知 | 7.5k | 3k |
RTMP Latency | 3s | 3s | 0.1s | 3s |
HLS Latency | 10s | 10s | 10s | 30s |
文档 | 完善,易读 | 完善 | 较完善 | X |
服务端录制 | Stable | Stable | Stable | X |
直播转码 | Stable | X | X | X |
鉴黄 | Stable | X | X | X |
日志 | Stable | Stable | Stable | Stable |
统计 | Stable | Stable | X | X |
从上述表格中我们可以总结出以下几点:
- 对于基本功能腾讯云直播、阿里云直播、开源项目 SRS 都支持的非常好。
- 对于小程序由于是腾讯自家的产品所以有天然的优势。
- 对于 WebRTC 的支持:腾讯云直播已经可以使用了;阿里还没有开放出来,但已经在内部进行测试了;对于 SRS 来说也正在加紧研发中,不过目前还比较初级。
- 对于一些周边的功能,比如说图片鉴黄、直播转码等相对来说腾讯技持的更好一些,但这些功能对于大多数直播产器来说还不是必须品。
- 从性能和负载量的角度来看,腾讯与阿里没有本质区别。SRS在 RTMP 实时性方面稍好一些。但如果产品中真的要考虑实时性的话,大家还是应该选择 WebRTC,而不该选择以 RTMP 协议为主的流媒体服务器。
小结
上面我对腾讯直播云的使用步骤,费用的计算,以及多家不同产品做了详细的介绍。通过上面的分析我们可以了解到,对于一般的的公司来说最合适的是使用云直播产品,它们有详细的文档,操作简单,稳定的业务质量(支持大规模并发使用几千人或者上万人使用云直播都没有负载压力),维护成本低,以及一些增值服务如鉴黄等,而且流量本成也不是特别高。
当然,对于一些大型公司想把控制权撑握在自己手里,又有资源的公司,也可以通过 SRS 搭建私有云直播,或者私有云与公有云混合服务都是不错的选项。
参考
- 音视频小白系统入门课
- 从0打造音视频直播系统
- WebRTC入门