最近更新时间:2024.01.19 12:00:39
首次发布时间:2022.10.19 11:39:13
本文为您介绍如何用 iOS 上传 SDK,以简单便捷的方式上传视频。
此文档适用于 TTSDK 1.32.2 及以上版本,其他版本请参考快速开始(历史版本)。
参考以下示例代码初始化上传 SDK:
说明
此步骤不会采集用户个人信息,也不会向抖音开放平台上报数据。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 初始化 TTSDK [self initTTSDK]; return YES; } - (void)initTTSDK { // 开启上传模块调试日志,建议 Debug 阶段保持开启,便于排查问题。 #if DEBUG [[BDUploadUtilTool sharedInstance] enableNativeLogFunc:YES]; #endif // 请登录视频点播控制台,获取 AppID // NSString *appId = @"you app id"; // 注意,如果需要集成 TTSDK 其他模块,请设置 licenseName。 // 如果没有,则 licenseName 参数可以移除。 TTSDKConfiguration *configuration = [TTSDKConfiguration defaultConfigurationWithAppID:<#appid#> licenseName:licenseName]; [TTSDKManager startWithConfiguration:configuration]; }
注意
需要注意 BDVideoUploaderClient
实例的生命周期,不能设置为局部变量。如果设置为局部变量,当变量离开作用域后,实例会被销毁从而导致上传失败。
#import <TTSDK/BDFileUploaderHeader.h> - (void)initVideoUploader { // 1. 初始化视频上传对象,需要传入视频文件路径 // NSString *filePath = @"path/to/upload/file"; BDVideoUploaderClient *videoUploadClient = [[BDVideoUploaderClient alloc] initWithFilePath:<#filepath#>]; // 2. 设置鉴权。鉴权参数需要接入方向自己的 Server 端获取 //NSDictionary *authParameter = @{ // BDFileUploadAccessKey: accessKeyId, // BDFileUploadSecretKey: secretKeyId, // BDFileUploadSessionToken: sessionToken, // 空间相关说明请参考空间管理 // BDFileUploadSpace: uploadSpace, //}; [videoUploadClient setAuthorizationParameter:<#authparameter#>]; // 3. 按照接入方需要,配置需要自定义设置的参数 // 此方法可以在上传开始之前调用多次, // SDK 将根据传入的 dictonary 对上传实例进行增量或覆盖 [videoUploadClient setUploadConfig:@{ // 指定文件分片大小 BDFileUploadSliceSize:@(512 * 1024), }]; // 4. 设置上传实例的 delegate // @see {BDVideoUploadClientDelegate.h} videoUploadClient.delegate = self; // 5. 全局持有上传对象 self.videoUploadClient = videoUploadClient; }
说明
空间相关说明请参考空间管理。
上传完成后,文件在云端的存储路径形式如下所示。
StoreUri = {{BucketName}}/{{FilePrefix}}{{FileTitle}}{{FileExtension}}
其中BucketName
不需要接入方设置,其他几个参数说明如下表示。
参数 | 含义 | 是否必选 | 描述 |
---|---|---|---|
FilePrefix | 文件前缀 | 否 | 路径字符串,支持多级路径(如 path/to/foo/bar/) |
FileTitle | 文件标题 | 否 | 如果不手动设置,SDK 会自动生成 32 位字符串作为文件标题 |
FileExtension | 文件后缀 | 是 | 最终完整路径中必须包含 FileExtension,否则会上传失败。 |
例如:ASmapleBucketName/path/to/foo/bar/test.mp4
,则对应关系如下所示。
参数(示例) | 含义 | 描述 |
---|---|---|
ASmapleBucketName/ | 存储桶名称 | 接入方不用设置。 |
path/to/foo/bar/ | 文件前缀 | 可选。 |
test | 文件标题 | 可选;如果不设置,SDK 会自动生成一个 32 位字符串作为文件名。 |
.mp4 | 文件后缀 | 必传;不传报错。 |
设置云端存储路径,支持 2 种方式。您可根据自身需求,任选其一。
注意
设置 FileName 时,必须带有文件后缀,如 .mp4、.mp3 等。
[self.videoUploadClient setFileName:<#filename#>];
上传视频支持设置分类 ID,示例代码如下:
- (void)setClassificationId:(NSInteger)classificationId;
分类 ID 的参数说明如下:
参数 | 类型 | 描述 |
---|---|---|
ClassificationId | int | 分类 ID,可在控制台系统设置 > 分类管理中查看或通过媒资分类OpenAPI 查询,素材不支持分类。 |
上传控制支持的操作有开始上传、暂停上传和终止上传。
[self.videoUploadClient start];
注意
上传完成后,请调用 close 方法终止上传,否则会造成内存泄漏。
您可以设置回调获取视频上传结果和上传进度。代码示例如下所示。
#pragma mark - BDVideoUploadClientDelegate /// 视频上传完成回调 /// @param uploadClient 视频上传实例 /// @param videoInfo 视频上传完成后回调的信息 /// @param error 如果上传失败,则会返回 error - (void)videoUpload:(nonnull BDVideoUploaderClient*)uploadClient didFinish:(nullable BDVideoUploadInfo *)videoInfo error:(nullable NSError *)error { if (!error) { // 视频上传成功 } else { // 视频上传失败 // 可以根据 BDVideoUploadInfo 的详细信息,判断上传错误的具体原因。详见下文说明 NSLog } // 释放上传对象 [uploadClient close]; } /// 视频上传进度回调 /// @param uploadClient 视频上传对象 /// @param progress 视频上传的进度 - (void)videoUpload:(nonnull BDVideoUploaderClient*)uploadClient progressDidUpdate:(NSInteger)progress { // NSLog(@"progress update:%ld", progress); }
如果上传失败,则会返回 error
。SDK 错误码和网关错误码在 NSError
中存储的位置不同。具体位置如下所示。
- (void)videoUpload:(nonnull BDVideoUploaderClient*)uploadClient didFinish:(nullable BDVideoUploadInfo *)videoInfo error:(nullable NSError *)error { if (!error) { // 上传成功 } else { // 上传失败 // 获取 SDK 错误码 NSLog(@"SDK error code is: %ld", error.code); // 如果存在网关错误码,网关错误码会包含在 NSError.userInfo 中,可以根据需要进行解析 if ([error.userInfo isKindOfClass:NSDictionary.class]) { NSLog(@"error message is: %@", error.userInfo[@"message"]); } } // 释放上传对象 [uploadClient close]; }
具体错误码含义和建议处理方式请见上传 SDK 错误码。
参数 | 说明 |
---|---|
vid | 视频 Vid |
oid | TOS 存储 key |
md5 | 视频文件的 MD5 |
videoMetaInfo | 媒资信息,例如:码率、格式、长度、宽高等, 代码示例如下所示。
说明 媒资信息的详情请参见确认上传中的 SourceInfo 参数。 |
encryptionInfo | 为空,目前不使用。 |
coverURI | 封面 Uri |
callbackArgs | 透传服务端回调信息 |