1 概述
视频直播,可以分为 采集,前处理,编码,传输,解码,渲染 这几个环节。
推流端:采集、前处理、编码、推流
服务端:转码、录制、截图、鉴黄
播放器:拉流、解码、渲染
互动:聊天室、礼物系统、赞等
2 技术点
2.1 协议
音频采用AAC编码、视频采用H264、H265编码。
推送采用RTMP协议
2.2 推流端
采集:音频:AudioRecord,视频:Camera。Android要做机型适配工作
手机直播SDK通过手机摄像头和麦克风直接采集视频数据和音频数据。其中,视频采样数据一般采用RGB或YUV格式、音频采样数据一般采用PCM格式。对于采集到的原始音视频的体积是非常大的,因此需要经过压缩技术来处理,降低视频的大小来提示传输效率。 在手机视频采集方面,iOS系统在硬件的兼容性方面做得比较好,系统本身提供了比较完整的视频采集的接口,使用起来也比较简单。但是,Android系统就比较麻烦了,千奇百怪的机型都有,适配起来非常难。
前处理:处理美颜、水印、模糊等效果。 GPUImage、grafika
美颜实际上是通过算法去识别图像中的皮肤部分,再对皮肤区域进行色值调整。通常情况下人的肤色与周边环境色调存在较大差异,通过颜色对比,找到皮肤的基本轮廓,进一步进行肤色检查还可以确定人脸范围。找到了皮肤的区域,可以进行色值调整、添加白色图层或调整透明度等来等来达到美白效果。美颜除了美白效果还需要磨皮功能,磨皮实际上就是用模糊滤镜实现的。
编码: 软编:FFmpeg + x264,硬编:MediaCodec硬编码,需要考虑硬编码兼容性,编码要在分辨率,帧率,码率,GOP等参数设计上找到最佳平衡点。
为了便于手机视频的推流、拉流以及存储,通常采用视频编码压缩技术来减少视频的体积。现在比较常用的视频编码是H.264,但具有更高性能的H.265编码技术正在飞速发展,并可能很快成为主流;在音频方面,通比较常用的是用AAC编码格式进行压缩,其它如MP3、WMA也是可选方案。视频经过编码压缩大大提高了视频的存储和传输效率,当然,经过压缩后的视频在播放时必须进行解码。 在编码方面的核心是在分辨率、码率、帧率等参数中找到最佳平衡点,达到体积最小画面最优的效果。另外,硬件编码已经成为手机直播的首选方案,软编码处理在720p以上的视频颓势非常明显。在IOS平台上硬件编码的兼容性比较好,可以直接采用,但在 Android 平台上,Android的MediaCodec 编码器,针对不同的芯片平台表现差异还是非常大的,要完全实现全平台兼容的成本还是非常高的。
推流:librtmp
要想用于推流还必须把音视频数据使用传输协议进行封装,变成流数据。常用的流传输协议有RTSP、RTMP、HLS等,使用RTMP传输的延时通常在1–3秒,对于手机直播这种实时性要求非常高的场景,RTMP也成为手机直播中最常用的流传输协议。最后通过一定的Qos算法将音视频流数据推送到网络断,通过CDN进行分发。 在直播场景中,网络不稳定是非常常见的,这时就需要Qos来保证网络不稳情况下的用户观看直播的体验,通常是通过主播端和播放端设置缓存,让码率均匀。另外,针对实时变化的网络状况,动态码率和帧率也是最常用的策略。
2.3 播放器
拉流:
拉流实际是推流的逆过程。首先通过播放端获取码流,标准的拉流格式有RTMP、HLS、FLV等。RTMP是Adobe的专利协议,开源软件和开源库都支持的比较好,如开源的librtmp库,播放端只要支持flashPlayer的就能非常简单的播放RTMP直播,直播延迟一般在1–3秒。HLS是苹果提出的基于HTTP的流媒体传输协议,HTML5可以直接打开播放,通过微信、QQ等软件分享出去,用户也可以直接观看直播,可以说手机直播app,HLS拉流协议是必须支持的,缺点是延迟通常大于10秒。FLV(HTTP-FLV)协议是使用HTTP协议传输流媒体内容的一个协议,也不用担心被Adobe的专利绑架,直播延迟同样可以做到1–3秒。
解码和渲染:FFmpeg、ijkplayer
拉流获取封装的视频数据后,必须通过解码器解码、渲染后才能在播放器上播放。它是编码的逆过程,是指从音视频的数据中提取原始数据。前面介绍的H.264和H.265编码格式都是有损压缩,所以在提取后的原始数据,并非原始采样数据,存在一定的信息丢失。
互动:IM
手机直播中最常见的交互有聊天室(弹幕)、点赞、打赏和礼物等,有些比较有特色的手机直播平台也加入了和主播互动的游戏功能。交互系统涉及消息的实时性和互动性,在技术实现上大多是使用IM的功能来实现的,对服务器的压力也是比较大。
2.4 服务端
要想适配各终端和平台,服务端需要对流进行转码,如支持RTMP、HLS、FLV等格式拉流,支持一路转多路适配不同网络和分辨率的终端设备。
数据分发:CDN服务
流媒体服务器:SRS、BMS、nginx
3 使用第三方SDK
架构:
- 业务服务器
负责协调直播类应用的业务逻辑
- LiveNet 实时流网络
负责流媒体的分发、直播流的创建、查询等相关操作
- 采集端
负责采集和推送流媒体
- 播放端
负责拉取并播放流媒体
sdk基本直播的功能都支持,接入比较简单。总的来说,腾讯云直播,七牛云,金山云更偏向于娱乐性的直播,网易云信是基于他的IM系统,而阿里云偏向服务器CDN,声网更擅长多对多音视频聊天,即构科技连麦技术最强大。
3.1 功能比较
3.2 配置
视频直播服务开通与配置 :
1、添加域名,需提供已备案的域名才可使用直播服务,一个作为推流域名,一个作为播放域名,且推流和播放不能使用相同的域名
2、配置CNAME
3.3 SDK具体说明
3.3.1 腾讯云
官网:https://cloud.tencent.com/
方案使用的核心产品
1、移动直播 SDK
- 借助移动直播 SDK,快速实现包括 Android、iOS、H5 及微信小程序等多个主流平台的直播推拉流能力。
- 得力于腾讯优图团队支持,支持 AI 智能人脸追踪,实现实时美颜、动画贴纸特效等直播互动。
- 在移动直播 SDK 借助 RTMPAccess 建立主播和主播、主播和观众之间的音视频通话,从而实现低延时的直播连麦互动。
2、云直播
- 使用 RTMP over QUIC 快速推流至腾讯云直播,使直播流更低卡顿,更低延迟。
- 依仗腾讯云直播的云端能力支持,直播流拉流支持 RTMP、FLV 和 HLS 协议,为观众提供更加流畅清晰的直播画面。
3、IM
- 通过 IM 建立连麦房间管理,实现连麦直播间隔离,有效管理直播间的成员和功能。
- 支持直播弹幕、IM 聊天等,增强直播的互动性。
4、云点播
- 云点播为活动提供直播录制和回放功能,可以满足不同场景的业务需要。
客户端
接入移动直播SDK,有基础版、专业版、企业版
服务端
1、 服务端计算 UserSig,UserSig 是腾讯云设计的一种安全保护签名,目的是为了阻止恶意攻击者盗用您的云服务使用权。
1、回放功能。精彩回放功能依赖腾讯云的点播(VOD)服务,且点播服务仅提供了供服务端调用的 REST API 接口。
定价
1、预付模式:
直播流量资源包 | 价格(元) |
100GB | 25 |
500GB | 118 |
1TB | 236 |
5TB | 1086 |
10TB | 2172 赠移动直播 SDK 1年使用期限 |
50TB | 8972 赠移动直播 SDK 1年使用期限 |
200TB | 30198 赠移动直播 SDK 1年使用期限 |
1PB | 149589 赠移动直播 SDK 1年使用期限 |
2、后付模式:
带宽计费:
标准直播的带宽计费采用日到达阶梯计费,取当日峰值带宽为计费值,详细按日峰值带宽计费价格阶梯如下表所示:
带宽阶梯 | 价格(元/Mbps/天) |
0 - 500Mbps | 0.64 |
500Mbps(含)- 5Gbps | 0.62 |
5Gbps(含)- 20Gbps | 0.59 |
≥ 20Gbps | 0.58 |
流量计费:
标准直播的流量计费采用日到达阶梯计费,详细按日流量计费价格阶梯如下表所示:
无法复制加载中的内容
3.3.2 阿里云
官网:https://helpcdn.aliyun.com
注:2020年2月27日起,阿里云直播推流SDK停止新客户接入,有推流SDK需求的客户建议使用合作伙伴的直播推流SDK。通过合作伙伴的推流SDK,您可以向阿里云推流地址推流,正常使用阿里云视频直播所有功能。
流程
1、通过采集设备将直播流推送至阿里云直播中心,推送的视频流通过CDN边缘节点进行加速保证上行传输的稳定性。移动端的推流工具可以使集成阿里云或合作伙伴七牛云提供的直播推流SDK进行开发。
2、视频流推送至阿里云直播中心后,可按需对视频流进行转码,录制,截图,安全审核等处理。
3、处理好的视频流通过CDN内容分发网络下发至观众的设备中进行播放。移动端的播放设备可以继承阿里云提供的播放器SDK进行开发。
4、直播视频除了可以进行转码截图等操作外,还可以进行直播转点播的操作,将录制下来的视频转至点播系统中再进行点播播放。
客户端
1、接入推流 SDK 和播放 SDK
服务端
需要接入服务端SDK(阿里云核心SDK和阿里云视频直播SDK)。
注:视频直播的API是基于阿里云的OpenAPI实现的,因此SDK的调用也是对OpenAPI封装后调用
1、推流和播放地址从AppServer端获取(由服务端使用阿里云直播SDK生成带鉴权信息的推拉流地址)
2、弹幕相关的消息转发、存储以及内容审核。
3、账号密码等鉴权
定价
直播按[峰值带宽]计费说明:
基本描述:按峰值带宽计费是以当日直播观看区域所在节点直播加速服务分别产生的带宽最高值(单位Mbps)为结算标准。
使用直播95峰值带宽计费,需提交工单申请。
直播按[流量]计费说明
基本描述:按不同区域流量阶梯价格计费,流量累积到自然月底,下月自动清零重新累积。
3.3.3 网易云信
官网:https://netease.im
客户端
1、接入直播推流 SDK,jar 包 so 动态库以及滤镜文件导入工程
2、接入播放器 SDK,导入库文件或者gradle库集成
3、如果需要互动,需要接入互动相关SDK(IM SDK、视频通话SDK)
服务端
只面向开发者服务器端调用
1、频道管理,创建、修改、删除频道
2、直播安全,防盗链等
3、直播录制、封面、实施转码、回调等
定价
计费项: 流量
计费标准: 1元/GB
计费规则: 按视频直播服务消耗的上下行流量之和计费
计费周期: 按日计费
计费项: 日峰值带宽
计费标准: 35元/Mbps/月0.6元/Mbps/日
计费规则: 当日使用直播服务产生的上下行带宽之和峰值计费(单位Mbps)
计费周期: 按日计费
增值服务(可选):
- 截图
计费项: 截图张数
计费标准: 0.1元/千次
计费规则: 当日使用截图服务产生的费用,按张数计费
计费周期: 按日计费
- 实时转码
计费项: 实时转码使用时长
计费标准: 0.1元 / 分钟
计费规则: 当日使用实时转码服务产生的费用,按时长计费
计费周期: 按日计费
3.3.4 七牛云
官网:https://www.qiniu.com/
客户端
1、采集端:接入直播推流 SDK。
- 采集端向业务服务器发起创建房间的请求;
- 业务服务器通过 服务端 SDK 发起创建直播流的请求;
- 把返回的 JSON 返回给业务服务器,业务服务器返回给采集端并把播放地址记录在本地;
- 采集端获取到 JSON 后推流给 LiveNet,业务服务器不需要承担流媒体流量。
2、播放端,接入播放器 SDK
- 首先播放端对业务服务器发起查询房间列表请求,获取所有房间的播放地址;
- 播放端通过播放地址播放流媒体,业务服务器不需要承担流媒体流量。
3、连麦互动 SDK
服务端
接入服务端SDK
1、用于颁发带授权凭证的 RTMP 推流地址、RTMP/HTTP-FLV/HLS/封面的直播地址给客户端,以及对直播流(Live Streaming)进行创建、查询、禁播等管理
- 生成带授权凭证的 RTMP 推流地址
- 生成 RTMP 播放地址
- 生成 HLS 播放地址
- 生成 HDL(HTTP-FLV) 播放地址
- 生成直播封面地址
- 创建流
- 获得流
- 查询流列表
- 查询直播列表
- 查询流信息
- 禁播流(秒级禁推/禁播)
- 启用流
- 查询直播实时信息
- 保存直播回放
- 查询直播历史记录
定价
预付费直播流量包
后付费:
直播日峰值带宽计费
按峰值带宽计费是以当日直播观看区域所在节点直播加速服务分别产生的带宽最高值(单位 Mbps)为结算标准。
1. 计费方式:每月出账后付费(账单)
2. 计费规则:按直播日峰值带宽的阶梯价格计费,统计一个自然日内产生的带宽最高值(单位:Mbps)乘以对应的阶梯价格,为最终结算标准
3. 计费周期:按月出账,具体出账时间以系统为准
直播流量计费
按不同区域流量阶梯价格计费,流量累积到自然月底,下月自动清零重新累积。
计费规则:
1. 计费规则:按月到达阶梯计费,统计一个自然月内的流量累计值乘以对应的阶梯价格
2. 计费周期:按月出账,具体出账时间以系统为准
3.3.5 金山云
官网:https://www.ksyun.com
官网没有直播SDK的介绍,只有关于云直播的介绍。
客户端
1、接入直播SDK(KSYLive_android) :https://github.com/ksvc/KSYLive_Android
定价
峰值带宽计费
KLS 峰值带宽计费采用阶梯累进计费方式,价格阶梯如下:
计费项:峰值带宽
计费规则:按当日产生的峰值带宽进行价格阶梯计费,当日进行超额累进(以自然日为一个累计周期)
计费周期:按自然日计费
计费示例:用户自然日产生峰值带宽600Mbps,则该自然日用户账单费用应为500Mbps×0.6+100Mbps×0.56=356元
流量计费
KLS 流量计费采用阶梯累进计费方式,价格阶梯如下:
计费项:流量
计费规则:按当月产生的流量阶梯价格进行计费,当月进行超额累进(以自然月为一个累计周期)
计费周期:按自然月计费
计费示例:用户自然月产生累计流量15T,则该自然月用户账单费用应为10T×0.22+5T×0.2=3276.8元
注: 该价格仅适用于中国大陆地区使用,如果您对CDN需要大量采购,您可以通过商务洽谈的方式获得更优惠的价格及更加灵活的计费方式。
3.3.6 声网
官网:https://docs.agora.io
侧重于视频通话,音频通话,多人视频等,对于直播需要接入多个sdk,接入文档也不是很全面。
客户端
1、接入直播SDK
2、接入播放SDK
服务端
基本没有对服务端的介绍
1、生成token
定价
每月免费使用10000分钟,不超过完全免费;超过部分单独计算:
分辨率720P 及以下28 元 / 1000分钟,
分辨率720P 以上105 元 / 1000分钟。
3.3.7 即构科技
官网:https://www.zego.im
不需要域名,也没有使用CND分发。
默认是通过流id来进行推流和拉流,也可以转推CDN、直推CDN,但由于直推CDN功能在网络传输过程中不经过Zego实时音视频云,因此开发者无法使用Zego的超低延迟音视频服务。
客户端
1、接入极速视频SDK(SDK内部集成了IM)
服务端
1、生成UserID、UserName、RoomID 和 StreamID,全局唯一
2、直播列表管理等
定价
官网没有说明