视频工具

短视频SDK提供了视频文件解析、视频缩略图获取工具以辅助用户更方便的编辑录制视频等。

版本支持

版本

是否支持

专业版

支持

标准版

支持

基础版

支持

视频文件解析

视频文件解析的核心类为NativeParser类,通过该类可以解析出视频宽高、格式、时长、码率、声道等信息。

获取信息通过Key的方式获取,相关参数说明如下:

Key

说明

VIDEO_STREAM_INDEX

视频流的下标。

VIDEO_CODEC

视频编码器。

VIDEO_DURATION

视频流时长。

VIDEO_FRAME_COUNT

总帧数。

VIDEO_BIT_RATE

码率(平均码率)。

VIDEO_WIDTH

宽。

VIDEO_HEIGHT

高。

VIDEO_FORMAT

视频格式。

VIDEO_GOP

关键帧间隔。

AUDIO_CODEC

音频流下标。

AUDIO_DURATION

音频流时间。

AUDIO_CHANNELS

音频声道。

AUDIO_BIT_RATE

音频流码率。

AUDIO_SAMPLE_RATE

音频采样率。

AUDIO_FORAMT

音频格式。

//1.初始化
NativeParser parser = NativeParser();

//2.解析视频
//解析视频1
parser.init(path1);
//获取信息通过Key的方式获取
String videoWidth1 = parser.getValue(NativeParser.VIDEO_WIDTH);
//解析完成后调用release
parser.release();

//解析视频2
parser.init(path2);
//获取信息通过Key的方式获取
String videoWidth2 = parser.getValue(NativeParser.VIDEO_WIDTH);
//解析完成后调用release
parser.release();

//3.销毁
parser.dispose();

视频缩略图

视频缩略图的核心类为AliyunIThumbnailFetcher类,通过该类可以在视频轨道上展示每一帧图片的缩略图,通常在视频编辑或裁剪时需要用到。

//1.创建实例
//AlivcSdkCore.register(getApplicationContext()); 创建缩略图之前,要确认SDK有进行初始化
AliyunIThumbnailFetcher fetcher = AliyunThumbnailFetcherFactory.createThumbnailFetcher();

//2.添加视频/图片源
//2.1方式一:配置文件添加,适用于SDK内操作产生的project.json
fetcher.fromConfigJson(xxxx.json);

//2.2方式二:手动添加
//添加视频
fetcher.addVideoSource(path1, startTimeMills1, endTimeMills1, overlapDurationMills1);
//添加图片
fetcher.addImageSource(path2, startTimeMills2, endTimeMills2, overlapDurationMills2);

//3.设置缩略图输出大小等信息
//cropMode
CropMode cropMode = CropMode.Mediate;// 图像裁剪方式
VideoDisplayMode videoDisplayMode = VideoDisplayMode.Scale; //图像填充方式
int cacheSize = 10; //缓存的缩略图数量
fetcher.setParameters(width, height,cropMode, videoDisplayMode, cacheSize);
//一般建议,如果是请求一系列缩略图,fastMode设置为true,会快速出图;如果是请求一张或者需要精确地时间点的缩略图,可以设置为false
fetcher.setFastMode(true);


//4.最终缩略图会在回调中给出
long[] times = {1000, 2000, 3000}; //缩略图时间戳
fetcher.requestThumbnailImage(long[] time, new AliyunIThumbnailFetcher.OnThumbnailCompletion() {

            @Override
            public void onThumbnailReady(Bitmap frameBitmap, long time,int index) {
                //返回的缩略图
            }

            @Override
            public void onError(int errorCode) {
                //错误码信息
            }
        });

//或者使用requestThumbnailImage(count,callback)会按照时间均分请求count张数的缩略图
fetcher.requestThumbnailImage(10, new AliyunIThumbnailFetcher.OnThumbnailCompletion() {
@Override
  public void onThumbnailReady(Bitmap frameBitmap, long time, int index) {
      // time是时间戳,对应之前传入的times里面的一个值,index是传入时间片的数组下标
 }

@Override
public void onError(int errorCode) {
    }
});
//5.用完后销毁
fetcher.release()
说明

setFastMode()接口,传入true表示快速模式,取请求时间片最近的前关键帧,可以快速获得缩略图。如果传入false表示精确模式,会精确定位到请求时间片的特定帧。以1080P,30秒的视频,取10张图为例,快速模式下大概需要1秒,精确模式下大概需要5秒。