短视频上传VODUploadSVideoClient
主要针对需要同时上传封面图片+视频的场景,旨在简化用户的接口调用,内部是在VODUploadClient
的基础上封装实现的。短视频上传只支持STS方式上传,要想通过上传地址加凭证方式上传短视频请使用VODUploadClient
分别上传封面图片+视频。
通过STS方式,客户端需要向AppServer发送请求,AppServer向阿里云STS服务请求临时STS凭证。请求成功将返回STS凭证,AppServer需要将结果返回给客户端。
首先,声明VODUploadSVideoClient
属性,注意不能是局部变量。
@property (nonatomic, strong) VODUploadSVideoClient *client;
初始化并设置代理回调。
self.client = [[VODUploadSVideoClient alloc] init];
self.client.delegate = self;
从初始化代码片段中可以看到,需要设置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;
短视频上传不支持上传列表,每次上传短视频只需调用上传接口:
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];
从示例代码可以看到,调用上传方法需要传入待上传的视频加封面路径,同时还有VodSVideoInfo
和第一步请求获取的STS凭证
注意:支持的文件大小<=4G。
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;
每上传一个分片,会触发uploadProgressWithUploadedSize: totalSize:
回调,回调参数包括已上传文件大小uploadedSize
和总文件大小totalSize
。
上传成功时,会触发uploadSuccessWithResult:
回调。回调包含上传结果VodSVideoUploadResult
,VodSVideoUploadResult
包含以下属性:
@property (nonatomic, copy) NSString* videoId;
@property (nonatomic, copy) NSString* imageUrl;
视频上传成功后会返回videoId作为视频id,拿到videoId之后需要获取播放地址进行播放。相关文档可以参考获取播放地址播放。
图片上完成后会返回imageUrl,开启URL鉴权后imageUrl会有过期时间。相关配置可以参考URL鉴权。
上传失败时,会触发uploadFailedWithCode: message:
回调。在该回调方法中,我们可以通过code
和message
查看具体原因,页面上给予用户提示。错误码参见:点播错误码和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;
在文档使用中是否遇到以下问题
更多建议
匿名提交