此文档仅适用于 1.32.2.2 之前的版本。如果您使用的是 1.32.2.2 或之后的版本,请查看视频上传。
$ brew install git-lfs $ git lfs install
$ git lfs clone https://github.com/volcengine/TTSDK-iOS.git
$ cd path/to/TTSDKDemo $ pod install --repo-update $ open TTSDKDemo.xcworkspace
在您工程的 Podfile 中添加依赖,并执行 pod install 即可。如下所示:
source 'https://github.com/volcengine/volcengine-specs.git' pod 'TTSDK', 'x.x.x.x', :subspecs => [ 'Uploader', # 上传 //推荐使用最新稳定版,具体版本号请参考下方的ChangeLog ]
这里需要明确指定 subspecs => Uploader。
本模块介绍如何使用上传 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 个步骤:
初始化操作很轻量,建议放到 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];//设置配置信息
#import <TTSDK/TTVideoUploadClientTop.h> TTVideoUploadClientTop* clientTop = [[TTVideoUploadClientTop alloc] initWithFilePath:filePath]; //初始化上传对象,需传入视频的上传路径
注意
需要关注下 TTVideoUploadClientTop 实例的生命周期,如设置为局部变量时,会导致 TTVideoUploadClientTop 实例析构销毁时,无法继续进行视频上传操作。
此处获取的鉴权参数 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以服务端返回为准
参数 | 类型 | 释义 |
---|---|---|
accessKey | NSString | 服务端鉴权参数:临时 ak |
secretKey | NSString | 服务端鉴权参数:临时 sk |
sessionToken | NSString | 服务端鉴权参数:token |
expirationTime | NSDate | 服务端鉴权参数:过期时间 |
regionName | NSString | 地区 |
mSpace | char | 空间 |
mObjectType | char | 上传的文件类型,赋值为"video",表示上传类型为视频 |
mSeverParameter | char | 额外的要带上的上传参数 |
mFileRetryCount | int | 文件重试次数 |
mSocketNum | int | socket 数量 |
mHost | char | 网关域名 |
说明
空间相关说明请参考空间管理。
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]//暂停上传
[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 | 视频 vid | NSString |
storeUri | 资源 id,视频的 uri | NSString |
callbackArgs | 希望透传的参数 | NSString |
sourceInfo | 返回的视频元信息 | NSDictionary |
coverURI | 封面 uri | NSString |
encryptionInfo | 返回的加密信息 | NSDictionary (当 setProcessActionType 选择 TTVideoUploadActionTypeEncrypt 时才会返回) |
其中 sourceInfo 包含的源视频元信息:
成员变量 | 含义 | 说明 |
---|---|---|
Bitrate | 码率 | 无 |
Duration | 时长 | 无 |
FileType | 文件类型 | 无 |
Format | 视频格式 | 无 |
Height | 视频的高 | 无 |
Width | 视频宽 | 无 |
Md5 | Md5 | 无 |
Size | 视频文件大小 | 无 |
StoreUri | 存储视频的 uri | 无 |
其中 encryptionInfo 包含的信息:
成员变量 | 含义 | 说明 |
---|---|---|
Algorithm | 加密算法 | 无 |
SecretKey | 加密所用的 key | 无 |
SourceMd5 | 源文件 Md5 | 无 |
Uri | 源文件 uri | 无 |
Version | 版本号 | 无 |
Extra | 加密信息 | 可转换为 map 处理 |
其中 Extra 包含的详细信息:
当您遇到上传的问题时,可以通过质量埋点上报的方式,提供相应日志,推进问题快速处理。
目前可在视频上传完成、视频上传失败、用户停止视频上传(调用函数 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 日志上报
在快速开始
章节的第四个步骤TTVideoUploaderTop设置上传数据源及其他配置
中增加相应的配置选项,即可接入该功能。
注意
视频上传在不设置 ProcessActionSnapshot 以及截图时间的情况下,默认会截取非黑帧的第一帧为封面。
NSDictionary *params = @{@"TTFileUploadCoverTime":@1.0f //设置截封面的时间,不设置默认为第一个非黑帧 }; [clientTop setProcessActionType: TTVideoUploadActionTypeSnapshot parameter: params]; //截图 非必选