快速开始
-
获取临时授权访问资质。
由于上传的视频需要保存至百度智能云对象存储(BOS)中,而 BOS 需要通过 STS(Security Token Service)机制实现第三方的临时授权访问。授权过程参见 STS临时授权访问。
用户从用户自己搭建的服务端获取到临时访问授权后,可以通过下列方法构造临时授权类:
String tempAk = "d0f8d0660ddd11e79872ab516edc6a21"; String tempSk = "4cb1cef66c5b4cff8b054813aadcef26"; String sessionToken = "MjUzZjQzNTY4OTE0NDRkNjg3N2E4YzJhZTc4YmU5ZDh8AAAAADgBAABWdIGtrK1YlGvOCiF/C4ufC3d0Z3JohK21wiXtoEaEOK4a2pk12xHGOpZkp7VIW3SdFI2ordNzDiK+As87R4kQboD2jdfUXbhUkrQ787QCfOUhdbXmR2qB3pYEsmI+++VlhrfFaKEXlDDcUCSTMZR0v0jn+Ko0uZRpqMhrPSPRtybh9SYqAVibmuBHSZyAa1qMCe9fBKEgfYb+7O+bGt2Y84kIvSEgHpBy8PdiaHEB3LBgO4Wml4UHpOR7EF/zS9cEmpSZlgfL3dbIhAZMtsTG"; DefaultBceSessionCredentials stsCredentials = new DefaultBceSessionCredentials( tempAk, tempSk, sessionToken);
注意: 示例中的 tempAk、tempSk 和 sessionToken 仅用于示例,实际使用时请从服务端获取临时授权认证,参考BOS。
-
构建 VOD 和 BOS 的客户端代理。
BceClientConfiguration vodConfig = new BceClientConfiguration(); vodConfig.withCredentials(stsCredentials); BosClientConfiguration bosConfig = new BosClientConfiguration(); bosConfig.setMaxConnections(15); // 替换设置最大连接数接口,设置全局最大并发任务数,默认为6 bosConfig.withCredentials(stsCredentials); vodClient = new VodClient(vodConfig); bosClient = new BosClient(bosConfig);
除了最大连接数之外,您还可以通过
BceClientConfiguration
设置其他接口,比如连接的超时时间等。 -
选择上传文件
通过自定义的文件选取 Activity 或使用 Intent 的方式获取到所要上传文件的路径后,就可以开始上传了。在 demo 中,使用了 VodLocalFilesExplorerActivity 这个 Activity 完成了文件的选取。
-
上传媒资
选取到所要上传的文件的路径后,通过下列三个小步骤完成上传:
-
申请媒资
可以通过 VodClient 的 applyMedia 这个方法申请媒资
GenerateMediaIdResponse generateMediaIdresponse = vodClient.applyMedia(); String bosKey = generateMediaIdresponse.getSourceKey(); String mediaId = generateMediaIdresponse.getMediaId(); uploadedMediaId = mediaId; String bucket = generateMediaIdresponse.getSourceBucket();
其中:bosKey 和 bucket 是上传时需要用到的变量, mediaId 是处理媒资时需要用到的变量。
-
BOS上传
举例,示例采用
FileUploadSession
来进行文件的上传,上传的方法是`upload(File file, String bucket, String bosKey)`
注意:
FileUploadSession
类的构造方法需要传入一个 BosClient 类的实例,该类实现了文件的分段上传。关于 BosClient 的配置,参考配置说明- 分多少段:ceil(file.length() / CHUNK_SIZE)
- 多线程上传:线程数为CPU核数
- 对该类稍加修改,可以支持上传进度:每上传完成一个Part,计算下进度,返回给界面类即可。
- 分块上传的相关接口参见BOS Object的分块上传。
- 大块数据上传是特别耗内存的操作,个别低版本机器OOM的话,建议开启application标签下的android:largeHeap="true"。
-
处理媒资
媒资上传完成后,用户可以指定如何处理媒资,处理媒资的代码如下:
String title = "测试"; String description = "这是一条测试视频"; String transcodingPresetGroupName = "trans_to_640_360_hls"; // 模板名必须为VOD后台的模板组名称 // transcodingPresetGroupName 传入null,表示默认模板组。 ProcessMediaRequest request = new ProcessMediaRequest() .withMediaId(mediaId) .withTitle(title) .withDescription(description) .withSourceExtension(sourceExtension) .withTranscodingPresetGroupName(transcodingPresetGroupName); // process: let vod to process bos file ProcessMediaResponse processResponse = vodClient.processMedia(request); uploadedMediaId = processResponse.getMediaId();
其中,mediaId 是媒资上传完成后获得的媒资 id ,保存该 id,便于后续转码处理等操作。
-