直播那些事

Author Avatar
XibHe 10月 31, 2017
  • 在其它设备中阅读本文章

直播技术经过近两年的迅速发展,已经很成熟了。从十月份开始接触与直播相关的技术,中间花了一周左右的时间,对市面上几种流行的三方直播SDK做了调研和对比。今天是月末最后一天,就做一个阶段性的总结吧!

更新说明

更新记录:

  • 2017 年 10 月,第一版。
  • 2017 年 11 月 11 日,增加相关说明。
  • 2017 年 11 月 13 日,增加直播原理。

直播原理

1. 一个完整直播app实现流程

1.采集、2.滤镜处理、3.编码、4.推流、5.CDN分发、6.拉流、7.解码、8.播放、9.聊天互动

6

2. 一个完整直播app架构

7

3. 一个完整直播app技术点

8

4. 流媒体相关参数

帧: 每帧代表一副静止的图像。

帧率: 每秒显示的图片数。影响画面流畅度,与画面流畅度成正比:帧率越大,画面越流畅;帧率越小,画面越有跳动感。

由于人类眼睛的特殊生理结构,如果所看画面之帧率高于16的时候,就会认为是连贯的,此现象称之为视觉暂留。并且当帧速达到一定数值后,再增长的话,人眼也不容易察觉到有明显的流畅度提升了。

码率:图片进行压缩后每秒显示的数据量。

分辨率:(矩形)图片的长度和宽度,即图片的尺寸
压缩前的每秒数据量: 帧率X分辨率(单位应该是若干个字节)
压缩比: 压缩前的每秒数据量/码率 (对于同一个视频源并采用同一种视频编码算法,则:压缩比越高,画面质量越差。) 

视频文件格式:文件的后缀,比如.wmv,.mov,.mp4,.mp3,.avi,
主要用处,根据文件格式,系统会自动判断用什么软件打开,
注意: 随意修改文件格式,对文件的本身不会造成太大的影响,比如把avi改成mp4,文件还是avi.

视频封装格式:一种储存视频信息的容器,流式封装可以有TS、FLV等,索引式的封装有MP4,MOV,AVI等,
主要作用:一个视频文件往往会包含图像和音频,还有一些配置信息(如图像和音频的关联,如何解码它们等):这些内容需要按照一定的规则组织、封装起来.
注意:会发现封装格式跟文件格式一样,因为一般视频文件格式的后缀名即采用相应的视频封装格式的名称,所以视频文件格式就是视频封装格式。

视频封装格式和视频压缩编码标准:就好像项目工程和编程语言,封装格式就是一个项目的工程,视频编码方式就是编程语言,一个项目工程可以用不同语言开发。

对比几种不同的直播SDK

对比市面上常用的直播平台,这里分别是:阿里云、zego、七牛云、腾讯云。
这里根据业务需求,对比以上四个平台的指标为:支持的最大连麦上限,是否提供实时视频通话的解决方案,是否提供聊天室功能(IM),可拓展性等。

阿里云直播

阿里云直播中有提供连麦功能,但连麦上限最终确认4人(不能添加上限),不符合公司功能需求。视同阿里云提供的连麦demo,如图,

1
超过三个连麦观众时会提示:连麦观众不能超过3个。

在阿里云提交工单后,得到了最终的反馈,如图,

2

最后,联系了技术支持,连麦上限最终为4人。

zego直播

zego直播中提供实时视频通话、连麦互动直播和即时通讯功能,实时视频场景的典型使用案例是同一房间内的成员(如微信群视屏),进行实时视频对话同一房间中的用户均可发起视频通话。连麦功能支持20个连麦观众。

提供了实时视频通话的解决方案,如图
3

七牛云直播

七牛云提供强大的直播以及连麦服务,有提供强大的连麦功能,且无上限,受限于客户端的总体带宽,建议8路以下。

腾讯云直播

腾讯云分为直播、互动直播、移动直播多种视频服务,

4

互动直播(ILVB)多对多连麦,最多支持8人同时连麦。移动直播(MLVB)提供即时通讯等一体化直播的解决方案,但最多同时支持3人连麦(见工单)。这二者都是在直播(LVB)基础之上做的延伸拓展。

5

最后,对比以上四种直播,单从技术上考虑,zego以其一体化的解决方案,超出20路的连麦数,做工精良并频繁更新的Demo被重点考虑。从价格上考虑,阿里云和腾讯云的价格比较有优势。最后暂时选择了阿里云,原因可能是公司的云服务器用的是阿里云吧!

关于demo

该demo为整理后的阿里云直播连麦demo,添加了一些注释,为了突出直播所需的主功能,demo只集成直播所需的基本的API。通过对demo添加Tag,区别不同的功能。其中,Tag为V0.1的版本集成最基本的直播推拉流功能,Tag为V0.2的版本集成连麦功能。点击下载链接

注意:阿里云的连麦demo中并未集成聊天室功能,在引入的SDK中,有一个名为AlivcLiveChatRoom.framework。该SDK暴露的AlivcLiveClient.h文件中,注明了聊天室相关的API,但创建聊天室和发送聊天消息的方法都加了__deprecated_msg的注释:

- (void)createChatRoomWithName:(NSString *)chatRoomName success:(void(^)())successBlock error:(void (^)(NSError *error))errorBlock
__deprecated_msg("暂未开放,请勿使用,参考Demo与appServer交互");

- (AlivcLiveChatMessage *)sendMessage:(AlivcLiveConversationType)conversationType content:(NSString *)content success:(void (^)(long messageId))successBlock error:(void (^)(NSError *error, long messageId))errorBlock
__deprecated_msg("暂未开放,请勿使用,参考Demo与appServer交互");

在阿里云提交工单,工程师回复目前阿里云直播SDK不再提供聊天室功能了。不过通过阿里云DEMO接口文档中所列出的错误码,其中,有返回2040,2050的错误码,

2040 创建环信聊天室失败

2050 消息发送到环信失败

可见,阿里云聊天室之前是环信即时通讯方案,只是现在移除了。接口详情见:

DEMO接口文档

写在最后

这篇关于直播的文章写得很粗浅,只是记录了阿里云直播SDK的使用。没有详细系统的描述直播原理、主要直播技术及其实现。下面几篇文章对直播做了系统的介绍:

参考资料

【如何快速的开发一个完整的iOS直播app】(原理篇)