You need to enable JavaScript to run this app.
导航

iOS 视频上传 SDK(历史版本)

最近更新时间2023.10.27 16:27:03

首次发布时间2021.02.23 10:42:36

适用版本

此文档仅适用于 1.32.2.2 之前的版本。如果您使用的是 1.32.2.2 或之后的版本,请查看视频上传

集成准备

环境要求

  • Xcode 9.0 或以上版本。
  • 支持 iOS 8.0 或以上版本的 iOS 设备。

TTSDK 运行 Demo

  1. Demo 工程中包含了大文件,并通过 git-lfs 管理。如果您当前没有安装 git-lfs,需先进行 git-lfs 安装。
$ brew install git-lfs
$ git lfs install
  1. 将 Demo 工程拉取到本地。
$ git lfs clone https://github.com/volcengine/TTSDK-iOS.git
  1. 切换至 Demo 目录,执行 pod install,并打开 Demo。
$ cd path/to/TTSDKDemo
$ pod install --repo-update
$ open TTSDKDemo.xcworkspace

添加 Podfile 依赖

在您工程的 Podfile 中添加依赖,并执行 pod install 即可。如下所示:

source 'https://github.com/volcengine/volcengine-specs.git'

    pod 'TTSDK', 'x.x.x.x', :subspecs => [
      'Uploader',   # 上传 //推荐使用最新稳定版,具体版本号请参考下方的ChangeLog
    ]

这里需要明确指定 subspecs => Uploader。

最新版本 SDK 获取

  • 最新ttsdk_version 获取:详见 ChangeLog

快速开始

本模块介绍如何使用上传 SDK 以最快捷的方式进行视频上传。请在完成集成准备后,再进行该步骤。

您可直接通过下述 Demo,快速实现视频上传。

详细划分为 4 个步骤,也在本章节对 4 个步骤进行了解释与说明。

视频上传 Demo

// 在调用上传之前建议先配置基本信息
    #import <TTSDK/TTVideoUploadClientTop.h>
    #import <TTSDK/TTFUConstDefination.h>
    #import <TTSDK/TTVideoUploadEventManager.h>

    // 配置基本信息  建议早配置
    NSDictionary *appInfo = @{
                              TTVideoEngineAID : @(12345),  //appid
                              TTVideoEngineAppName : @"test_appName",// appName
                              TTVideoEngineChannel : @"test_channel",  //渠道
                              TTVideoEngineUserId  : @"user_id",  //user_id
                             };                           
    [TTVideoUploadClientTop configureAppInfo:appInfo];//设置配置信息 


    - (void)initVideoUploader{
      TTVideoUploadClientTop* clientTop = [[TTVideoUploadClientTop alloc] initWithFilePath:filePath]; //初始化上传对象,需传入视频的上传路径                                 
      
      NSMutableDictionary* jsonObject;
      NSError *jsonError = nil;
      jsonObject = [NSJSONSerialization JSONObjectWithData:authToken options:nil error:&jsonError];    //authToken为鉴权串,为服务端后台的签名sdk生成。向服务端请求获取。
      NSDictionary* result = jsonObject[@"result"];   //解析authToken,是否有这层Json以服务端返回为准
      NSDictionary* authParameter = @{
                                      TTFileUploadAccessKey:result[@"AccessKeyID"]:@"",  //进一步解析出需要的签名信息
                                      TTFileUploadSecretKey:result[@"SecretAccessKey"]?:@"",
                                      TTFileUploadSessionToken:result[@"SessionToken"]?:@"",
                                      TTFileUploadExpiredTime:result[@"ExpiredTime"]:@"",
                                      TTFileUploadRegionName:@"cn-north-1"       // 根据实际地区填写
                                      };        
      [clientTop setAuthorizationParameter:authParameter]; 
       
      NSDictionary* requestParameter = @{
                                         TTFileUploadFileTypeStr:@"video", //表示上传类型为视频
                                         TTFileUploadSpace:@"xxx",  // 参数"空间",必需参数。   
                                         }; 
      [clientTop setRequestParameter:requestParameter];
      
      NSDictionary* config = @{
                               TTFileUploadFileRetryCount:@1,  //文件重试次数
                               TTFileUploadSocketNum:@1,     //socket数量
                               TTFileUploadTraceId:@"asdf"   //traceId  排查日志用
                               };
      [clientTop setUploadConfig:config];
       
      NSString* hostName = @"vod.volcengineapi.com";  
      [clientTop setVideoHostName:hostName];   //设置网关域名
      
      [clientTop setSeverParameter:@"key1=value1&key2=value2"]; //希望透传的参数
       
      clientTop.delegate = self;    //设置delegate,用来接收上传的回调  
     }

