简介

Android 短视频SDK 是阿里云开源的一款播放器组件,拥有视频强大的播放功能,支持视频录制、视频合拍、视频拼接等能力。

版本信息

短视频SDK提供了Version类获取SDK版本信息,您可以通过下列接口获取SDK版本信息,帮助我们更快速的定位问题。
public class Version {
    public static final String VERSION = "";
    public static final String BUILD_ID = "";
    public static final String SRC_COMMIT_ID = "";
    public static final String ALIVC_COMMIT_ID = "";
    public static final String ANDROID_COMMIT_ID = "";
}

License

短视频SDK服务需要开通License,开通方式请参见产品介绍
说明 开通License后,请确保提交包的名称和Android Studio中对应配置保持一致。

视频分辨率

视频分辨率指的是视频横向和纵向上的有效像素,理论上视频分辨率越高,图像越清晰。但分辨率越高也意味着文件越大,处理越耗时。移动端考虑到不同设备性能差异,建议设置分辨率720p及以下。常见的视频分辨率如下:
清晰度 1:1 3:4 9:16
480p 480*480 480*640 480*848
540p 540*540 540*720 540*960
720p 720*720 720*960 720*1280
1080p 1080*1080 1080*1440 1080*1920
  • 录制模块

    可以通过AliyunIRecorder的void setMediaInfo(MediaInfo mediaInfo)方法,创建MediaInfo并设置其videoWidth和videoHeight属性作为录制视频分辨率。

  • 裁剪模块

    可以通过AliyunICrop的int setCropParam(CropParam param)方法,创建CropParam并设置其outputWidth和outputHeight属性作为输出视频分辨率。

  • 编辑模块

    可以通过AliyunIImport的setVideoParam(AliyunVideoParam param)方法,创建AliyunVideoParam并设置其mOutputWidth和mOutputHeight属性作为输出视频分辨率。

说明 不要直接使用屏幕像素值作为视频分辨率。录制GLSurfaceView的长宽比要与设置的录制分辨率长宽比保持一致。如不一致,输出分辨率会以videoWidth为基准,乘以 GLSurfaceView的宽高比作为最终输出的分辨率。

视频旋转角度

视频文件可以带有旋转角度信息,SDK也支持为录制的视频设置旋转角度。横屏录制的场景下可以通过AliyunIRecorder的void setRotation(int rotation)方法设置摄像头,录制后的视频会相应带有旋转角度。

码率

码率又叫比特率,指的是每秒传送的比特(bit)数。单位为bps(Bit Per Second)。压缩视频的时候给这个视频指定码率参数,用以告诉视频编码器期望的压缩后视频的大小。在一定范围内,码率越高,视频越清晰,文件也越大。建议码率:
清晰度 建议码率
480P 1000000-2000000
540P 2000000-3000000
720P 2000000-4000000
1080 2000000-6000000
  • 录制模块

    可以通过AliyunIRecorder的int setVideoBitrate(int bitrate)方法作为录制视频码率。

  • 裁剪模块

    可以通过AliyunICrop的int setCropParam(CropParam param)方法,创建CropParam并设置其mVideoBitrate属性作为输出视频码率。

  • 编辑模块

    可以通过AliyunIImport的setVideoParam(AliyunVideoParam param)方法,创建AliyunVideoParam并设置其mBitrate属性作为输出视频码率。

帧率

视频帧率指的是每秒钟显示的图像帧数,单位Frame per Second(fps)。帧率越高,图像越流畅,文件也越大。建议视频帧率:25-30。
  • 录制模块

    可以通过AliyunIRecorder的void setMediaInfo(MediaInfo mediaInfo)方法,创建MediaInfo并设置其mEncoderFps属性作为录制视频帧率。

  • 裁剪模块

    可以通过AliyunICrop的int setCropParam(CropParam param)方法,创建CropParam并设置其frameRate属性作为输出视频帧率。

  • 编辑模块

    可以通过AliyunIImport的setVideoParam(AliyunVideoParam param)方法,创建AliyunVideoParam并设置其mFrameRate属性作为输出视频帧率。

关键帧

帧是组成视频图像的基本单位,视频文件是由多个连续的帧组成。关键帧也叫I帧,它是帧间压缩编码里的重要帧,解码时仅用I帧的数据就可重构完整图像,I帧不需要参考其他画面而生成。关键帧可以做为随机访问(seek)的参考点,可以当成图像。

GOP

Group of Picture(以下简称GOP)顾名思义就是有一组帧组成的一个序列。一个GOP由关键帧开始,后面跟随者一组B帧和P帧。GOP过小,会导致I帧的比例增高,压缩比降低。GOP过大,会导致随机访问(seek)更耗时,同时,会导致倒播卡顿(倒播需要解码一个GOP才能播放视频帧)。SDK中GOP默认值为5,建议GOP值为5-30。
  • 录制模块

    可以通过AliyunIRecorder的void setGop(int gop)方法设置录制视频GOP。

  • 裁剪模块

    可以通过AliyunICrop的int setCropParam(CropParam param)方法,创建CropParam并设置其gop属性作为输出视频GOP。

  • 编辑模块

    可以通过AliyunIImport的setVideoParam(AliyunVideoParam param)方法,创建AliyunVideoParam并设置其mGop属性作为输出视频GOP。

说明 编辑模块实现视频倒播功能,如果导入视频GOP过大,需要先转码处理。

填充模式

当素材图片或视频的分辨率长宽比与导出视频分辨率长宽比不一致时,会涉及填充模式的选择。

sdk支持两种填充模式:
填充模式 处理方法
裁剪模式 保持长宽比,裁剪图片,只显示中间区域。
缩放模式 保持长宽比,使图片能完整显示,上下或左右填充颜色。
  • 裁剪模块

    AliyunICrop的int setCropParam(CropParam param)方法,创建CropParam并设置其mScaleMode属性设置填充模式。

  • 编辑模块

    可以通过AliyunIImport的setVideoParam(AliyunVideoParam param)方法,创建AliyunVideoParam并设置其mScaleMode属性设置填充模式。

编码方式

编码方式有以下两种:
编码方式 编码详情
软编 使用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