短视频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秒。
文档内容是否对您有帮助?