涂图

  • 首页
  • 解决方案
    • 拍照和图片编辑
    • 视频录制和后期编辑
    • 模板视频
    • 人像美颜
    • 人脸特效
    • 滤镜特效
    • 贴纸特效
  • API服务
    • 人像服务
    • 视频融合
    • 人脸云
    • 在线滤镜
  • 客户案例
  • 下载
  • 文档
  • 关于我们
  • 控制台
  • 一、新手上路
  • 控制台操作说明
    • 控制台使用说明
    • 自定义资源上传说明
  • 二、SDK 文档
  • 图像 SDK
    • 产品说明
      • 产品指南
      • 性能测试报告
    • iOS 文档
      • 快速开始
      • 安装与更新
      • 集成向导
      • 相机组件的使用
      • 相册组件的使用
      • 照片美化组件的使用
      • 主题包基础使用
      • 自定义滤镜
      • 自定义贴纸
      • 自定义界面
      • 自定义 ProgressHUD 提示框(2.0.0~3.2.7)
      • 自定义 ProgressHUD 提示框
      • API 文档
      • 致谢
    • Android 文档
      • 快速开始
      • 安装与更新
      • 集成向导
      • 相机组件的使用
      • 照片美化组件的使用
      • 头像设置组件的使用
      • 多选相册组件的使用
      • 主题包基础使用
      • 自定义贴纸
      • 自定义滤镜
      • 自定义界面
      • 自定义进度信息提示框
      • 自定义 Activity 打开相机
      • API 文档
      • 致谢
    • iOS 技术问题
      • 「Incorrenct app key」
      • 更换滤镜效果图
      • 导航栏与状态栏
      • 组件中使用部分滤镜
      • Cocoapods 相关问题
      • 图片尺寸变化
      • Photos.framework 相关错误
      • 多包名发布
      • GPUImage 的相关错误
      • TuSDKTSALAsset 转换系统对象
      • 滤镜无法显示名称
      • 获取相机的点击事件
    • Android 技术问题
      • Incorrenct app key
      • 重复引用包
      • Recyclerview 库缺失
      • 方法数超出 65536 限制
      • 传入图片路径
      • 指定裁剪比例
      • 指定相册每行列数
      • 禁用相册自动跳转
      • 如何使用部分滤镜?
      • 代码混淆
      • TuSDK 使用的依赖库
      • 多渠道打包
      • 设置相机输出尺寸
      • 相机横屏设置
      • 自定义照片美化组件各功能模块效果默认参数值
    • 拼图设计
      • 拼图模板导出
    • 版本更新日志
      • iOS 版本更新日志
      • Android 更新日志
  • 视频剪辑 SDK
    • 产品说明
      • 产品指南
    • iOS文档
      • TuSDK Video Editor iOS 接入文档
    • Android文档
      • TuSDK Video Editor Android 接入文档
    • 版本更新日志
      • iOS 版本更新日志
      • Android 版本更新日志
  • 流处理(特效相机) SDK
    • 产品说明
      • 产品指南
    • iOS 文档
      • TuSDK特效相机接入文档-iOS
      • TuSDK直播特效接入说明-iOS
    • Android 文档
      • TuSDK特效相机接入文档-Android
      • TuSDK直播特效接入说明-Android
    • 版本更新日志
      • iOS 版本更新日志
      • Android 版本更新日志
  • 视频融合 SDK
    • 产品说明
      • 产品指南
      • 模板管理
    • iOS 文档
      • 快速开始
      • 安装与更新
      • TuSDK EVA 接入说明 2.0
      • API文档
    • Android 文档
      • 快速开始
      • 安装与更新
      • TuSDK EVA 接入说明 (2.0.0+)
      • API 文档
    • 模板设计
      • (新)标准模板设计规范
      • (旧)标准模板设计规范
      • 支持的 AE 功能和属性
      • 动态模板设计规范
    • 模板导出
      • (新)模板导出插件安装
      • (新)模板导出插件使用
      • (旧)模板导出插件安装
      • (旧)模板导出插件使用
      • (旧)模板效果查看器
      • (旧)模板打包规范
    • 版本更新日志
      • iOS 版本更新日志
      • Android 版本更新日志
      • 导出插件版本更新日志
      • 效果查看器更新日志
  • 短视频 SDK
    • 产品说明
      • 产品指南
      • 性能测试报告
    • iOS 文档
      • 快速开始
      • 集成向导
      • 录制相机的使用
      • 视频编辑器的使用
      • 功能 API 的使用
      • API 文档
    • Android 文档
      • 快速开始
      • 集成向导
      • 录制相机的使用
      • 视频编辑器的使用
      • 功能 API 的使用
      • API 文档
    • iOS 技术问题
      • 常见问题
    • Android 技术问题
      • 常见问题
    • 版本更新日志
      • iOS 版本更新日志
      • Android 版本更新日志
  • 三、云服务文档
  • 人像服务
    • 使用文档
      • 快速入门
      • 核心功能
    • API概述
      • API 概述
      • API 文档
    • 常见问题
      • 常见问题
  • 视频融合(云渲染)
    • 使用文档
      • 快速入门
      • 模板管理
    • API概述
      • API概述
      • API 文档
    • 模板设计
      • (新)标准模板设计规范
      • (旧)标准模板设计规范
      • 支持的 AE 功能和属性
      • 动态模板设计规范
    • 模板导出
      • (新)模板导出插件安装
      • (新)模板导出插件使用
      • (旧)模板导出插件安装
      • (旧)模板导出插件使用
      • (旧)模板效果查看器
      • (旧)模板打包规范
    • 常见问题
    • 版本更新日志
      • 导出插件版本更新日志
      • 效果查看器更新日志
  • 人脸云
    • 使用文档
      • 快速入门
      • 核心功能
    • API 概述
      • API 概述
    • 常见问题
      • 常见问题
  • 在线滤镜
    • 使用文档
      • 快速入门
      • 核心功能
      • FILTER API
      • API 错误码表
    • API概述
      • API 概述
    • 常见问题
      • 常见问题
  • 四、综合
  • 涂图隐私协议
  • 用户退出机制
  • 动态贴纸设计规范
  • 美妆贴纸设计规范
  • 云服务账单说明
  • 应用包名与密钥
  • 基础服务开发者升级流程
  • 五、常见问题
  • 常见问题
  • 遇到问题,怎么办?
  • 如何使用贴纸管理、滤镜管理?

