短视频SDK是阿里云开源的一款播放器组件,拥有视频强大的播放功能,支持视频录制、视频合拍、视频拼接等能力。本文介绍短视频SDK中涉及的一些基本概念,以便于您更好地理解短视频SDK。
License
短视频SDK服务需要开通License,开通方式请参见获取短视频SDK License。
开通License后,请确保提交package/bundle id和Android Studio/XCode中对应配置保持一致。
视频分辨率
视频分辨率指的是视频横向和纵向上的有效像素,理论上视频分辨率越高,图像越清晰。但分辨率越高也意味着文件越大,处理越耗时。移动端考虑到不同设备性能差异,建议设置分辨率720P及以下。常见的视频分辨率如下:
清晰度 | 1:1 | 3:4 | 9:16 |
480P | 480*480 | 640*480 | 853*480 |
540P | 540*540 | 720*540 | 960*540 |
720P | 720*720 | 960*720 | 1280*720 |
1080P | 1080*1080 | 1440*1080 | 1920*1080 |
不要直接使用屏幕像素值作为视频分辨率。
码率
码率又叫比特率,指的是每秒传送的比特(bit)数。单位为bps(Bit Per Second)。压缩视频的时候给这个视频指定码率参数,用以告诉视频编码器期望的压缩后视频的大小。在一定范围内,码率越高,视频越清晰,文件也越大。建议码率:
清晰度 | 建议码率 |
480P | 1000000~2000000 |
540P | 2000000~3000000 |
720P | 2000000~4000000 |
1080P | 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资源可以保存到网络端,也可以直接打包到apk中。考虑到SDK下载包的大小,建议您将SDK资源保存到网络端,在启动App时下载。
SDK不支持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)。