短视频 SDK Android(抽帧)

这篇说说腾讯云视频编辑SDK的抽帧功能,用于获取原始视频帧和编辑渲染帧,实现封面与时间线预览条。核心接口包括TAVEditor、ITAVFrameProvider、ITAVThumbProvider等,支持按时间点获取渲染帧、读取快照及原始帧抽帧,并可配置渲染场景与解码方式。 渲染帧获取:getFrameAtTime按微秒时间点、长边长度和播放/导出场景获取渲染结果,或通过getFrameProvider批量取帧。 。

相关产品
短视频 SDK 产品页,含版本规格、价格与购买入口。

一、功能概览

通过抽帧接口来获取原始视频帧和编辑中的渲染帧,一般用于实现封面和时间线预览条。

二、相关接口类

接口类名 描述
TAVEditor SDK 操作入口类。
ITAVFrameProvider 帧提供器接口。
TAVGetFrameListener 帧获取回调接口。
TAVSnapshotCallback 渲染快照回调接口。
ITAVThumbProvider 视频原始帧抽帧接口。

三、获取指定时间点渲染结果

接口说明:

/** * 获取某一时间节点渲染结果 * * @param positionUs 时间点(微秒) * @param longSideLength 最长边的长度,SDK内部会根据长边大小计算短边的大小 * @param scene 渲染场景: * – TAVEditorConstants.SCENE_PLAY = 0:播放场景 * – TAVEditorConstants.SCENE_EXPORT = 1:导出场景 * @param listener 结果回调接口 */void getFrameAtTime( long positionUs, int longSideLength, @TAVEditorConstants.RenderScene int scene, TAVGetFrameListener listener);

使用示例:

editor.getFrameAtTime(5_000_000, 1080, TAVEditorConstants.SCENE_PLAY, new TAVGetFrameListener() { @Override public void onFrameResult(Bitmap frameBmp) { // 渲染完成回调,frameBmp 为空表示渲染失败 }});

注意:说明:

注意:TAVGetFrameListener 仅包含 onFrameResult(Bitmap) 一个回调方法。渲染场景常量为 SCENE_PLAY(0) 与 SCENE_EXPORT(1)。

四、获取渲染结果生成器

接口说明:

/** * 获取渲染结果生成器 * * @param longSideLength 会按照渲染比例缩放到长边对齐 * @param scene 渲染场景 * – TAVEditorConstants.SCENE_PLAY = 0: 播放场景 * – TAVEditorConstants.SCENE_EXPORT = 1: 导出场景 * @return ITAVFrameProvider 帧提供器实例 */ITAVFrameProvider getFrameProvider(int longSideLength, @TAVEditorConstants.RenderScene int scene);

使用示例:

ITAVFrameProvider provider = editor.getFrameProvider(720, TAVEditorConstants.SCENE_EXPORT);// 获取指定时间点的帧(ITAVFrameProvider.getFrameAtTime(long timeUs, TAVGetFrameListener))provider.getFrameAtTime(3_000_000, new TAVGetFrameListener() { @Override public void onFrameResult(Bitmap frameBmp) { // 处理帧图像 }});provider.release();

五、读取当前时间节点渲染快照

接口说明:

/** * 读取当前时间节点渲染快照 * * @param callback 快照获取成功时的回调 */void readSnapshot(TAVSnapshotCallback callback);

使用示例:

editor.readSnapshot(new TAVSnapshotCallback() { @Override public void onSnapshotResult(Bitmap snapshot, long positionUs) { // 处理快照图像与对应时间点 }});

注意:说明:

注意:回调方法为 onSnapshotResult(Bitmap snapshot, long positionUs)。

六、获取视频原始帧抽帧接口

接口说明:

/** * 获取视频原始帧抽帧接口 * * @param forceUseSoftwareDecoding 是否强制使用软解: * – true: 强制软件解码 * – false: 优先硬件解码 * @return ITAVThumbProvider 缩略图提供器实例 */ITAVThumbProvider getThumbnailProvider(boolean forceUseSoftwareDecoding);

使用示例:

ITAVThumbProvider provider = editor.getThumbnailProvider(false);// 1. 设置抽帧输入源,longSide 为目标缩略图最长边(<16 时按原始分辨率抽帧)provider.setDataSource(context.getFilesDir() + "/source.mp4", 320);// 2. 取指定时间点的帧;granularity 为帧间隔秒数(颗粒度)provider.getFrameAtTime(2_000_000, 0.1f, new ITAVThumbProvider.FrameExtractingCallback() { @Override public void onExtractedFrame(String videoPath, Bitmap frame, long pts) { // 每抽到一帧回调一次,在子线程执行;frame 为空表示抽帧失败 }});// 3. 用完释放provider.release();

ITAVThumbProvider 全部方法:

方法 说明
setDataSource(String videoPath, int longSide) 设置抽帧输入源与目标最长边。
getFramesInterval(long intervalUs, FrameExtractingCallback callback) 按时间间隔批量抽帧。
getFrames(List<Long> ptsList, float granularity, FrameExtractingCallback callback) 按指定时间点队列批量抽帧。
getFrameAtTime(long pts, float granularity, FrameExtractingCallback callback) 获取指定时间点的帧。
getCacheFrame(String path, long pts, int longSide, float granularity) 读内存/磁盘缓存中的抽帧结果。
saveCacheFrame(String path, Bitmap bmp, long pts, int longSide, float granularity) 将抽帧结果写入缓存。
getDuration() 输入源时长。
requestStop() 停止当前抽帧任务。
release() 释放抽帧器资源。

注意:说明:

注意:原始帧抽帧统一使用 getFrameAtTime(pts, granularity, FrameExtractingCallback),结果通过 onExtractedFrame(String, Bitmap, long) 回调。

赞 (0)
上一篇 4天前
下一篇 4天前