API 使用示例

API 使用示例具体细节「component」包下的使用示例

1. 多音轨混合

类名 功能说明
TuSDKAACAudioFileEncoder AAC音频文件编码器
TuSDKAverageAudioMixer 音频混合器

(参考Demo中AudioMixedActivity)

  • 初始化音频混合对象

      TuSDKAverageAudioMixer audioMixer = new TuSDKAverageAudioMixer();
      //设置混音回调
      audioMixer.setOnAudioMixDelegate(mAudioMixerDelegate);

    这里需要设置一个混音的回调mAudioMixerDelegate

    /**
     * 音频混合Delegate
     */
    private TuSDKAudioMixer.OnAudioMixerDelegate mAudioMixerDelegate = new TuSDKAudioMixer.OnAudioMixerDelegate() {
        /**
         * 混合状态改变事件
         */
        @Override
        public void onStateChanged(TuSDKAudioMixer.State state) {
            if (state == TuSDKAudioMixer.State.Complete) {
                // 停止AAC编码器
                mAACFileEncoder.stop();
                TuSdk.messageHub().showSuccess(AudioMixedActivity.this, "混合完成");
            } else if (state == Decoding || state == Mixing) {
                TuSdk.messageHub().setStatus(AudioMixedActivity.this, "混合中");
            } else if (state == TuSDKAudioMixer.State.Cancelled) {
                //删除混合的音频文件
                delMixedFile();
            }
        }
    
        /**
         * 当前解析到主背景音乐信息时回调该方法,其他音乐将参考该信息进行混合
         */
        @Override
        public void onReayTrunkTrackInfo(TuSDKAudioInfo rawInfo) {
        }
    
        @Override
        public void onMixingError(int errorCode) {
            TuSdk.messageHub().showError(AudioMixedActivity.this, "混合失败");
        }
    
        /**
         * 混合后的音频数据(未经编码)
         */
        @Override
        public void onMixed(byte[] mixedBytes) {
            // 编码音频数据
            mAACFileEncoder.queueAudio(mixedBytes);
        }
    };

    混音的状态是在TuSDKAudioMixer.State这个枚举中,有以下几种状态

      /**
       * 混音状态
       */
      public enum State
      {
          /** 空闲状态 */
          Idle,
          /** 正在解码 */
          Decoding,
          /** 解码完成 */
          Decoded,
          /** 混合中 */
          Mixing,
          /** 混合完成 */
          Complete,
          /** 已取消 */
          Cancelled
      }

    我们看到在回调中用到了TuSDKAACAudioFileEncoderAAC文件编码器 ,AAC文件编码器的初始化方式为

  • 初始化AAC音频文件编码器

