短视频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秒。
该文章对您有帮助吗?