通过阅读本文,您可以了解MediaBox音视频SDK产品中常用名词的基本概念。
产品定义
MediaBox音视频SDK
MediaBox音视频SDK整合了直播推流SDK、播放器SDK、短视频SDK、美颜特效SDK等产品,为AUI Kits低代码应用方案提供端侧音视频能力,例如推流、连麦、播放、IM互动等功能。您可以一站式获取完备的音视频能力,实现业务敏捷创新。更多信息,请参见什么是音视频终端SDK。
AUI Kits
AUI Kits低代码集成工具是阿里云基于丰富的音视频实践沉淀,提供的aPaaS产品,对MediaBox音视频SDK进行模块化封装,提供标准化的开源UI组件。您可以根据业务需求直接使用AUI Kits进行接入,降低研发成本和周期,提升业务效果。
AppServer
AppServer基于函数计算(FC)等方式为AUI Kits低代码集成工具提供了一套快捷部署、灵活定制的后台服务。直播间AppServer为AUI Kits互动直播场景SDK提供了房间管理、连麦管理、用户鉴权、信令管理等功能,只需要5~10分钟即可完成后台服务搭建。您也可以通过容器镜像或源代码构建等方式进行部署。
RTS 1.0与RTS 2.0的区别
对比项 | RTS 2.0 | RTS 1.0 |
定义 | 边缘推流,不经过直播中心。如果想要录制、转码,则需配置旁路转推,转推到一个RTMP域名上面,然后在RTMP域名上录制。 | 直播中心推流,因此可以进行录制、转码等。 |
播放协议 | 支持ARTC(基于WebRTC)协议流的播放。 | |
端到端延时 | 200~400ms。 | 500~1000ms。 |
使用限制 | 推流、播放侧同时集成RTS SDK。 | 仅播放侧集成RTS SDK。 |
抗弱网能力 | 全链路丢包30%的情况下可以流畅播放。 | 播放侧丢包30%的情况下可以流畅播放。 |
兼容性 |
| |
覆盖区域 | 全球 | |
最佳实践 |
流媒体
点播、直播和推流的区别
推流:主播将本地音视频源推送到阿里云视频云服务器。
直播:直接观看主播客户端或直播中心实时推送过来的音视频数据,时间延迟一般不会太长。
点播:视频源已经事先存储于阿里云视频云媒资库内,观众随时可以观看。
常见的点播协议
目前常见的点播格式有3种:MP4、HLS和FLV。
MP4:MP4是一种经典的文件格式,广泛支持移动终端和浏览器(包括iOS和大部分Android设备上的系统浏览器以及PC上的FLASH控件)。然而,MP4的视频文件格式相对复杂,处理成本较高,并且由于其复杂的索引表结构,导致较长时长(如半小时)的MP4文件在线播放时加载速度较慢,更适用于点播短视频场景。
HLS:由苹果公司推出的标准,在移动终端的浏览器上具有很好的支持。但在IE上的支持情况取决于FLASH的二次开发工作(建议使用阿里云播放器SDK Web端)。HLS采用简洁的M3U8索引结构,能够避免MP4索引慢的问题,常用于点播中长视频场景。
FLV:Adobe公司推出的标准,目前是直播平台最常用的封装格式,在PC端具有强大的FLASH支持,但在移动终端只有通过App实现播放器才能支持,大部分手机端浏览器均不支持。
常见的直播协议
目前常见的直播协议有3种:RTMP、FLV和HLS。
RTMP:RTMP协议是一种功能强大的协议,可以用于推送和直播。核心理念是将视频帧和音频帧分割成小数据包,并在互联网上进行传输。此外,RTMP协议还支持加密,因此具有较高的隐私性。然而,由于拆包和组包的复杂性,当面对海量并发时,可能会出现一些不可预测的稳定性问题。
FLV:Adobe公司推出的标准,该协议的格式非常简单。它只是在视频帧和视频头部添加了一些标记头信息。由于其极简的设计,FLV协议在延迟表现和大规模并发方面非常成熟。唯一的缺点是在移动端浏览器上的支持非常有限。然而,作为移动端App直播协议,FLV协议非常适用。
HLS:由苹果公司推出的标准,将视频分割为5~10秒的小切片,并使用M3U8索引表进行管理。客户端下载到的视频都是5~10秒的完整数据,因此视频的流畅性很好。然而,这种方法也会引入较大的延迟,一般为10~30秒(HLS的常见延迟范围)。与FLV相比,HLS在iPhone和大多数Android手机浏览器上的支持非常好。
常见的推流协议
目前常见的推流协议是RTMP,阿里云视频云还支持超低延时直播RTS推流。
RTMP:由主播端向直播中心服务器推流一般采用RTMP协议。
RTS:超低延时直播RTS是阿里云视频直播的重要增值功能,可以提供客户端易接入、超低延时、高并发、高清流畅的视频直播服务。
SDK集成与使用
SDK License
MediaBox音视频SDK是阿里云视频云推出的终端SDK,提供场景化的终端音视频能力,您可以通过申请免费License、付费购买或消费达标赠送获取SDK的使用授权。
SDK License通过与应用标识一一绑定以实现对该应用调用SDK进行授权。例如,当一个播放器SDK的License与应用A绑定后,应用A就可以使用播放器SDK的功能,每一个License最多可以绑定一款Android应用和iOS应用。您也可以在视频直播、视频点播控制台上新增和续期License,计费详情请参见计费项。
在控制台上完成创建应用并绑定License后,会生成一套License File(证书文件)和License Key。在MediaBox音视频SDK集成过程中,您需要将License File和Key配置到对应的应用中。MediaBox音视频SDK将通过License File和Key来校验当前应用的授权情况。每个阿里云账号下默认生成唯一的License Key,按照应用维度生成License File,不论License授权的内容和类型,这组License File和Key都是唯一且不会变更。
命名冲突(duplicate symbol)
在集成MediaBox音视频SDK时常遇到的一种编译错误,因为一个进程中不能有重名函数(编译器会将函数编译成symbol),如果出现重复的,就会给链接器带来“选择困难症”。
目前,阿里云视频云终端SDK之间,由于媒体组件化架构设计,不同SDK之间会存在冲突。如果需要用到两个业务功能场景,请使用功能场景一体化包。例如短视频和播放器业务,请使用AliVCSDK_UGC包,不仅在功能上一致,而且做到更小的包体积。
直播推流SDK
码率控制
一种编码的优化算法,用于控制视频流码流的大小。同样的视频编码格式,码流越大,包含的信息越多,对应的图像也就越清晰,反之亦然。
视频丢帧
发送视频帧时,如果网络非常差,导致视频帧堆积严重,可以通过丢弃视频帧来缩短推流的延时。
耳返
指主播可以通过耳机实时听到自己的声音。例如,当主播带上耳机唱歌时,需要把握音调,这时就需要开启耳返功能。因为声音通过网络传入耳朵和通过空气传入耳朵差异很大,而主播需要直接听到观众端的效果。
混音
把多种来源的声音整合至一个立体音轨或单音音轨中,推流SDK支持音乐和人声的混音。
合流
把多种来源的视频图像数据根据位置叠加到同一个视频画面中。目前仅Android推流SDK支持。
动态库
即动态链接库,与常用的静态库相反。动态库在编译时并不会被拷贝到目标程序中,目标程序中只会存储指向动态库的引用。在程序运行时,动态库才会被真正加载进来。
Xcode加载动态库需要加载到Embedded Binaries中,而不是加载到Linked Frameworks and Libraries中。
短视频SDK
视频分辨率、码率
视频分辨率指的是视频横向和纵向上的有效像素,理论上视频分辨率越高,图像越清晰。但分辨率越高也意味着文件越大,处理越耗时。考虑到移动端不同设备性能差异,不建议直接使用屏幕像素值作为视频分辨率,建议设置分辨率720P及以下。
码率又叫比特率,指的是每秒传送的比特(bit)数。单位为bps(Bit Per Second)。压缩视频时给视频指定码率参数,用以告诉视频编码器期望的压缩后视频的大小。在一定范围内,码率越高,视频越清晰,文件也越大。
常见的视频分辨率及建议码率如下:
清晰度 | 1∶1 | 3∶4 | 9∶16 | 建议码率(单位:bps) |
480P | 480×480 | 480×640 | 480×853 | 1000000~2000000 |
540P | 540×540 | 540×720 | 540×960 | 2000000~3000000 |
720P | 720×720 | 720×960 | 720×1280 | 2000000~4000000 |
1080P | 1080×1080 | 1080×1440 | 1080×1920 | 2000000~6000000 |
帧率
视频帧率指的是每秒钟显示的图像帧数,单位Frame per Second(fps)。帧率越高,图像越流畅,文件也越大。建议视频帧率:25~30。
关键帧
帧是组成视频图像的基本单位,视频文件是由多个连续的帧组成。关键帧也叫I帧,它是帧间压缩编码里的重要帧,解码时仅用I帧的数据就可重构完整图像,I帧不需要参考其他画面而生成。关键帧可以做为随机访问(seek)的参考点,可以当成图像。
GOP
Group of Picture(以下简称GOP)顾名思义就是有一组帧组成的一个序列。一个GOP由关键帧开始,后面跟随者一组B帧和P帧。GOP过小,会导致I帧的比例增高,压缩比降低。GOP过大,会导致随机访问(seek)更耗时,同时,会导致倒播卡顿(倒播需要解码一个GOP才能播放视频帧)。SDK中GOP默认值为5,建议GOP值为5~30。
编辑模块实现视频倒播功能时,如果导入视频GOP过大,需要先转码处理。
填充模式
当素材图片或视频的分辨率长宽比与导出视频分辨率长宽比不一致时,会涉及填充模式的选择。SDK支持两种填充模式:
填充模式 | 处理方法 |
裁剪模式 | 保持长宽比,裁剪图片,只显示中间区域。 |
缩放模式 | 保持长宽比,使图片能完整显示,上下或左右填充颜色。 |
编码方式
编码方式有以下两种:
编码方式 | 编码详情 |
软编 | 使用CPU进行编码。软编可以配置的参数更丰富,同等码率下生成的视频更清晰,但编码速度比较慢,CPU负载高,手机更容易发热。 |
硬编 | 使用非CPU以外的硬件进行编码。硬编编码速度更快,CPU负载低,但清晰度比软编略差,部分安卓设备上可能存在适配性问题。 |
资源说明
SDK资源主要包括人脸识别模型资源、滤镜资源和动效滤镜资源。SDK资源可以保存到网络端,也可以直接内资到安装包中。考虑到SDK下载包的大小,建议您将SDK资源保存到网络端,在启动App时下载。
由于Android平台不支持Assets流,如果是打包到APK中,启动后必须将资源复制到SD Card中。资源文件及使用说明可以在SDK下载包中获取。
支持格式
支持导入的媒资格式:
类型 | 格式 |
视频 | MP4、MOV、FLV |
音频 | MP3、AAC、PCM |
图片 | JPG、PNG、GIF |
视频合拍
视频合拍从产品功能层面是指两路视频(一路来自样本视频,一路来自设备摄像头采集)按照指定的布局模式(左右分屏、上下分屏、画中画等)进行合成,合成的视频每一帧画面将会同时包含两路视频的画面,而合拍视频的音频部分则采用样本视频的音频。以下为范例视图,实际上SDK内部支持开发者自己组织布局,关于如何布局将在后面讲述。
多源录制
多源录制可以支持View录制、摄像头录制等多种视频采集源按需组合的合拍录制。从产品功能层面是指多个画面数据来源(例如View录制采集的画面数据、摄像头采集的画面数据),按照指定的布局模式(左右分屏、上下分屏、画中画等)进行合成,合成出来的视频每一帧画面将会同时包含上诉画面数据来源。以下为范例视图,实际上可支持开发者自己组织布局,关于如何布局将在后面讲述。
轨道
在上述视频合拍概念中提及的两路视频在SDK中被抽象为两个轨道:A轨道和B轨道,A轨道放设备采集的视频,B轨道放样本视频,用轨道抽象有利于您理解轨道布局的概念。
在上述多源录制中提及的多路画面数据来源在SDK中被抽象为多个轨道,如A轨道放摄像头采集画面,B轨道放View录制采集画面,用轨道抽象有利于您理解轨道布局的概念。
轨道布局
轨道布局是轨道的属性之一,用来描述该轨道的视频画面,在合拍生成的视频中如何“摆放”,轨道布局在一个归一化的坐标系中,从两个纬度来描述轨道布局信息,分别是中心点的坐标和轨道size(即宽高信息)。
视频合拍的轨道布局如下图所示:
在该布局画面中,轨道A和轨道B的画面各占一半,因此,两个轨道的宽度均为0.5,而高度则都为1.0,而轨道A的中心点坐标:(0.25,0.5),轨道B的中心点坐标:(0.75,0.5)。
多源录制的轨道布局如下图所示:
在该布局画面中,轨道A和轨道B的画面各占一半,因此,两个轨道的宽度均为0.5,而高度则都为1.0,而轨道A的中心点坐标:(0.25,0.5),轨道B的中心点坐标:(0.75,0.5)。