通过阅读本文,您可以了解短视频上传的方式和基本流程。

操作步骤

  1. 请求STS。更多信息,请参见使用STS方式上传
    说明 短视频上传只支持STS方式上传,要想通过上传地址和凭证方式进行短视频上传请使用VODUploadClient分别上传封面图片和视频。
  2. 初始化上传实例。
    1. 声明VODUploadSVideoClient属性,不能是局部变量。
      @property (nonatomic, strong) VODUploadSVideoClient *client;
    2. 初始化并设置代理回调。
      self.client = [[VODUploadSVideoClient alloc] init];
      self.client.delegate = self;
  3. 回调设置。

    设置delegate代理,代理需要实现VODUploadSVideoClientDelegate协议,包含以下代理方法:

    /**
     上传成功回调
     @param result 上传结果
     */
    - (void)uploadSuccessWithResult:(VodSVideoUploadResult *)result;
    /**
     上传失败回调
     @param code 错误码
     @param message 错误描述
     */
    - (void)uploadFailedWithCode:(NSString *)code message:(NSString *)message;
    /**
     上传进度回调
     @param uploadedSize 已上传文件大小
     @param totalSize 文件总大小
     */
    - (void)uploadProgressWithUploadedSize:(long long)uploadedSize totalSize:(long long)totalSize;
    /**
     token过期回调
     */
    - (void)uploadTokenExpired;
    /**
     上传开始重试回调
     */
    - (void)uploadRetry;
    /**
     上传结束重试,继续上传回调
     */
    - (void)uploadRetryResume;
  4. 启动上传。

    短视频上传不支持上传列表,上传短视频需调用上传接口。调用上传方法需要传入视频和封面路径、VodSVideoInfo和请求获取的STS凭证。

    NSString *videoPath = [[NSBundle mainBundle] pathForResource:@"svideo" ofType:@"mp4"];
        NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"cover" ofType:@"png"];
        VodSVideoInfo *info = [VodSVideoInfo new];
        info.title = @"short video";
        info.desc = @"desc";
        info.cateId = @(10);
        info.tags = @"game";
        [self.client uploadWithVideoPath:videoPath imagePath:imagePath svideoInfo:info accessKeyId:self.keyId accessKeySecret:self.keySecret accessToken:self.token];
    说明 支持的文件不大于4 GB。

    VodSVideoInfo具体结构如下所示:

    //标题
    @property (nonatomic, copy) NSString* title;
    //标签
    @property (nonatomic, copy) NSString* tags;
    //描述
    @property (nonatomic, copy) NSString* desc;
    //分类ID
    @property (nonatomic, strong) NSNumber* cateId;

    上传控制方法如下所示:

    • 暂停上传
      - (void)pause;
    • 恢复上传
      - (BOOL)resume;
    • 取消上传
      - (BOOL)cancel;
  5. 回调处理。
    • 上传进度

      每上传一个分片,会触发uploadProgressWithUploadedSize: totalSize:回调,回调参数包括已上传文件大小uploadedSize和总文件大小totalSize

    • 上传成功

      上传成功时,会触发uploadSuccessWithResult:回调。回调包含上传结果VodSVideoUploadResultVodSVideoUploadResult包含以下属性:

      @property (nonatomic, copy) NSString* videoId;
      @property (nonatomic, copy) NSString* imageUrl;

      视频上传成功后会返回videoId作为视频id,拿到videoId之后需要获取播放地址进行播放。更多信息,请参见获取播放地址播放

      图片上完成后会返回imageUrl,开启URL鉴权后imageUrl会有过期时间。更多信息,请参见URL鉴权

    • 上传失败

      上传失败时,会触发uploadFailedWithCode: message:回调。在该回调方法中,可以通过codemessage查看具体原因,并在页面上提示。更多错误码信息,请参见错误码表OSS错误码

    • 凭证过期处理
      STS过期,会触发uploadTokenExpired回调。在该回调方法中,可以向AppServer重新请求新的STS凭证,并调用以下方法继续上传。
      - (void)refreshWithAccessKeyId:(NSString *)accessKeyId
                     accessKeySecret:(NSString *)accessKeySecret
                         accessToken:(NSString *)accessToken
                          expireTime:(NSString *)expireTime;
    • 超时处理

      上传超时,会触发uploadRetry回调并自动重试。在该回调方法中,可以在页面上给予提示或者调用cancel方法停止上传。此外,可以设置maxRetryCount属性,指定最大重试次数。超时重试可以继续上传时,会触发uploadRetryResume回调并恢复上传。

高级设置

VODUploadSVideoClient支持以下高级设置。

/**
 上传文件到服务端是否转码,默认值YES
 */
@property (nonatomic, assign) BOOL transcode;
/**
 最大超时重试次数,默认值INT_MAX
 */
@property (nonatomic, assign) uint32_t maxRetryCount;
/**
 超时时间
 */
@property (nonatomic, assign) NSTimeInterval timeoutIntervalForRequest;
/**
 缓存文件夹位置
 */
@property (nonatomic, copy) NSString * recordDirectoryPath;
/**
 是否记录上传进度(断点续传),默认值YES
 */
@property (nonatomic, assign) BOOL recordUploadProgress;
/**
 分片大小,默认值1024 * 1024
*/
@property (nonatomic, assign) NSInteger uploadPartSize;
/**
 vod region,默认值"cn-shanghai"
 */
@property (nonatomic, copy) NSString *region;