/** AAC 音频文件编码器,可将混合的音频数据编码为AAC文件 */
TuSDKAACAudioFileEncoder mAACFileEncoder = new TuSDKAACAudioFileEncoder();
// 初始化音频编码器
mAACFileEncoder.initEncoder(TuSDKAudioEncoderSetting.defaultEncoderSetting());
// 设置输入路径
mAACFileEncoder.setOutputFilePath(getMixedAudioPath());

在初始化调用initEncoder的时候,我们会传入一个TuSDKAudioEncoderSetting对象,这个是音频编码器的设置,主要用来设置以下的参数

/** TuSDKAudioEncoderSetting **/

/** 录制的音频数据格式 默认:AudioFormat.ENCODING_PCM_16BIT */
public int audioFormat;
/** 录制的音频采样率 默认:44100 */
public int sampleRate;
/** 录制的音频通道设置 AudioFormat.CHANNEL_IN_MONO 或 AudioFormat.CHANNEL_IN_STEREO  默认:AudioFormat.CHANNEL_IN_STEREO */
public int channelConfig;
/** 音频质量 默认:AudioQuality.MEDIUM1 */
public AudioQuality audioQuality;
/** 默认:MediaCodecInfo.CodecProfileLevel.AACObjectLC */
public int mediacodecAACProfile;
/** 音道数 默认:2 */
public int mediacodecAACChannelCount;
/** 是否启用音频缓冲区 */
public boolean enableBuffers;

如果不需要自定义参数的话,直接调用TuSDKAudioEncoderSetting.defaultEncoderSetting()获取默认配置即可

  • 多音轨开始混合

    /** 启动AAC文件编码器 **/
    mAACFileEncoder.start();
    /** 向音频混合器输入需要混合的音频对象列表 **/
    mAudioMixer.mixAudios(getAudioEntryList());

    getAudioEntryList()为获取音频对象TuSDKAudioEntry列表

    • 获取音频文件列表

      音频对象为TuSDKAudioEntry.java 支持URI和Path两种形式,其中可支持的操作有

      /**
       * 设置改音频是否为主背景
       * @param trunk 其他音频混合时将参考该音频 
       */
      public TuSDKAudioEntry setTrunk(boolean trunk);
      
      /**
      * 设置是否循环
      * @param looping true : 在背景音乐中循环
      */
      public TuSDKAudioEntry setLooping(boolean looping);
      
      /**
      * 该音频在主干音频的位置  (mTrunk == true时 忽略该设置)
      * @param timeRange 时间区间
      */
      public TuSDKAudioEntry setTimeRange(TuSDKTimeRange timeRange);
      
      /**
      * 设置裁剪区域
      * @param cutTimeRange 裁剪时间区间
      */
      public TuSDKAudioEntry setCutTimeRange(TuSDKTimeRange cutTimeRange)
      
      /**
       * 设置音量
       * @param volume (0f - 1f)
       */
      public TuSDKAudioEntry setVolume(float volume);

2. 音视频混合

类名 功能说明
TuSDKMP4MovieMixer 对视频和多个音频进行混合

(参考Demo中的TuSDKMP4MovieMixer)

  • 初始化混合器

    混合器采用了建造者模式去构建,构建方式如下

    TuSDKMP4MovieMixer mMP4MovieMixer = new TuSDKMP4MovieMixer();
    mMP4MovieMixer.setDelegate(this)
            .setOutputFilePath(getMixedVideoPath()) // 设置输出路径
            .setVideoSoundVolume(1.0f) // 设置音乐音量
            .setClearAudioDecodeCacheInfoOnCompleted(true); // 设置音视频混合完成后是否清除缓存信息 默认:true (false:再次混合时可加快混合速度)

​ 这边会设置一个回调 OnMP4MovieMixerDelegate 这个回调内部有这几个方法

/**
 * 音视频混合Delegate
 */
public interface OnMP4MovieMixerDelegate
{
   /**
    * 混合状态改变
    * @param state
    * @see TuSDKMP4MovieMixer.State
    */
   void onStateChanged(TuSDKMP4MovieMixer.State state);

   /**
    * 错误状态
    * @param code
    * @see ErrorCode
    */
   void onErrrCode(ErrorCode code);

   /**
    * 混合完成
    * @param result 视频混合结果
    */
   void onMixerComplete(TuSDKVideoResult result);
}
  • 开始混合

    //  mVideoDataSource : 视频路径 mAudioTracks : 待混合的音频数据 true : 是否混合视频原音
    mMP4MovieMixer.mix(TuSDKMediaDataSource.create(getVideoPath()), mAudioEntryList, false); 

    ​ 开始混合的时候需要传入

    1. 视频的路径TuSDKMediaDataSource
    2. 待混合的音频数据mAudioEntryList(TuSDKAudioEntry列表,多音轨混合有详细介绍)
    3. 是否混合视频原音