对于简单使用场景,使用上传 SDK 完成文件(视频)上传,需要以下 4 个步骤:

  • 初始化上传 SDK 环境;
  • 创建视频上传对象 TTVideoUploadClientTop;
  • 获取鉴权 authToken;
  • TTVideoUploadClientTop 实例设置上传数据源及其他配置。
  1. 初始化上传 SDK 环境

初始化操作很轻量,建议放到 appDelegate didFinishLaunchingWithOptions中执行保障初始化顺序。

需要的参数列举如下:

参数
类型
释义
TTVideoEngineAID
int
App id
TTVideoEngineAppName
String
App 英文名
TTVideoEngineChannel
String
渠道
TTVideoEngineUserId
String
user_id
// 配置基本信息  建议早配置
NSDictionary *appInfo = @{
                          TTVideoEngineAID : @(12345),  //appid
                          TTVideoEngineAppName : @"test_appName",// appName
                          TTVideoEngineChannel : @"test_channel",  //渠道
                          TTVideoEngineUserId  : @"user_id",  //user_id
                         };                           
[TTVideoUploadClientTop configureAppInfo:appInfo];//设置配置信息 

  1. 创建视频上传对象 TTVideoUploadClientTop
#import <TTSDK/TTVideoUploadClientTop.h>

    TTVideoUploadClientTop* clientTop = [[TTVideoUploadClientTop alloc] initWithFilePath:filePath]; //初始化上传对象,需传入视频的上传路径

注意

需要关注下 TTVideoUploadClientTop 实例的生命周期,如设置为局部变量时,会导致 TTVideoUploadClientTop 实例析构销毁时,无法继续进行视频上传操作。

  1. 获取鉴权 authToken

此处获取的鉴权参数 authToken,用于第四步进行上传的鉴权配置。

ex:
    JSONObject responseJson 如下:
    {
        "result":{
            "AccessKeyID":"XXXXXX",
            "SecretAccessKey":"XXXXXX",
            "SessionToken":"XXXXXX",
            "ExpiredTime":"XXXXXX",
            "CurrentTime":"XXXXXX"
        }
    }

    NSMutableDictionary* jsonObject;
    NSError *jsonError = nil;
    jsonObject = [NSJSONSerialization JSONObjectWithData:authToken options:nil error:&jsonError];    //authToken为鉴权串,为服务端后台的签名sdk生成。向服务端请求获取。
    NSDictionary* result = jsonObject[@"result"];   //解析authToken,是否有这层Json以服务端返回为准
  1. TTVideoUploadClientTop 实例设置上传数据源及其他配置。
参数
类型
释义
accessKey
NSString服务端鉴权参数:临时 ak
secretKey
NSString服务端鉴权参数:临时 sk
sessionToken
NSString服务端鉴权参数:token
expirationTime
NSDate服务端鉴权参数:过期时间
regionNameNSString地区
mSpacechar空间
mObjectTypechar上传的文件类型,赋值为"video",表示上传类型为视频
mSeverParameterchar额外的要带上的上传参数
mFileRetryCountint文件重试次数
mSocketNumintsocket 数量
mHostchar网关域名

说明

空间相关说明请参考空间管理

NSMutableDictionary* jsonObject;
NSError *jsonError = nil;
jsonObject = [NSJSONSerialization JSONObjectWithData:authToken options:nil error:&jsonError];    //authToken为鉴权串,为服务端后台的签名sdk生成。向服务端请求获取。
NSDictionary* result = jsonObject[@"result"];   //解析authToken,是否有这层Json以服务端返回为准
  
NSDictionary* authParameter = @{
                                  TTFileUploadAccessKey:result[@"AccessKeyID"]:@"",  //进一步解析出需要的签名信息
                                  TTFileUploadSecretKey:result[@"SecretAccessKey"]?:@"",
                                  TTFileUploadSessionToken:result[@"SessionToken"]?:@"",
                                  TTFileUploadExpiredTime:result[@"ExpiredTime"]:@"",
                                  TTFileUploadRegionName:@"cn-north-1"       // 根据实际地区填写
                                  };        
[clientTop setAuthorizationParameter:authParameter]; 
   
NSDictionary* requestParameter = @{
                                   TTFileUploadFileTypeStr:@"video", //表示上传类型为视频
                                   TTFileUploadSpace:@"xxx",  // 参数"空间",必需参数。   
                                   }; 
[clientTop setRequestParameter:requestParameter];
  
NSDictionary* config = @{
                         TTFileUploadFileRetryCount:@1,  //文件重试次数
                         TTFileUploadSocketNum:@1,     //socket数量
                         TTFileUploadTraceId:@"asdf"   //traceId  排查日志用
                         };
[clientTop setUploadConfig:config];
   
