Android(安卓)上传文件到阿里云点播,阿里云点播转码
文章目录
一:登录阿里云点播平台配置添加转码模板组
1:需要什么参数,可自行填写。然后保存。(如图)
2:把获取的模板 ID 保存下载,一会上传文件转码用。
二:服务端获取上传地址和凭证及播放地址
1:添加maven仓库(pom.xml)
<repositories>
<repository>
<id>sonatype-nexus-staging</id>
<name>Sonatype Nexus Staging</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
2:添加Jar包依赖
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.3.3</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-vod</artifactId>
<version>2.15.5</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>
3:媒体上传(初始化客户端,获取上传地址和凭证)
public class Index {
public static void main(String[] args) {
try {
//初始化
DefaultAcsClient msg = initVodClient("<Your AccessKeyId>", "<Your AccessKeySecret>");
System.out.println(msg);
} catch (ClientException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*
* RequestId:请求ID
* VideoId:视频ID。
* UploadAddress:上传地址。
* UploadAuth:上传凭证。
*
*/
public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
String regionId = "cn-shanghai"; // 点播服务接入区域
//初始化
DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
//获取上传地址和凭证
CreateUploadVideoResponse response = new CreateUploadVideoResponse ();
try {
response = createUploadVideo(client);
System.out.print("VideoId = " + response.getVideoId() + "\n");
System.out.print("UploadAddress = " + response.getUploadAddress() + "\n");
System.out.print("UploadAuth = " + response.getUploadAuth() + "\n");
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.print("ErrorMessage = " + e.getLocalizedMessage());
}
System.out.print("RequestId = " + response.getRequestId() + "\n");
return client;
}
/**
* 获取视频上传地址和凭证
* @param client 发送请求客户端
* @return CreateUploadVideoResponse 获取视频上传地址和凭证响应数据
* @throws Exception
*/
public static CreateUploadVideoResponse createUploadVideo(DefaultAcsClient client) throws Exception {
CreateUploadVideoRequest request = new CreateUploadVideoRequest();
//视频标题
request.setTitle("this is a sample");
//视频源文件名
request.setFileName("filename2.mp4");
//转码模板组ID(第一部分网站部分获得,转码模板ID)
request.setTemplateGroupId("XXX");
//文件大小
request.setFileSize(null);
//视频描述
request.setDescription("");
//自定义视频封面URL地址
request.setCoverURL("");
//视频分类ID
request.setCateId(null);
//视频标签
request.setTags(null);
//存储地址(无需填写,如需更改,可登陆 点播控制台 > 存储管理 里查看存储地址)
request.setStorageLocation(null);
//应用ID(取值如:app-1000000。使用说明参考文档 多应用。)
request.setAppId(null);
//工作流ID(使用说明参考文档 工作流。)
request.setWorkflowId(null);
//UserData,用户自定义设置参数,用户需要单独回调URL及数据透传时设置(非必须)
//JSONObject userData = new JSONObject();
//UserData回调部分设置
//JSONObject messageCallback = new JSONObject();
//messageCallback.put("CallbackURL", "http://xxxxx");
//messageCallback.put("CallbackType", "http");
//userData.put("MessageCallback", messageCallback.toJSONString());
//UserData透传数据部分设置
//JSONObject extend = new JSONObject();
//extend.put("MyId", "user-defined-id");
//userData.put("Extend", extend.toJSONString());
//request.setUserData(userData.toJSONString());
return client.getAcsResponse(request);
}
}
问题 | 解决 |
---|---|
accessKeyId | 登录阿里云控制台获取accessKeyId(建议创建RAM子账号访问) |
accessKeySecret | 登录阿里云控制台获取accessKeySecret(建议创建RAM子账号访问) |
request.setTemplateGroupId(“XXX”); | 转码模板组ID(第一部分中创建的模板ID) |
UploadAuth | 上传文件时使用(详细见第三部分) |
UploadAddress | 上传文件时使用(详细见第三部分) |
4:获取视频播放地址
public class GetPlay {
public static void main(String[] args) {
try {
//初始化
DefaultAcsClient msg = initVodClient("LTAI4FnKLBWt16rLcaFsjtJ4","xZSXejzr93PrlB9UXJ04L5cPcvfzlr");
System.out.println(msg);
GetPlayInfoResponse response = new GetPlayInfoResponse();
try {
response = getPlayInfo(msg);
List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList();
//播放地址
for (GetPlayInfoResponse.PlayInfo playInfo : playInfoList) {
System.out.print("PlayInfo.PlayURL = " + playInfo.getPlayURL() + "\n");
}
//Base信息
System.out.print("VideoBase.Title = " + response.getVideoBase().getTitle() + "\n");
} catch (Exception e) {
System.out.print("ErrorMessage = " + e.getLocalizedMessage());
}
System.out.print("RequestId = " + response.getRequestId() + "\n");
} catch (ClientException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
String regionId = "cn-shanghai"; // 点播服务接入区域
//初始化
DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
/*获取播放地址函数*/
public static GetPlayInfoResponse getPlayInfo(DefaultAcsClient client) throws Exception {
GetPlayInfoRequest request = new GetPlayInfoRequest();
//视频id
request.setVideoId("bc0adcb0e3f2477a8ee65f027cc6141d");
return client.getAcsResponse(request);
}
}
问题 | 解决 |
---|---|
PlayInfo.PlayURL | 返回的视频播放地址(详细见上方代码) |
三:客户端从服务端获取上传地址和凭证及上传文件
1:在Maven项目中加入依赖项
implementation 'com.aliyun.video.android:upload:1.5.5'
implementation 'de.gerdi-project:GSON:6.0.6'
2:配置阿里云仓库
maven{ url'http://maven.aliyun.com/nexus/content/groups/public/'}
maven { url "https://maven.aliyun.com/nexus/content/repositories/releases" }
3:配置权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
如果配置权限时出现 红色 下划线,请点击这里https://blog.csdn.net/qq_41974199/article/details/103622925
4:上传媒体文件
public class MainActivity extends AppCompatActivity {
//在第二部分服务端获取相关信息中获得
String uploadAuth= “XXX”;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= 23) {
int REQUEST_CODE_CONTACT = 101;
String[] permissions = {
Manifest.permission.WRITE_EXTERNAL_STORAGE
}; //验证是否许可权限
for (String str : permissions) {
if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
//申请权限
this.requestPermissions(permissions, REQUEST_CODE_CONTACT); return;
}
}
}
//初始化
final VODUploadClient uploader=new VODUploadClientImpl(this.getApplicationContext());
//初始化
// final VODUploadClient uploader=new VODUploadClientImpl(this);
// System.out.println(uploader);
Toast.makeText(this, "开始上传", Toast.LENGTH_SHORT).show();
// setup callback
VODUploadCallback callback = new VODUploadCallback() {
public void onUploadSucceed(UploadFileInfo info) {
System.out.println("onsucceed ------------------" + info.getFilePath());
Toast.makeText(MainActivity.this,"上传完成",Toast.LENGTH_SHORT).show();
}
public void onUploadFailed(UploadFileInfo info, String code, String message) {
System.out.println("onfailed ------------------ " + info.getFilePath() + " " + code + " " + message);
Toast.makeText(MainActivity.this,"上传失败",Toast.LENGTH_SHORT).show();
}
//上传进度
public void onUploadProgress(UploadFileInfo info, long uploadedSize, long totalSize) {
System.out.println("onProgress ------------------ " + info.getFilePath() + " " + uploadedSize + " " + totalSize);
}
//凭证5分钟过期,过期后需要重新获取
public void onUploadTokenExpired() {
System.out.println("onExpired ------------- ");
// 重新刷新上传凭证:RefreshUploadVideo
// String uploadAuth = aa;
// uploader.resumeWithAuth(uploadAuth);
}
//
public void onUploadRetry(String code, String message) {
System.out.println("onUploadRetry ------------- ");
Toast.makeText(MainActivity.this,"上传开始重试",Toast.LENGTH_SHORT).show();
}
public void onUploadRetryResume() {
System.out.println("onUploadRetryResume ------------- ");
Toast.makeText(MainActivity.this,"上传结束重试,继续上传回调",Toast.LENGTH_SHORT).show();
}
/**
* 上传地址和凭证方式上传需要调用setUploadAuthAndAddress:uploadAuth:uploadAddress:方法设置上传地址和凭证
* fileInfo 上传文件信息
* */
public void onUploadStarted(UploadFileInfo uploadFileInfo) {
System.out.println("onUploadStarted ------------- ");
uploader.setUploadAuthAndAddress(uploadFileInfo, uploadAuth, uploadAddress);
Toast.makeText(MainActivity.this,"开始上传回调",Toast.LENGTH_SHORT).show();
}
};
//上传初始化
uploader.init(callback);
File file = new File(getExternalFilesDir(null), "china.mp4");
System.out.println(file+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
//本地文件地址
String filePath = "/storage/emulated/0/download/china.mp4";
VodInfo vodInfo = new VodInfo();
vodInfo.setTitle("标题");
vodInfo.setDesc("描述");
vodInfo.setCateId (19);
vodInfo.setIsProcess(true);
uploader.addFile(filePath,vodInfo);
uploader.start();
}
}
问题 | 解决 |
---|---|
uploadAuth | 在第二部分服务端获得,详细见第二部分 |
uploadAddress | 在第二部分服务端获得,详细见第二部分 |
5:上传完成(转码以及改变清晰度)
暂时更新这么多
复制代码可直接运行
有问题可在下方留言