这三个设置

  • 状态和错误码

  • /**
     *  TuSDKMP4VideoMixer 状态信息
     */
    public enum State
    {
       /** 空闲状态 */
       Idle,
       /** 正在解码 */
       Decoding,
       /** 解码完成 */
       Decoded,
       /** 混合中 */
       Mixing,
       /** 已取消 */
       Cancelled,
       /** 混合视频 */
       Failed
    }
    
    /**
     * 错误码
     */
    public enum ErrorCode
    {
       /** 不支持的视频格式 */
       UnsupportedVideoFormat,
    }

3. 获取视频缩略视图

类名 功能说明
TuSDKVideoImageExtractor 视频帧提取器

(参考Demo中MovieThumbActivity)

  • 视频帧提取器用法

    //获取出的每帧图片大小
    TuSdkSize tuSdkSize = TuSdkSize.create(TuSdkContext.dip2px(56), TuSdkContext.dip2px(30));
    //创建视频帧提取器
    TuSDKVideoImageExtractor extractor = TuSDKVideoImageExtractor.createExtractor();
    //设置输出图片大小
    extractor.setOutputImageSize(tuSdkSize)
          //设置视频数据源
            .setVideoDataSource(TuSDKMediaDataSource.create(getVideoPath()))
          //设置分离图片的数量
            .setExtractFrameCount(15);
    //设置分离回调,开始提取图片
    extractor.asyncExtractImageList(mImageExtractorDelegate);

​ 这里会设置分离的回调,回调的方法为

public  interface TuSDKVideoImageExtractorDelegate
{   
   /** 此方法是在所有图片分离完毕之后回调 只会回调一次 **/
   void onVideoImageListDidLoaded(List<Bitmap> images);
   /** 此方法是在每分离出一张图片就会回调一次  **/
   void onVideoNewImageLoaded(Bitmap bitmap);
}
  • 精确提取视频帧

在TuSDKVideoImageExtractor中调用此方法可以精确提取视频帧

/**
* 获取指定时间的视频缩略图 单位:微秒
* 
* @param frameTimeUs 侦时间 单位:微妙
* @param quality 质量 0-100
* @return Bitmap
*/
public Bitmap getFrameAtTime(long frameTimeUs, int quality) 

4.多视频拼接

类名 功能说明
TuSdkMediaSuit.merge() 多视频拼接
  • 多视频拼接使用方法
TuSdkMediaSuit.merge(mMoviePathList, muxerPath, ouputVideoFormat, ouputAudioFormat, mediaProgress);
  1. mMoviePathList 待合成视频列表
  2. muxerPath 最终生成的文件路径
  3. ouputVideoFormat 输出的视频格式
  4. ouputAudioFormat输出的音频格式
  5. mediaProgress进度回调

进度的回调有以下几个方法

/** 媒体处理进度接口 */
public interface TuSdkMediaProgress {
    /**
     * 执行进度 [主线程]
     *
     * @param progress        进度百分比 0-1
     * @param mediaDataSource 当前处理的视频媒体源
     * @param index           当前处理的视频索引
     * @param total           总共需要处理的文件数
     */
    void onProgress(float progress, TuSdkMediaDataSource mediaDataSource, int index, int total);

    /***
     * 完成转码 [主线程]
     * @param e 如果成功则为Null
     * @param outputFile 输出文件路径
     * @param total 处理文件总数
     */
    void onCompleted(Exception e, TuSdkMediaDataSource outputFile, int total);
}

5.视频时间范围裁剪

类名 功能说明
TuSdkMediaSuit.cuter() 视频裁剪

(参考Demo中的 MovieCutActivity)

  • 视频裁剪使用方法
TuSdkMediaSuit.cuter(inputMediaSource, outputFilePath, ouputVideoFormat, ouputAudioFormat, orientation,rectDrawF, rectCutF, timeSlice, mCuterMediaProgress);
  1. inputMediaSource 输入的视频源
  2. outputFilePath 输出的地址
  3. ouputVideoFormat 输出的视频格式信息
  4. ouputAudioFormat 输入的视频格式信息
  5. orientation 设置输出视频方向 详见ImageOrientation
  6. timeSlice 设置时间的范围

6.音频录制

类名 功能说明
TuSDKAudioFileRecorder 音频录制器