NSString* hostName = @"vod.volcengineapi.com";  
[clientTop setVideoHostName:hostName];   //设置网关域名
  
[clientTop setSeverParameter:@"key1=value1&key2=value2"]; //希望透传的参数

基础功能接入

快速开始章节中,我们完成 TTVideoUploadClientTop 实例的创建,本章节介绍如何使用 TTVideoUploadClientTop 实例进行上传。

  • 开始上传
[clientTop start]//开始上传
  • 暂停上传
[clientTop stop]//暂停上传
  • 释放 TTVideoUploaderTop 实例
[clientTop close]//停止上传并释放TTVideoUploaderTop实例
  • 上传信息获取
//上传完成会执行回调 1、上传成功,err为空且videoInfo不为空。videoInfo中有返回的视频相关信息,如下所示
    //                2、上传失败,err不为空且videoInfo为空。失败原因分析需要用到下面的质量监控日志分析
    - (void)uploadDidFinish:(nullable TTVideoUploadInfoTop *)videoInfo error:(nullable NSError *)error;

    //progress表示上传进度
    - (void)uploadProgressDidUpdate:(NSInteger)progress;

TTVideoUploadInfoTop 结构

成员变量含义说明
vid视频 vidNSString
storeUri资源 id,视频的 uriNSString
callbackArgs希望透传的参数NSString
sourceInfo返回的视频元信息NSDictionary
coverURI封面 uriNSString
encryptionInfo返回的加密信息NSDictionary
(当 setProcessActionType 选择 TTVideoUploadActionTypeEncrypt 时才会返回)

其中 sourceInfo 包含的源视频元信息:

成员变量含义说明
Bitrate码率
Duration时长
FileType文件类型
Format视频格式
Height视频的高
Width视频宽
Md5Md5
Size视频文件大小
StoreUri存储视频的 uri

其中 encryptionInfo 包含的信息:

成员变量含义说明
Algorithm加密算法
SecretKey加密所用的 key
SourceMd5源文件 Md5
Uri源文件 uri
Version版本号
Extra加密信息可转换为 map 处理

其中 Extra 包含的详细信息:

image.png

  • 质量埋点获取

当您遇到上传的问题时,可以通过质量埋点上报的方式,提供相应日志,推进问题快速处理。

目前可在视频上传完成、视频上传失败、用户停止视频上传(调用函数 stop())这三个时机进行质量埋点上报。

说明

建议客户针对具体场景和问题,在相应时机下提供埋点日志。

//1、可在上传完成后或者调用stop后获取 使用示例  
    NSArray* logArrary = [[TTVideoUploadEventManager sharedManager] popAllEvents]; //即可获取日志信息


    //2、也可以实现下面的回调,在event日志更新时即可操作,非必需实现 
    //实现方法
    - (void)eventManagerDidUpdate:(TTVideoUploadEventManager *)eventManager {
         NSArray *dics = [eventManager popAllEvents];
         for (NSDictionary *dict in dics) {
                NSMutableDictionary *tmpDict = [NSMutableDictionary dictionaryWithDictionary:dict];
                [tmpDict setValue:@(uniqueKey) forKey:@"log_id"];   //此上报需要三方sdk 如applog等
                [BDTrackerProtocol trackLogDataEvent:tmpDict];   //此上报需要三方sdk 如applog等
            }
        }
    [TTVideoUploadEventManager sharedManager].delegate =  self;  //注册回调
  • AppLog 日志上报

    • 上传 SDK 对日志上报的三方库 applog 的接口调用为反射调用。工程接入了 applog,上传 SDK 即可自动上报日志。没有接入 applog,需要您拿到质量监控的日志自行处理。上传 SDK 基于 applog 3.3.9 版本的接口开发,目前已验证适配版本 3.3.9、5.3.0。
    • 如果之前已经接入了 applog,直接接入上传 SDK 即可,若是上述 applog 版本则可兼容,对于其他版本的 applog 接口是否兼容,需要实际验证。

高级功能接入

视频抽帧作为封面

  • 进行视频上传时,可设置视频截图的时间点,将该时间点的视频截图作为上传视频的封面。

快速开始章节的第四个步骤TTVideoUploaderTop设置上传数据源及其他配置中增加相应的配置选项,即可接入该功能。

注意

视频上传在不设置 ProcessActionSnapshot 以及截图时间的情况下,默认会截取非黑帧的第一帧为封面。

NSDictionary *params = @{@"TTFileUploadCoverTime":@1.0f   //设置截封面的时间,不设置默认为第一个非黑帧
                            }; 
    [clientTop setProcessActionType: TTVideoUploadActionTypeSnapshot parameter: params]; //截图 非必选

增值服务接入

素材上传

iOS素材上传SDK