本文为您介绍如何使用 iOS 上传 SDK 以简单便捷的方式将视频上传至视频点播服务。
此文档适用于上传 SDK 1.32.2 及以上版本,其他版本请参考 iOS 视频上传 SDK(历史版本)。
参考以下示例代码初始化上传 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. 设置鉴权参数。您需要在应用服务端通过视频点播服务端 SDK 签发临时上传 Token,下发给客户端,再设置给 SDK。鉴权参数说明详见[客户端上传](https://www.volcengine.com/docs/4/3151) //NSDictionary *authParameter = @{ // BDFileUploadAccessKey: accessKeyId, // BDFileUploadSecretKey: secretKeyId, // BDFileUploadSessionToken: sessionToken, // 空间相关说明请参考[空间管理](https://www.volcengine.com/docs/4/65669) // 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}}
以下为一个完整的云端存储路径示例。
ASmapleBucketName/path/to/foo/bar/test.mp4
参数说明如下表所示。
参数 | 是否必选 | 说明 |
---|---|---|
BucketName | N/A | 存储桶名称,您无需设置。 |
FilePrefix | 否 | 文件前缀,路径字符串,支持多级路径,如 |
FileTitle | 否 | 文件名称。如您没有设置,SDK 会自动生成 32 位字符串作为文件名称。 |
FileExtension | 是 | 文件后缀。最终完整路径中必须包含 |
注意
具体的字符规则,请见文件命名通用字符规则。
您可参考以下示例代码设置云端存储路径。
// FileName = FilePrefix + FileTitle + FileExtension [self.videoUploadClient setFileName:<#filename#>];
调用 setClassificationId
方法传入分类 ID,从而对视频进行分类。您可在视频点播控制台指定空间内的分类管理页面创建分类并获取分类 ID,具体请见分类管理。示例代码如下:
- (void)setClassificationId:(NSInteger)classificationId;
注意
素材不支持分类。
上传控制支持的操作有开始上传、暂停上传和终止上传。
[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 的详细信息,判断上传错误的具体原因。详见 [BDVideoUploadInfo](https://www.volcengine.com/docs/4/147579#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 错误码。
调用 setSnapshot
设置视频自动抽帧时间点,单位为秒。设置成功后,上传 SDK 将根据您设置的固定时间点截取视频帧,作为视频的封面图。示例代码如下:
[self.videoUploadClient setSnapshot:<#CGFloat#>];
如想开启断点续传功能,您需在每次初始化上传对象后、开始上传之前,调用 setUploadConfig
并设置 BDFileUploadDiskResumeOption
。开启断点续传后,用户在您的应用中上传文件时,如果发生强制退出应用等情况导致上传中断,下次上传同一个文件时,上传 SDK 会自动获取断点,并从断点处继续上传,从而节省上传时间。
示例代码如下:
- (void)initVideoUploader { ...... [videoUploadClient setUploadConfig:@{ // 开启断点续传功能: // 1:开启。任务中断后,从断点处续传。 // 0:关闭。任务中断后,重新开始上传。 BDFileUploadDiskResumeOption: @(1), }]; ...... }
如果您的业务场景无需实时抽取 Meta,则可以使用全异步抽取 Meta 的能力,提升上传速度。您需要调用 setGetMetaMode
并将 mode
设为 BDVideoUploadGetMetaModeAsync
。示例代码如下:
- (void)setGetMetaMode:(BDVideoUploadGetMetaMode)mode;
上传 SDK 支持自定义上传配置。您可在开始上传前调用 setUploadConfig
方法进行配置。setUploadConfig
方法的原型如下:
- (void)setUploadConfig:(NSDictionary*)config;
其中 config dictionary 可选字段和取值类型说明如下表所示。
字段名 | 类型 | 说明 |
---|---|---|
BDFileUploadSliceSize | NSNumber(NSInteger) | 分片大小,单位为字节,默认值为 512 KB。 |
BDFileUploadSocketNum | NSNumber(NSInteger) | 分片上传时的并发连接数。 |
BDFileUploadTcpOpenTimeOutMilliSec | NSNumber(NSInteger) | 单次 TCP 建连超时时间,单位为毫秒, 默认值为 5000。 |
BDFileUploadMaxFailTimes | NSNumber(NSInteger) | 建立连接超时时间,单位为秒。 |
BDFileUploadRWTimeout | NSNumber(NSInteger) | 单个分片传输超时时间,单位为秒,默认值为 40。 |
BDFileUploadSliceRetryCount | NSNumber(NSInteger) | 单个分片上传可以重试的次数。 |
BDFileUploadFileRetryCount | NSNumber(NSInteger) | 文件级别的上传重试次数。 |
BDFileUploadTranTimeOutUnit | NSNumber(NSInteger) | 系统 socket 单次读写超时时间,单位为秒,默认值为 70。 |
BDFileUploadAliveMaxFailTime | NSNumber(NSInteger) | 复用连接的超时时间,单位为秒,默认值为 10。 |
BDFileUploadHttpsEnable | NSNumber(BDUploadHttpsOpen) | 是否开启 HTTPS。可根据上传阶段分步开启。 |
以 BDFileUploadSliceSize
为例,设置上传文件分片大小的示例代码如下:
[self.videoUploadClient setUploadConfig:@{ // 设置文件分片大小为 512 KB BDFileUploadSliceSize:@(512 * 1024), }];
调用 setRequestParameter
设置回调透传参数。该参数值会通过 FileUploadComplete 回调中的 CallbackArgs
参数返回给您的服务端。示例代码如下:
[self.uploader setRequestParameter:@[BDFileUploadCustomedParameter: ""]]
调用 setTemplateId
方法传入工作流 ID,从而触发媒体处理任务。您可在视频点播控制台指定空间内的工作流页面获取工作流 ID,具体详见工作流。
- (void)setTemplateId:(NSString *)templateId;
如果您具备日志回溯的能力,想要获取线上日志并分析问题,SDK 提供以下接口将 SDK 日志回调给接入方。
[[BDUploadUtilTool sharedInstance] setLogCallback:^(NSString *info, int level) { NSLog(@"custom_log:%@", info); }];
参数 | 说明 |
---|---|
vid | 视频 ID,即视频点播服务为音视频类型资源生成的 Vid。视频 Vid |
mid | 素材 ID,即视频点播服务为素材类型资源生成的 Mid。 |
oid | TOS 存储 key。 |
md5 | 视频文件的 MD5 值。 |
videoMetaInfo | 媒资信息,包含码率、格式、长度、宽高等。示例如下:
说明 媒资信息详情请参见确认上传中的 |
encryptionInfo | 为空,目前不使用。 |
coverURI | 封面 URI。 |
callbackArgs | 透传服务端回调信息。 |