全部产品
云市场

短视频上传

更新时间:2018-12-19 15:32:28

简介

短视频上传VODUploadSVideoClient主要针对需要同时上传封面图片+视频的场景,旨在简化用户的接口调用,内部是在VODUploadClient的基础上封装实现的。短视频上传只支持STS方式上传,要想通过上传地址加凭证方式上传短视频请使用VODUploadClient分别上传封面图片+视频。

整体步骤

  1. 请求STS,相关概念请参见相关文档。
  2. 初始化上传实例
  3. 回调设置,所有的上传状态包括进度,上传成功,上传失败,凭证过期都在这里进行处理。
  4. 启动上传
  5. 回调处理

1. 请求STS

通过STS方式,客户端需要向AppServer发送请求,AppServer向阿里云STS服务请求临时STS凭证。请求成功将返回STS凭证,AppServer需要将结果返回给客户端。

2. 初始化

首先,声明VODUploadSVideoClient属性,注意不能是局部变量。

  1. @property (nonatomic, strong) VODUploadSVideoClient *client;

初始化并设置代理回调。

  1. self.client = [[VODUploadSVideoClient alloc] init];
  2. self.client.delegate = self;

3. 回调设置

从初始化代码片段中可以看到,需要设置delegate代理,代理需要实现VODUploadSVideoClientDelegate协议,包含以下代理方法:

  1. /**
  2. 上传成功回调
  3. @param result 上传结果
  4. */
  5. - (void)uploadSuccessWithResult:(VodSVideoUploadResult *)result;
  6. /**
  7. 上传失败回调
  8. @param code 错误码
  9. @param message 错误描述
  10. */
  11. - (void)uploadFailedWithCode:(NSString *)code message:(NSString *)message;
  12. /**
  13. 上传进度回调
  14. @param uploadedSize 已上传文件大小
  15. @param totalSize 文件总大小
  16. */
  17. - (void)uploadProgressWithUploadedSize:(long long)uploadedSize totalSize:(long long)totalSize;
  18. /**
  19. token过期回调
  20. */
  21. - (void)uploadTokenExpired;
  22. /**
  23. 上传开始重试回调
  24. */
  25. - (void)uploadRetry;
  26. /**
  27. 上传结束重试,继续上传回调
  28. */
  29. - (void)uploadRetryResume;

4. 启动上传

短视频上传不支持上传列表,每次上传短视频只需调用上传接口:

  1. NSString *videoPath = [[NSBundle mainBundle] pathForResource:@"svideo" ofType:@"mp4"];
  2. NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"cover" ofType:@"png"];
  3. VodSVideoInfo *info = [VodSVideoInfo new];
  4. info.title = @"short video";
  5. info.desc = @"desc";
  6. info.cateId = @(10);
  7. info.tags = @"game";
  8. [self.client uploadWithVideoPath:videoPath imagePath:imagePath svideoInfo:info accessKeyId:self.keyId accessKeySecret:self.keySecret accessToken:self.token];

从示例代码可以看到,调用上传方法需要传入待上传的视频加封面路径,同时还有VodSVideoInfo和第一步请求获取的STS凭证

注意:支持的文件大小<=4G。

VodSVideoInfo具体结构如下:

  1. //标题
  2. @property (nonatomic, copy) NSString* title;
  3. //标签
  4. @property (nonatomic, copy) NSString* tags;
  5. //描述
  6. @property (nonatomic, copy) NSString* desc;
  7. //分类id
  8. @property (nonatomic, strong) NSNumber* cateId;

其他上传控制方法,暂停上传:

  1. - (void)pause;

恢复上传:

  1. - (BOOL)resume;

取消上传:

  1. - (BOOL)cancel;

5. 回调处理

5.1 上传进度

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

5.2 上传成功

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

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

视频上传成功后会返回videoId作为视频id,拿到videoId之后需要获取播放地址进行播放。相关文档可以参考获取播放地址播放

图片上完成后会返回imageUrl,开启URL鉴权后imageUrl会有过期时间。相关配置可以参考URL鉴权

5.3 上传失败

上传失败时,会触发uploadFailedWithCode: message:回调。在该回调方法中,我们可以通过codemessage查看具体原因,页面上给予用户提示。错误码参见:点播错误码oss错误码

5.4 凭证过期处理

上传凭证和STS过期,会触发uploadTokenExpired回调。在该回调方法中,我们可以向AppServer重新请求新的STS凭证,并调用以下方法继续上传:

  1. - (void)refreshWithAccessKeyId:(NSString *)accessKeyId
  2. accessKeySecret:(NSString *)accessKeySecret
  3. accessToken:(NSString *)accessToken
  4. expireTime:(NSString *)expireTime;

5.5 超时处理

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

超时重试发现可以继续上传时,会触发uploadRetryResume回调并恢复上传。

高级设置

VODUploadSVideoClient支持以下高级设置:

  1. /**
  2. 上传文件到服务端是否转码,默认值YES
  3. */
  4. @property (nonatomic, assign) BOOL transcode;
  5. /**
  6. 最大超时重试次数,默认值INT_MAX
  7. */
  8. @property (nonatomic, assign) uint32_t maxRetryCount;
  9. /**
  10. 超时时间
  11. */
  12. @property (nonatomic, assign) NSTimeInterval timeoutIntervalForRequest;
  13. /**
  14. 缓存文件夹位置
  15. */
  16. @property (nonatomic, copy) NSString * recordDirectoryPath;
  17. /**
  18. 是否记录上传进度(断点续传),默认值YES
  19. */
  20. @property (nonatomic, assign) BOOL recordUploadProgress;
  21. /**
  22. 分片大小,默认值1024 * 1024
  23. */
  24. @property (nonatomic, assign) NSInteger uploadPartSize;
  25. /**
  26. vod region,默认值"cn-shanghai"
  27. */
  28. @property (nonatomic, copy) NSString *region;