涂图

  • 首页
  • 解决方案
    • 拍照和图片编辑
    • 视频录制和后期编辑
    • 模板视频
    • 人像美颜
    • 人脸特效
    • 滤镜特效
    • 贴纸特效
  • 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 概述
    • 常见问题
      • 常见问题
  • 四、综合
  • 涂图隐私协议
  • 用户退出机制
  • 动态贴纸设计规范
  • 美妆贴纸设计规范
  • 云服务账单说明
  • 应用包名与密钥
  • 基础服务开发者升级流程
  • 五、常见问题
  • 常见问题
  • 遇到问题,怎么办?
  • 如何使用贴纸管理、滤镜管理?

TuSDK直播特效 API

一、文件构成

1、包名

  • iOS 应用的包名是 Bundle Identifier,它定义在 Project Target 中的 Bundle Identifier。

2、秘钥(AppKey)

  • 替换 TuSDK 初始化中的秘钥(AppKey),AppDelegate.m中引入 #import <TuSDK/TuSDK.h>。
  • 进行初始化 [TTLiveMediator setupWithAppKey:@"xxxxxx5d12xxxxxx-04-xxxxxx"];

3、资源文件

  • 提供的压缩包中会有 package_XXXXXX.zip 文件。
  • 解压缩该文件后会有,滤镜、特效资源:other、texture,贴纸资源:sticker 文件。
  • other 和 texture 这两个是必要文件,sticker有动态贴纸服务才会出现。

4、文件替换操作

  • 替换 AppKey 至 TuSDK init 初始化方法中秘钥(AppKey)。
  • 将解压缩后的文件替换 TuSDK.bundle 文件中的对应文件。
  • TuSDK.bundle文件介绍:

(1)model 文件,鉴权文件,必须保留。

(2)others 文件夹,包含使用到的滤镜资源文件的索引,进行滤镜资源文件操作是需要进行替换。

(3)stickers 文件夹,包含打包到本地使用的贴纸的资源文件,进行资源文件操作是需要进行替换(无贴纸功能的可删除)。

(4)textures 文件夹,包含打包到本地使用的滤镜的资源文件,进行资源文件操作是需要进行替换。

接入准备

  • 使用美颜 sdk 之前需要拿到功能授权文件,以及与授权文件对应的素材
  • 将我们的库文件和头文件加入项目,并将对 sdk 的一些封装代码拷贝到项目中,这些代码一般存在于 TTBeauty 文件夹下。

七牛推流接入指南

在七牛PLMediaStreamingSession的代理方法中添加如下代码:

// 摄像头采集的数据回调
- (CVPixelBufferRef)mediaStreamingSession:(PLMediaStreamingSession *)session cameraSourceDidGetPixelBuffer:(CVPixelBufferRef)pixelBuffer {
    CVPixelBufferRef ttPixelBuffer = [[TTPipeMediator shareInstance] sendPixelBuffer:pixelBuffer];
    if (ttPixelBuffer) {
        return ttPixelBuffer;
    }
    return pixelBuffer;
}

声网推流接入指南

PUSH方式

开启自定义视频采集

// Swift
// 调用 Agora 的 setExternalVideoSource 方法,告知 SDK 使用自采集的视频数据。
agoraKit.setExternalVideoSource(true, useTexture: true, pushMode: true)

核心处理&渲染代码

func myVideoCapture(_ capture: AgoraCameraSourcePush, didOutputSampleBuffer pixelBuffer: CVPixelBuffer, rotation: Int, timeStamp: CMTime) {

        let ts: Int64 = Int64(timeStamp.seconds * 1000)
        let ttPixelBuffer = TTPipeMediator.shareInstance().send(pixelBuffer, withTimestamp: ts, rotation: Int32(rotation)).takeUnretainedValue()

        let videoFrame = AgoraVideoFrame()
        videoFrame.format = 12
        videoFrame.textureBuf = ttPixelBuffer
        videoFrame.time = timeStamp
        videoFrame.rotation = Int32(rotation)

        // 测试 工程中推荐使用 TUPFPImage 渲染
        self.displayView.image = UIImage(ciImage: CIImage(cvPixelBuffer: ttPixelBuffer))

        //once we have the video frame, we can push to agora sdk
        agoraKit?.pushExternalVideoFrame(videoFrame)
}

MediaIO方式

设置声网为MediaIO方式

agoraKit.setVideoSource(customCamera)

实现 AgoraVideoSourceProtocol 协议 (参考AgoraCameraSourceMediaIO)

func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
        guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer), CVPixelBufferLockBaseAddress(pixelBuffer, .readOnly) == kCVReturnSuccess else {
            return
        }
        defer {
            CVPixelBufferUnlockBaseAddress(pixelBuffer, .readOnly)
        }

        let time = CMSampleBufferGetPresentationTimeStamp(sampleBuffer)
        let rotation = viewOrientation.agoraRotation()
        let ts: Int64 = Int64(time.seconds * 1000)
        let newPixelBuffer = TTPipeMediator.shareInstance().send(pixelBuffer, withTimestamp: ts, rotation: 90).takeUnretainedValue()
        consumer?.consumePixelBuffer(newPixelBuffer, withTimestamp: time, rotation: rotation)
    }

