本文主要介绍腾讯礼物动画特效 SDK 的 Flutter 端 API 接口文档,以便于查阅和使用。
FTCMediaXBase
instance
说明
获取 FTCMediaXBase 的单例。
接口
static FTCMediaXBase get instance
参数说明
无
setLicense
说明
设置 License。
接口
Future<void> setLicense(String url, String key, FTCMediaLicenseListener listener) async
参数说明
参数名  | 类型  | 描述  | 
url  | String  | license 的 url。  | 
key  | String  | license 的 key。  | 
callback  | ILicenseCallback  | 回调。  | 
回调声明:
typedef FTCMediaLicenseListener = void Function(int errCode, String msg);
License 校验常见错误码:
错误码  | 描述  | 
0  | 成功。Success。  | 
-1  | 输入参数无效,例如 URL 或 KEY 为空。  | 
-3  | 下载环节失败,请检查网络设置。  | 
-4  | 从本地读取的 TE 授权信息为空,可能是 IO 失败引起。  | 
-5  | 读取 VCUBE TEMP License文件内容为空,可能是 IO 失败引起。  | 
-6  | v_cube.license 文件 JSON 字段不对。请联系腾讯云团队处理。  | 
-7  | 签名校验失败。请联系腾讯云团队处理。  | 
-8  | 解密失败。请联系腾讯云团队处理。  | 
-9  | TELicense 字段里的 JSON 字段不对。请联系腾讯云团队处理。  | 
-10  | 从网络解析的 TE 授权信息为空。请联系腾讯云团队处理。  | 
-11  | 把TE授权信息写到本地文件时失败,可能是 IO 失败引起。  | 
-12  | 下载失败,解析本地 asset 也失败。  | 
-13  | 鉴权失败,请检查 so 是否在包里,或者已正确设置 so 路径。  | 
3004/3005  | 无效授权。请联系腾讯云团队处理。  | 
3015  | Bundle Id / Package Name 不匹配。检查您的 App 使用的 Bundle Id / Package Name 和申请的是否一致,检查是否使用了正确的授权文件。  | 
3018  | 授权文件已过期,需要向腾讯云申请续期。  | 
其他  | 请联系腾讯云团队处理。  | 
setLogEnable
说明
是否开启 Log 输出,默认开始。
注意:
Android 端保存在 /sdcard/Android/data/packagename/files/TCMediaX 目录,iOS 端保存在 sandbox 的 Documents/TCMediaX 目录,您可以根据业务需要把此目录的日志上传到业务后台,用于定位线上用户问题。
接口
Future<void> setLogEnable(bool enable) async
FTCEffectAnimView
FTCEffectAnimView
说明
创建 
FTCEffectAnimView 礼物动画播放实例。接口
FTCEffectAnimView({this.controllerCallback, Key? viewKey})
参数说明
参数名  | 类型  | 描述  | 
controllerCallback  | FEffectViewControllerCallback  | 当前礼物动画的播放控制器创建成功回调。  | 
FTCEffectViewController
startPlay
说明
启动播放器。
接口
Future<int> startPlay(String playUrl) async
参数说明
playUrl 为视频资源地址。
注意:
只支持播放手机本地视频资源, 如果您使用的网络视频资源, 先下载到本地再播放。
setVideoMode
说明
设置 tep 动画的 alpha 和 rgb 区域的对齐方式。 
接口
Future<void> setVideoMode(FVideoMode videoMode) async
参数说明
videoMode 支持以下格式:
枚举值  | 含义  | 
FVideoMode.VIDEO_MODE_NONE  | 普通mp4文件。  | 
FVideoMode.EVIDEO_MODE_SPLIT_HORIZONTAL  | 左右对齐(alpha左\\rgb右)。  | 
FVideoMode.VIDEO_MODE_SPLIT_VERTICAL  | 上下对齐(alpha上\\rgb下)。  | 
FVideoMode.VIDEO_MODE_SPLIT_HORIZONTAL_REVERSE  | 左右对齐(rgb左\\alpha右)。  | 
FVideoMode.VIDEO_MODE_SPLIT_VERTICAL_REVERSE  | 上下对齐(rgb上\\alpha下)。  | 
setConfig
说明
设置特效播放器参数,需要在启动播放前调用。
接口
Future<void> setConfig(FTCEffectConfig config) async
参数说明
参考下面 FTCEffectConfig 类。
setScaleType
说明
设置对齐方式。
接口
Future<void> setScaleType(FScaleType type) async
参数说明
type 支持以下格式:
枚举值  | 含义  | 
FScaleType.FIT_XY  | 完整填充整个布局,默认值。  | 
FScaleType.FIT_CENTER  | 按视频比例在布局中间完整显示。  | 
FScaleType.CENTER_CROP  | 按视频比例完整填充布局(多余部分不显示)。  | 
setFetchResource
说明
设置融合动画的资源。
接口
void setFetchResource(FResourceFetcher resFetcher)
参数说明
FResourceFetcher 接口:
class FResourceFetcher {// 获取图片FResImgResultFetcher? imgFetcher;// 获取文字FResTextResultFetcher? textFetcher;// 资源释放通知FResReleaseListener? releaseListener;FResourceFetcher({this.imgFetcher, this.textFetcher, this.releaseListener});}
FEffectResource#tag 为融合动画的 tag(下标),可以判断 tag 传入不同的文字或图片资源。
requestUpdateResource
说明
播放过程中更新融合动画信息。
调用当前方法之后,会触发 IFetchResource 接口回调更新融合动画信息。
接口
Future<void> requestUpdateResource() async
setRenderRotation
说明
设置融合动画选择旋转角度,支持0,90180,270,360度。
接口
Future<void> setRenderRotation(int rotation) async
isPlaying
说明
返回特效播放器是否在播放中。
接口
Future<bool> isPlaying() async
resume
说明
恢复特效动画播放。
接口
Future<void> resume() async
pause
说明
暂停特效动画播放。
接口
Future<void> pause() async
seekTo
说明
跳转到指定位置开始播放。
注意:
startPlay() 之后才可以调用该方法,否则不生效。
该接口对于 tcmp4 动画、或者设置了 FCodecType.TX_LITEAV_SDK 时播放的mp4动画生效。
milliSec:要跳转到指定时长处开始播放,单位毫秒。
接口
Future<void> seekTo(int millSec) async
seekProgress
说明
跳转到指定位置开始播放。
progress:跳转到动画时长的指定百分比处开始播放,单位百分比,取值范围为:[0.0-1.0]。
注意:
startPlay() 之后才可以调用该方法,否则不生效。
该接口对于 tcmp4 动画、或者设置了 FCodecType.TX_LITEAV_SDK 时播放的mp4动画生效。
入参 progress 取值范围为 [0.0-1.0],超出范围的不生效。
接口
Future<void> seekProgress(double progress) async
setLoop
说明
设置循环播放。
true: 表示循环播放。
false: 表示关闭循环播放。
接口
Future<void> setLoop(bool isLoop) async
setLoopCount
说明
设置循环播放次数。
loopCount:表示循环播放次数。当 loopCount <= 0 时,表示无限循环播放;当 loopCount=n(n>=1)时表示从开始播放到播放结束,共播放 n 次。
注意:
loopCount 默认值是1,即当外部不主动调用该方法时,动画只播放一次就结束。
setLoop(boolean isLoop) 方法内部会调用当前方法,即当 isLoop = true 时,等价于调用 setLoopCount(-1);即当 isLoop = false 时,等价于调用 setLoopCount(1);因此这两个方法是互相影响的,后调用的会覆盖之前的调用。
接口
Future<void> setLoopCount(int loopCount) async
setDuration
说明
设置动画需要多长时间播放完成。设置之后,后续动画播放时自动调整动画播放速度,以保证动画在设置的规定时长时播放结束。
即:设置的时长超过动画原时长,则动画慢放;小于动画原时长,则快进播放。
durationInMilliSec: 要设置的时长,单位毫秒。
注意:
目前仅对 tcmp4 格式的动画生效。
当前方法和 setRate 设置倍速的方法是互斥的,后调用的会覆盖掉先调用的。
接口
Future<void> setDuration(int durationInMilliSec) async
stopPlay
说明
停止播放。
接口
Future<void> stopPlay({bool? clearLastFrame}) async
setMute
说明
设置是否静音播放。
true: 静音播放。
false: 非静音播放。
接口
Future<void> setMute(bool mute)
setPlayListener
说明
设置特效播放器播放回调。
接口
void setPlayListener(FAnimPlayListener? listener)
参数说明
IAnimPlayListener 接口:
class FAnimPlayListener {FEmptyFunction? onPlayStart;FEmptyFunction? onPlayEnd;FIntParamsFunction? onPlayError;FOnPlayEventFunction? onPlayEvent;FAnimPlayListener({this.onPlayStart, this.onPlayEnd, this.onPlayError, this.onPlayEvent});}
对于 onPlayEvent 方法中的 event 值详见 FTCEffectPlayerConstant 类中的常量值:
static static int REPORT_INFO_ON_PLAY_EVT_PLAY_END = 2006;static static int REPORT_INFO_ON_PLAY_EVT_RCV_FIRST_I_FRAME = 2003;static static int REPORT_INFO_ON_PLAY_EVT_CHANGE_RESOLUTION = 2009;static static int REPORT_INFO_ON_PLAY_EVT_LOOP_ONCE_COMPLETE = 6001;static static int REPORT_INFO_ON_VIDEO_CONFIG_READY = 200001;static static int REPORT_INFO_ON_NEED_SURFACE = 200002;static static int REPORT_INFO_ON_VIDEO_SIZE_CHANGE = 200003;static static int REPORT_ANIM_INFO = 200004;
对于 onPlayError 方法中的 errorCode 值详见 FTCEffectPlayerConstant 类中的常量值:
static const REPORT_ERROR_TYPE_HEVC_NOT_SUPPORT = -10007; // 不支持h265static const REPORT_ERROR_TYPE_INVALID_PARAM = -10008; // 参数非法static const REPORT_ERROR_TYPE_INVALID_LICENSE = -10009; // License 不合法static const REPORT_ERROR_TYPE_ADVANCE_MEDIA_PLAYER = -10010; // MediaPlayer播放失败static const REPORT_ERROR_TYPE_MC_DECODER = -10011; // MediaCodec 中 Decoder 失败static const REPORT_ERROR_TYPE_UNKNOWN_ERROR = -20000; // 未知错误
getTCAnimInfo
说明
获取当前播放动画对应的信息,返回 FTCEffectAnimInfo 实例,详见 FTCEffectAnimInfo。
注意:
该方法必须在 FAnimPlayListener#onPlayStart() 方法中,或者该方法执行之后调用才可以获取到当前动画的信息,否则返回 null。
接口
Future<FTCEffectAnimInfo> getTCAnimInfo() async
FTCEffectConfig
说明
构造特效播放器配置。
codecType 属性
// 设置 CodecTypeFCodecType? codecType;
参数说明
它有三个取值,分别是:
FCodecType.TC_MPLAYER (MPLAYER 播放引擎)
FCodecType.TC_MCODEC(MCODEC 播放引擎,仅在 Android 平台生效) 
FCodecType.TX_LITEAV_SDK (腾讯云播放器 SDK)
注意:
目前仅支持在播放器开始前调用 setConfig() 方法来设置播放配置,开始播放后不支持修改配置。
目前支持的三种 CodecType 仅对 TEP 动画生效。
如果设置 CodecType 为 FCodecType.TX_LITEAV_SDK ,则还需要单独引入腾讯云播放器 SDK,以及申请、注册好其对应的 license。
freezeFrame 属性
// 设置冻结停留帧索引FFreezeFrame? freezeFrame;
参数说明
入参 frame 表示当动画播放中需要停留在哪一帧。目前可选值:
FFreezeFrame.FREEZE_FRAME_NONE:关闭 freezeFrame 能力,播放器正常播放暂停消失。
FFreezeFrame.FREEZE_FRAME_LAST:当第一次播放完毕之后,画面停留在最后一帧。
animType 属性(仅Android)
// 设置后续要播放的动画格式FAnimType? animType;
参数说明
用于指定后续要播放的动画格式,适用于某些情况下,要播放的动画文件后缀被修改的场景。入参 type 表示要指定的动画格式。目前可选值:
FAnimType.AUTO  (SDK 默认策略,即以动画文件的后缀来判断动画格式,例如 tcmp4/mp4/tep/tepg 等格式。)
FAnimType.MP4  (MP4 动画格式,后续都将动画文件当做 MP4 类型来播放,无视文件后缀名。)
FAnimType.TCMP4 (TCMP4 动画格式,后续都将动画文件当做 TCMP4 类型来播放,无视文件后缀名。)
FTCEffectAnimInfo
说明
存储当前播放的动画信息。
属性说明
属性名  | 类型  | 描述  | 
type  | int  | 当前动画类型,取值:FAnimType.MP4  MP4类型的资源和 FAnimType.TCMP4 TCMP4 类型的资源。  | 
duration  | long  | 动画时长,单位毫秒。  | 
width  | int  | 动画宽度。  | 
height  | int  | 动画高度。  | 
encryptLevel  | int  | 当前动画的高级加密类型,取值如果是0,表示没有高级加密,否则表示已是高级加密。  | 
mixInfo  | FMixInfo  | 融合动画信息,为 null 时则表示该动画无融合信息。  | 
FMixInfo
说明
存储当前播放动画中的融合信息。
属性说明
属性名  | 类型  | 描述  | 
textMixItemList  | List<FMixItem>  | 文字融合信息,为 null 时则表示无文字融合信息。  | 
imageMixItemList  | List<FMixItem>  | 图片融合信息,为 null 时则表示无图片融合信息。  | 
FMixItem
说明
存储当前播放动画中的融合信息。
属性说明
属性名  | 类型  | 描述  | 
id  | String  | 当前融合动画 id。  | 
tag  | String  | 当前融合动画 tag。  | 
text  | String  | 当前文字融合动画文字内容(图片融合动画时该值为空)。如果是 tcmp4 时,则是其内部原始的文字内容;如果是 mp4 时,则是在工具中填写的 tag 值。  | 
FTCEffectText
说明
融合动画替换文本样式数据类。
属性说明
属性名  | 类型  | 描述  | 
text  | String  | 最终要替换显示的文本内容。  | 
color  | int  | 文字颜色,格式要求:ARGB,如 0xFFFFFFFF。  | 
fontStyle  | String  | 文字显示样式,可取值:"bold"表示粗体,不传则默认大小。  | 
alignment  | int  | 文字对齐方式,可取值:TEXT_ALIGNMENT_NONE(默认值,即保持 SDK 默认对齐方式)、TEXT_ALIGNMENT_LEFT(居左) 、TEXT_ALIGNMENT_CENTER(居中)、 TEXT_ALIGNMENT_RIGHT(居右)。  | 
fontSize  | double  | 文字大小,单位是px;如果设置了文字大小(值大于0),则内部自动缩放策略失效,强制以设置的文字大小为准,则可能出现文字过大显示不全的问题。  |