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

快速开始

最近更新时间2024.01.19 12:00:39

首次发布时间2022.10.19 11:39:13

本文为您介绍如何用 iOS 上传 SDK,以简单便捷的方式上传视频。

适用版本

此文档适用于 TTSDK 1.32.2 及以上版本,其他版本请参考快速开始(历史版本)

前提条件

  • 已完成上传 SDK 的集成准备
  • 获取鉴权参数。鉴权参数需要接入方向自己的 Server 端获取,获取的方式,请参见客户端上传

初始化 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. 设置鉴权。鉴权参数需要接入方向自己的 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`,组成方式为 FileName = FilePrefix + FileTitle + FileExtension

注意

设置 FileName 时,必须带有文件后缀,如 .mp4、.mp3 等。

[self.videoUploadClient setFileName:<#filename#>];

设置分类

上传视频支持设置分类 ID,示例代码如下:

- (void)setClassificationId:(NSInteger)classificationId;

分类 ID 的参数说明如下:

参数
类型描述
ClassificationIdint分类 ID,可在控制台系统设置 > 分类管理中查看或通过媒资分类OpenAPI 查询,素材不支持分类。

上传控制

上传控制支持的操作有开始上传、暂停上传和终止上传。

SDK 内部在执行此函数的时候,会新建线程,不会阻塞。实现开始上传的代码示例如下所示。
[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 错误码

BDVideoUploadInfo

参数说明
vid视频 Vid
oidTOS 存储 key
md5视频文件的 MD5

videoMetaInfo

媒资信息,例如:码率、格式、长度、宽高等, 代码示例如下所示。

{"Bitrate":463419,"Duration":39.726999999999997,"FileType":"video","Format":"MP4","Height":360,"Md5":"53f62abe3c29d0654b3405af7***7060","Size":2301285,"StoreUri":"tos-vod-cn-v-309be6ba73***b04/cd404e7bef654554b638422***7c0c40","Width":640}

说明

媒资信息的详情请参见确认上传中的 SourceInfo 参数。

encryptionInfo为空,目前不使用。
coverURI封面 Uri
callbackArgs透传服务端回调信息