更新时间:2023-02-01 09:33:02
云点播服务支持采用网宿云存储 Android版 上传SDK,用于嵌入到Android APP中,实现从移动手机端上传视频至云点播中。
详细见上传Token获取
!注意:Token必须使用云点播的接口获取,文件才能正常上传至云点播平台
初始化主要完成上传域名设置、分片上传并发数、响应超时时间、连接超时时间、重试次数。
com.chinanetcenter.wcs.android.Config.java
public static final String PUT_URL = "upload.cloudv.haplat.net";
FileUploader.setUploadUrl("upload.cloudv.haplat.net");
ClientConfig config = new ClientConfig();
// 设置分片上传并发数为10,不配置时默认值为5
config.setMaxConcurrentRequest(10);
FileUploader.setClientConfig(config);
import com.chinanetcenter.wcs.android.api.ParamsConf;
conf = new ParamsConf();
// 原始文件名称
conf.fileName = '<原始文件>';
// 通过表单参数设置文件保存到云存储的名称
conf.keyName = <fileKey>;
// 通过表单参数设置文件的mimeType
conf.mimeType = '<mimeType>';
FileUploader.setParams(conf);
块的大小,默认为4M,必须是4M的倍数,最大不能超过100M。 片的大小,默认为4M,必须是64K的倍数,最大不能超过块的大小。
FileUploader.setBlockConfigs(8, 512); //设置块大小为8M,片大小为512KB
/**
* 上传接口范例
*/
private void uploadFile(File srcFile) {
/**
* UPLOADER_TOKEN-上传凭证
* srcFile-本地待上传的文件
*/
FileUploader.upload(UPLOADER_TOKEN, srcFile, new FileUploaderListener() {
/** 上传成功回调 **/
@Override
public void onSuccess(int status, JSONObject responseJson) {
Log.d(TAG, "responseJson : " + responseJson.toString());
}
/** 上传失败回调 **/
@Override
public void onFailure(OperationMessage operationMessage) {
Log.e(TAG, "errorMessage : " + operationMessage.toString());
}
/** 上传进度回调 **/
@Override
public void onProgress(int bytesWritten, int totalSize) {
Log.d(TAG, String.format("Progress %d from %d (%s)", bytesWritten, totalSize, (totalSize > 0) ? ((float) bytesWritten / totalSize) * 100 : -1));
}
});
}
移动端上传大文件需要耗费较长时间,一旦在传输过程中出现异常,文件内容需全部重传,影响用户体验,为避免这个问题,引进分片上传机制。
分片上传机制是将一个大文件切分成多个自定义大小的块,然后将这些块并行上传,如果某个块上传失败,客户端只需要重新上传这个块即可。
注意:每个块的最大大小不能超过100M;最小不能小于4M,否则将会采用默认4M去切分。
private static final long DEFAULT_BLOCK_SIZE = 1 * 1024 * 1024;
/**
* context-应用当前的上下文
* uploadToken-上传Token
* ipaFile-需要上传的文件
* DEFAULT_BLOCK_SIZE-块大小
*/
FileUploader.sliceUpload(context, uploadToken, ipaFile, DEFAULT_BLOCK_SIZE, new SliceUploaderListener() {
/** 上传成功回调 **/
@Override
public void onSliceUploadSucceed(JSONObject jsonObject) {
Log.d("CNCLog", "slice upload succeeded.");
}
/** 上传失败回调 **/
@Override
public void onSliceUploadFailured(OperationMessage operationMessage) {
Log.d("CNCLog", "slice upload failured.");
}
/** 上传进度回调 **/
@Override
public void onProgress(long uploaded, long total) {
Log.d("CNCLog", String.format(Locale.CHINA, "uploaded : %s, total : %s", uploaded, total));
}
});