一只视频程序猿的移动直播SDK初体验
2017-12-09 15:17
155 查看
本文转自一只视频程序猿的移动直播SDK初体验,此处仅做排版改动。
今早老板召开站会,“移动直播这么火,市面上有一百多个APP,小斌,你下周交个原型APP瞅瞅!”
小弟心中一万匹草泥马奔过,这玩意儿哪儿是几天就能弄出来的?问候归问候,咱还是赶紧调研吧,端午还约了妹子游泳呢。
其中上行RTMP推流很普遍了,很多游戏直播都使用obs推RTMP流。
在整个过程中,涉及很多流媒体的基本概念,先说说GOP。
GOP即Group of picture(图像组),指两个I帧之间的距离。即几秒有一个关键帧。分析线上主流的移动直播APP,大都在2、3秒之间。
一般的云服务公司都会提供多种协议的拉流方式,优缺点如下:
HLS协议,移动h5浏览器支持较好,但是延迟较大。移动端播放前需要产生三个分片,每个分片至少得是一个GOP。一个GOP即使是2秒,也意味着这个环节耗费了6秒的延时。
RTMP协议,需要访问1935端口,支持双向互动,实时性很好,PC flash原生支持。
HTTP-FLV,不支持双向互动,实时性和RTMP协议一致。
基于以下几点理由,小弟准备采用HTTP-FLV作为拉流协议:
国内网络情况的恶劣程度,并不是每个网络防火墙都允许1935包通过。
RTMP协议和HTTP-FLV,实际传输的内容都是相同的FLV,实时性也一样。
RTMP协议握手方式比HTTP复杂。
确定好了拉流协议,再看看推流侧依赖的参数。
FPS,每秒编码传输的视频帧数;
码率,每秒编码传输的音视频比特数;
GOP,关键帧间隔;
分辨率。
在相同码率的情况下,FPS和分辨率越大,视频的图像质量越差。为了平衡主播上行带宽、用户观看下行带宽和图像质量的关系,需要很好处理这几个值。
其中,腾讯云ILVB实名认证后需要人工审核5个工作日,反正至今没有看到SDK。
更令人震惊的是,虽然阿里云提供多媒体云服务,但是至今尚未提供移动直播SDK。
总体来说,开放较好的是金山云,SDK放到了github上,每次change log都很清楚,几乎每周都有更新。 腾讯云就有些犹抱琵琶半遮面,给SDK试用都不痛快。
移动直播SDK涉及的功能比较多,我先解释一下几个基本功能点:
推流编码,涉及软件编码和硬解编码。相同码率,软编图像质量更清晰,但是耗电更高;
网络自适应,当网络抖动时根据网络情况调整发送速率;
美颜,对主播图像进行美白、液化、磨皮等处理;
a92c
混音,当主播聊天时,可以把背景音乐混到音视频里面;
播放视频旋转,可以根据视频宽高,决定横屏还是竖屏播放;
直播重加载,当播放状况不佳时,重新拉流播放。
为了对比其他方案,做了几张表格。
Android推流功能列表如下:
从表中可以看到,
百度云接口还很粗糙,连移动直播必选的美颜功能都不支持,首先淘汰。
小弟想有噪声抑制功能,但是这些SDK都没有支持,不过令人欣喜的是,金山云支持自定义音频数据处理,可以把自己的噪声抑制代码挂载进去。
相比而已,金山云的接口较开放。其中金山云SDK支持的功能更丰富些,能满足当前移动直播的要求。
iOS推流功能列表如下:
从表中可以看出,iOS推流功能丰富程度普遍较高,这和市面上主播大量使用iPhone推流有密切关系。
从特色功能来看,只有金山云支持画中画和美声功能。
自定义滤镜和原始数据处理,体现了SDK的开放程度,这方面百度云是严重失分的。
在细节功能上,对声音和美颜的处理,体现了当前SDK对移动直播市场的重视程度。
Android播放功能列表如下:
iOS播放功能列表如下:
播放端关注点和推流端还有些不一样,播放侧除了考虑功能丰富以外,还需要考虑稳定性、功耗、包大小、开播速度等,静态对比可以作为参考。金山云支持直播重加载,能有效降低播放卡顿率。
总结一下,通过试用大型云服务商的移动直播SDK,得出以下结论:
能完全运行起来的是金山云、百度云提供的SDK。腾讯云、阿里云尚未提供真正可用的移动直播SDK。
从Android/iOS推流功能以及播放功能来看,金山云提供的功能最为丰富。
百度云提供的推流功能还比较简单,离市面的要求有些距离。
今早老板召开站会,“移动直播这么火,市面上有一百多个APP,小斌,你下周交个原型APP瞅瞅!”
小弟心中一万匹草泥马奔过,这玩意儿哪儿是几天就能弄出来的?问候归问候,咱还是赶紧调研吧,端午还约了妹子游泳呢。
方案选项
作为公司音视频大神,对流媒体基本概念还是OK的。咱首先看看市面上火热的某客、某椒APP怎么工作的。主播端推流使用RTMP推向流媒体源站,服务器内部通过RTMP协议多级拉流至边缘CDN节点,播放端从边缘CDN节点获取直播内容,大致如下图:其中上行RTMP推流很普遍了,很多游戏直播都使用obs推RTMP流。
在整个过程中,涉及很多流媒体的基本概念,先说说GOP。
GOP即Group of picture(图像组),指两个I帧之间的距离。即几秒有一个关键帧。分析线上主流的移动直播APP,大都在2、3秒之间。
一般的云服务公司都会提供多种协议的拉流方式,优缺点如下:
HLS协议,移动h5浏览器支持较好,但是延迟较大。移动端播放前需要产生三个分片,每个分片至少得是一个GOP。一个GOP即使是2秒,也意味着这个环节耗费了6秒的延时。
RTMP协议,需要访问1935端口,支持双向互动,实时性很好,PC flash原生支持。
HTTP-FLV,不支持双向互动,实时性和RTMP协议一致。
基于以下几点理由,小弟准备采用HTTP-FLV作为拉流协议:
国内网络情况的恶劣程度,并不是每个网络防火墙都允许1935包通过。
RTMP协议和HTTP-FLV,实际传输的内容都是相同的FLV,实时性也一样。
RTMP协议握手方式比HTTP复杂。
确定好了拉流协议,再看看推流侧依赖的参数。
FPS,每秒编码传输的视频帧数;
码率,每秒编码传输的音视频比特数;
GOP,关键帧间隔;
分辨率。
在相同码率的情况下,FPS和分辨率越大,视频的图像质量越差。为了平衡主播上行带宽、用户观看下行带宽和图像质量的关系,需要很好处理这几个值。
SDK下载
首先,Android/iOS系统上,并不包含RTMP推流组件,这块需要自己开发。系统自带的播放器也不支持flv文件的播放。小弟只能去阿里云、腾讯云、百度云、金山云等大牛云服务公司找解决方案了。把每个帐号都注册一遍,大致情形如下。其中,腾讯云ILVB实名认证后需要人工审核5个工作日,反正至今没有看到SDK。
更令人震惊的是,虽然阿里云提供多媒体云服务,但是至今尚未提供移动直播SDK。
总体来说,开放较好的是金山云,SDK放到了github上,每次change log都很清楚,几乎每周都有更新。 腾讯云就有些犹抱琵琶半遮面,给SDK试用都不痛快。
SDK功能对比
拿到SDK,首先对比一下相关功能。其中腾讯云LVB直播只提供了播放SDK,还仅只支持HLS播放,这个方案首先扑街。ILVB互动直播未拿到SDK,暂且不表。这样一来,可供选择的大型云服务商的方案就剩下金山云和百度云。移动直播SDK涉及的功能比较多,我先解释一下几个基本功能点:
推流编码,涉及软件编码和硬解编码。相同码率,软编图像质量更清晰,但是耗电更高;
网络自适应,当网络抖动时根据网络情况调整发送速率;
美颜,对主播图像进行美白、液化、磨皮等处理;
a92c
混音,当主播聊天时,可以把背景音乐混到音视频里面;
播放视频旋转,可以根据视频宽高,决定横屏还是竖屏播放;
直播重加载,当播放状况不佳时,重新拉流播放。
为了对比其他方案,做了几张表格。
Android推流功能列表如下:
从表中可以看到,
百度云接口还很粗糙,连移动直播必选的美颜功能都不支持,首先淘汰。
小弟想有噪声抑制功能,但是这些SDK都没有支持,不过令人欣喜的是,金山云支持自定义音频数据处理,可以把自己的噪声抑制代码挂载进去。
相比而已,金山云的接口较开放。其中金山云SDK支持的功能更丰富些,能满足当前移动直播的要求。
iOS推流功能列表如下:
从表中可以看出,iOS推流功能丰富程度普遍较高,这和市面上主播大量使用iPhone推流有密切关系。
从特色功能来看,只有金山云支持画中画和美声功能。
自定义滤镜和原始数据处理,体现了SDK的开放程度,这方面百度云是严重失分的。
在细节功能上,对声音和美颜的处理,体现了当前SDK对移动直播市场的重视程度。
Android播放功能列表如下:
iOS播放功能列表如下:
播放端关注点和推流端还有些不一样,播放侧除了考虑功能丰富以外,还需要考虑稳定性、功耗、包大小、开播速度等,静态对比可以作为参考。金山云支持直播重加载,能有效降低播放卡顿率。
总结一下,通过试用大型云服务商的移动直播SDK,得出以下结论:
能完全运行起来的是金山云、百度云提供的SDK。腾讯云、阿里云尚未提供真正可用的移动直播SDK。
从Android/iOS推流功能以及播放功能来看,金山云提供的功能最为丰富。
百度云提供的推流功能还比较简单,离市面的要求有些距离。
相关文章推荐
- 手机Android音视频采集与直播推送,实现单兵、移动监控类应用
- 做移动视频直播应用的思路
- Android中直播视频技术探究之---采集摄像头Camera视频源数据进行推流(采用金山云SDK)
- 关于移动视频直播技术,关键干货都在这里(一)采集
- 移动视频直播点播方案
- 「视频直播技术详解」系列之七:直播云 SDK 性能测试模型
- 《视频直播技术详解》系列之八:直播云 SDK 性能测试模型
- anyRTC全平台视频直播(连麦)、网页直播(连麦)、实时直播、P2P、视频会议全新sdk上线。
- 关于移动视频直播技术,关键干货都在这里了(二)处理
- 响铃:社交,真的是移动视频(短视频、直播)的归宿?
- 我们做最专业的移动平台视频编辑SDK
- 关于移动视频直播技术,关键干货都在这里了(三)编码和封装
- 网易视频云邵峰:移动直播视频流分发网络的演进
- 手机Android音视频采集与直播推送,实现单兵、移动监控类应用
- 移动视频直播点播方案
- android 视频直播SDK
- 从QQ音乐开发,探讨如何利用腾讯云SDK在直播中加入视频动画
- 跨平台的视频采集、直播SDK SmarterStreaming
- cc视频直播的SDK集成
- 选择视频直播SDK的4项技术指标,5项基本能力