短视频上传是指将文件从客户端上传至点播存储。通过短视频上传完成的视频,上传SDK会返回videoId
。在集成阿里云播放器的情况下,此ID可用作vid+playauth播放方式的参数设置,免去单独获取播放地址和凭证的麻烦。本文介绍如何使用Android端上传SDK完成短视频上传。
背景信息
在Android端上,短视频上传通过上传实例(VODSVideoUploadClient
)完成,支持同时上传视频和封面图片。短视频上传只支持STS方式上传。要想通过上传地址和凭证方式进行视频文件上传请使用文件上传(上传实例VODUploadClient
)分别上传封面图片和视频。
上传文件
- 获取STS临时Token。操作指引请参见获取STS临时Token。
- 声明
VODSVideoUploadClient
属性,不能是局部变量。//初始化短视频上传对象
VODSVideoUploadClient vodsVideoUploadClient = new VODSVideoUploadClientImpl(this.getApplicationContext());
vodsVideoUploadClient.init();
- 构建上传参数。
//构建上传参数
//参数请确保存在,如不存在SDK内部将会直接将错误throw Exception
//文件路径保证存在之外因为Android 6.0之后需要动态获取权限,请开发者自行实现获取"文件读写权限"
VodHttpClientConfig vodHttpClientConfig = new VodHttpClientConfig.Builder()
.setMaxRetryCount(2)//重试次数
.setConnectionTimeout(15 * 1000)//连接超时
.setSocketTimeout(15 * 1000)//socket超时
.build();
//构建短视频VideoInfo,常见的描述、标题、详情都可以设置
SvideoInfo svideoInfo = new SvideoInfo();
svideoInfo.setTitle(new File(videoPath).getName());//标题
svideoInfo.setDesc("");//文件详情
svideoInfo.setCateId(1);//分类ID
//构建点播上传参数(重要)
VodSessionCreateInfo vodSessionCreateInfo =new VodSessionCreateInfo.Builder()
.setImagePath(imagePath)//图片地址
.setVideoPath(videoPath)//视频地址
.setAccessKeyId(accessKeyId)//临时accessKeyId
.setAccessKeySecret(accessKeySecret)//临时accessKeySecret
.setSecurityToken(securityToken)//STS临时Token
.setExpriedTime(expriedTime)//STStoken过期时间
.setRequestID(requestID)//requestID,开发者可以传将获取STS返回的requestID设置也可以不设
.setIsTranscode(true)//是否转码,如开启转码请AppSever务必监听服务端转码成功的通知
.setSvideoInfo(svideoInfo)//短视频信息
.setVodHttpClientConfig(vodHttpClientConfig)//网络参数
.build();
- 开始上传并设置回调。
启动上传前需要实现VODSVideoUploadCallback
回调。
vodsVideoUploadClient.uploadWithVideoAndImg(vodSessionCreateInfo, new VODSVideoUploadCallback() {
@Override
public void onUploadSucceed(String videoId, String imageUrl) {
//上传成功返回视频ID和图片URL
Log.d(TAG,"onUploadSucceed"+ "videoId:"+ videoId + "imageUrl" + imageUrl);
}
@Override
public void onUploadFailed(String code, String message) {
//上传失败返回错误码和message,错误码有详细的错误信息请开发者仔细阅读
Log.d(TAG,"onUploadFailed" + "code" + code + "message" + message);
}
@Override
public void onUploadProgress(long uploadedSize, long totalSize) {
//上传的进度回调,非UI线程
Log.d(TAG,"onUploadProgress" + uploadedSize * 100 / totalSize);
progress = uploadedSize * 100 / totalSize;
handler.sendEmptyMessage(0);
}
@Override
public void onSTSTokenExpried() {
Log.d(TAG,"onSTSTokenExpried");
//STS token过期之后刷新STStoken,如正在上传将会断点续传
vodsVideoUploadClient.refreshSTSToken(accessKeyId,accessKeySecret,securityToken,expriedTime);
}
@Override
public void onUploadRetry(String code, String message) {
//上传重试的提醒
Log.d(TAG,"onUploadRetry" + "code" + code + "message" + message);
}
@Override
public void onUploadRetryResume() {
//上传重试成功的回调,告知用户重试成功
Log.d(TAG,"onUploadRetryResume");
}
});
上传控制
上传实例(VODSVideoUploadClient
)支持的上传控制如下:
- 暂停上传。
//需要保证跟resume成对出现
vodsVideoUploadClient.pause();
- 恢复上传。
//需要保证跟pause成对出现
vodsVideoUploadClient.resume();
- 取消上传。
//取消上传之后,上传流程结束,不能再调用resume恢复
vodsVideoUploadClient.cancel();
回调处理
- 上传进度
每上传一个分片,会触发onUploadProgress
回调,回调参数包括已上传文件大小uploadedSize
和总文件大小totalSize
。
- 上传成功
上传成功时,会触发onUploadSucceed
回调。回调包含上传结果的videoId
和imageUrl
属性。
说明
- 视频上传成功后会返回videoId作为视频ID,拿到videoId之后可集成阿里云播放器,使用vid+playauth的方式播放。更多信息,请参见播放器SDK。
- 图片上完成后会返回imageUrl,开启URL鉴权后imageUrl会有过期时间。更多信息,请参见URL鉴权。
- 上传失败
上传失败时,会触发onUploadFailed
回调。在该回调方法中,可以通过code
和message
查看具体原因,并在页面上提示。更多错误码信息,请参见错误码表和OSS错误码。
- 凭证过期处理
STS过期,会触发
onSTSTokenExpried
回调。在该回调方法中,可以向AppServer重新请求新的STS凭证,并调用以下方法继续上传。
refreshSTSToken(accessKeyId,accessKeySecret,securityToken,expriedTime);
- 超时处理
上传超时,会触发uploadRetry
回调并自动重试。在该回调方法中,可以在页面上给予提示或者调用cancel
方法停止上传。此外,可以设置maxRetryCount
属性,指定最大重试次数。超时重试可以继续上传时,会触发uploadRetryResume
回调并恢复上传。