(参考Demo中的AudioRecordActivity)

  • 初始化音频录制器

    TuSDKAudioFileRecorder mAudioRecorder = new TuSDKAudioFileRecorder();
    //设置输出文件类型
    mAudioRecorder.setOutputFormat(TuSDKAudioFileRecorder.OutputFormat.AAC);
    //设置文件录制回调
    mAudioRecorder.setAudioRecordDelegate(mRecordAudioDelegate);

​ 文件输出类型可以设置为PCM和AAC两种文件类型

回调接口有以下几个方法

/** 录音事件回调 */
public static interface TuSDKRecordAudioDelegate
{
   /**
    * 录制完成
    * 
    * @param file
    */
   public void onAudioRecordComplete(File file);


   /**
    * 录制状态改变
    * 
    * @param state @see RecordState
    */
   void onAudioRecordStateChanged(RecordState state);

   /**
    * 错误信息回调
    * 
    * @param error @see RecordError
    */
   void onAudioRecordError(RecordError error);

}

开始、暂停、继续、结束的方法分别是

//开始录制
mAudioRecorder.start();
//暂停录制
mAudioRecorder.pauseRecord();
//继续录制
mAudioRecorder.resumeRecord();
//结束录制
mAudioRecorder.stop();

7. 音频变声

类名 功能名称
TuSdkAudioPitchEngine 音频变声

1.音频特效的类型

目前音频特效类型有以下几种:

 //正常
TuSdkSoundPitchType.Normal
//怪兽
TuSdkSoundPitchType.Monster
//大叔
TuSdkSoundPitchType.Uncle
//女生
TuSdkSoundPitchType.Girl
//萝莉
TuSdkSoundPitchType.Lolita

2.音频特效 API

  • 将 PCM 数据放入TuSdkAudioPitchEngine 队列中
 /***
  * 处理音频数据
  * @param byteBuffer 输入缓存
  * @param bufferInfo 缓存信息
  * @return 是否已处理
 */
 void processInputBuffer(ByteBuffer byteBuffer, MediaCodec.BufferInfo bufferInfo);
  • 通知TuSdkAudioPitchEngine输入的 PCM 音频信息变更
/**
 * 更新音频信息
 * @param inputAudioInfo 新的音频信息
 */
void changeAudioInfo(TuSdkAudioInfo inputAudioInfo);
  • 清除缓存并重置音频处理器
/**
* 重置处理器 
*/
void reset();
  • 释放当前音频处理器
/**
* 释放处理器
*/
void release();

3. 使用示例

// setp1: 初始化输入的音频信息
TuSdkAudioInfo  inputAudioInfo = new TuSdkAudioInfo(TuSdkMediaFormat.buildSafeAudioEncodecFormat());

// setp2: 初始化 TuSdkAudioPitchEngine
TuSdkAudioPitchEngine audioPitchEngine = new TuSdkAudioPitchEngine(inputAudioInfo);

// setp3: 设置 TuSdkAudioPitchEngine 处理回调
audioPitchEngine.setOutputBufferDelegate(mAudioPitchEngineOutputBufferDelegate);

// setp4: 设置当前需要的音效
audioPitchEngine.setSoundPitchType(TuSdkAudioPitchEngine.TuSdkSoundPitchType.Normal);

// setp5: 在输出PCM数据的地方调用
audioPitchEngine.processInputBuffer(outputByteBuffer, bufferInfo);

// setp6: 经过TuSdkAudioPitchEngine处理后的数据在会在回调中返回
/** 音频处理数据输出委托 **/
interface TuSdKAudioEngineOutputBufferDelegate {
    void onProcess(ByteBuffer byteBuffer, MediaCodec.BufferInfo bufferInfo);
}

// 在这里添加后续处理逻辑,可用于编码,播放,或写入文件。

  • 1. 多音轨混合
  • 2. 音视频混合
  • 3. 获取视频缩略视图
  • 4.多视频拼接
  • 5.视频时间范围裁剪
  • 6.音频录制
  • 7. 音频变声
  • 在线技术支持
  • 专业售前售后团队
  • 版本定期更新
  • 全方位解决方案

商务合作

  • 177-6716-7529
  • 2969573855
  • sales@tusdk.com
  • 浙江省 杭州市 西湖区 西斗门9号 福地创业园1号楼3楼301室

关注我们

qrcode

©2019-2025 TUTUCLOUD. All Rights Reserved. 杭州元凡视觉智能科技有限公司 | 浙ICP备14040447号-1 | 浙公网安备33010602001649号

  • 177-6716-7529
  • sales@tusdk.com
  • 2969573855