腾讯云直播接入指南

自采集数据

首先需要调用 V2TXLivePusher 的 enableCustomVideoCapture 接口开启自定义采集。

- (void)onVideoSampleBuffer:(CMSampleBufferRef)videoBuffer {
    CVPixelBufferRef newPixelBuffer = [[TTPipeMediator shareInstance] sendVideoSampleBuffer:videoBuffer];
    V2TXLiveVideoFrame *videoFrame = [[V2TXLiveVideoFrame alloc] init];
    videoFrame.bufferType = V2TXLiveBufferTypePixelBuffer;
    videoFrame.pixelFormat = V2TXLivePixelFormatI420;
    videoFrame.pixelBuffer = newPixelBuffer;

    [self.livePusher sendCustomVideoFrame:videoFrame];
}

修改OpenGL纹理

首先需要调用 V2TXLivePusher 的 enableCustomVideoProcess 开启自定义视频处理,才会收到这个回调通知。

- (void)onProcessVideoFrame:(V2TXLiveVideoFrame *)srcFrame dstFrame:(V2TXLiveVideoFrame *)dstFrame {

    if (!_currentContext) {
        _currentContext = [EAGLContext currentContext];
        [TTLiveMediator setupContext:_currentContext];
        [[TTLiveMediator shareInstance] setPixelFormat:TTVideoPixelFormat_Texture2D];
    }
    TUPFPImage *fpImage = [[TTLiveMediator shareInstance] sendVideoTexture2D:srcFrame.textureId width:(int)srcFrame.width height:(int)srcFrame.height];

    dstFrame.bufferType = V2TXLiveBufferTypeTexture;
    dstFrame.pixelFormat = V2TXLivePixelFormatTexture2D;
    dstFrame.textureId = [fpImage getTextureID];

}

即构推流接入指南

在即构的ZGCustomVideoCapturePixelBufferDelegate的代理回调中添加如下方法

- (void)captureDevice:(id<ZGCaptureDevice>)device didCapturedData:(CMSampleBufferRef)data {

    if (self.captureBufferType == ZGCustomVideoCaptureBufferTypeCVPixelBuffer) {

        // BufferType: CVPixelBuffer
        CVPixelBufferRef ttPixelBuffer = [[[TTLiveMediator shareInstance] sendVideoPixelBuffer:CMSampleBufferGetImageBuffer(data)] getCVPixelBuffer];
        if (ttPixelBuffer) {
            // Send pixel buffer to ZEGO SDK
            [[ZegoExpressEngine sharedEngine] sendCustomVideoCapturePixelBuffer:ttPixelBuffer timestamp:CMSampleBufferGetPresentationTimeStamp(data)];
        } else {
            // Send pixel buffer to ZEGO SDK
            [[ZegoExpressEngine sharedEngine] sendCustomVideoCapturePixelBuffer:CMSampleBufferGetImageBuffer(data) timestamp:CMSampleBufferGetPresentationTimeStamp(data)];
        }
    } else if (self.captureBufferType == ZGCustomVideoCaptureBufferTypeEncodedFrame) {

        // BufferType: Encoded frame (H.264)

        // Need to encode frame
        [self.encoder encodeBuffer:data];
    }
}

设置美颜参数

设置美颜参数也是使用 TTPipeMediator中 TTBeautyManager 提供的函数,更多的使用可以参考我们的 demo 里的做法。

FAQ

1、滤镜替换使用的滤镜的代号

  • 替换资源文件后,查看资源文件(TuSDK.bundle/others/lsq_config.json)filterGroups中滤镜的 filerCode(filters/name),替换到项目中对应的位置。
  • 替换滤镜资源后,需要根据新的 filterCode 更改对应滤镜效果缩略图文件的名称。
  • 举例:"name":"lsq_filter_VideoFair",VideoFair 就是该滤镜的filterCode ,在_videoFilters = @[@"VideoFair"];可以进行选择使用滤镜的设置。

2、贴纸替换使用贴纸

  • 替换资源文件后,查看资源文件(TuSDK.bundle/others/lsq_config.json) stickerGroups中贴纸的id、name,新增/替换到项目中customStickerCategories.json对应的位置。
  • Assets/customStickerCategories.json/categoryName,修改/新增类别名称。
  • Assets/customStickerCategories.json/categoryName/stickers,对应类别名称下的组员groups。
  • Assets/customStickerCategories.json/categoryName/stickers/name,修改/新增使用贴纸的名称。
  • Assets/customStickerCategories.json/categoryName/stickers/id,修改/新增使用贴纸的id。
  • Assets/customStickerCategories.json/categoryName/stickers/previewImage,修改/新增使用贴纸的缩略图,只需将最后的一串数字改成id值即可。

3、多包名发布

  • 参考多包名发布

  • 一、文件构成
  • 接入准备
  • 七牛推流接入指南
  • 声网推流接入指南
  • 腾讯云直播接入指南
  • 即构推流接入指南
  • 设置美颜参数
  • FAQ
  • 在线技术支持
  • 专业售前售后团队
  • 版本定期更新
  • 全方位解决方案

商务合作

  • 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