阿里云视频点播功能java应用中简单集成
开通:
阿里云官网搜索 “视频点播” ,默认计费方式-按量积分,具体计费标准
集成:
引入依赖
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-vod</artifactId>
<version>2.15.11</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
1、上传
这里上传功能本人是根据视频id获取播放url ,视频id下图。
以下为根据视频id获取对应播放url 入库
/**
* 根据mediaId 获取url
*
* @param reqionId
* @param accessKeyId
* @param accessKeyIdSecret
* @param videoId
* @return
*/
public static String getPlayURL(String reqionId, String accessKeyId, String accessKeyIdSecret, String videoId) {
// 创建SubmitMediaInfoJob实例并初始化
DefaultProfile profile = DefaultProfile.getProfile(
reqionId, // // 点播服务所在的地域ID,中国大陆地域请填cn-shanghai
accessKeyId, // 您的AccessKey ID
accessKeyIdSecret); // 您的AccessKey Secret
IAcsClient client = new DefaultAcsClient(profile);
GetPlayInfoRequest request = new GetPlayInfoRequest();
// 视频ID。
request.setVideoId(videoId);
try {
GetPlayInfoResponse response = client.getAcsResponse(request);
System.out.println(new Gson().toJson(response));
String playUrl = "";
for (GetPlayInfoResponse.PlayInfo playInfo : response.getPlayInfoList()) {
// 播放地址
playUrl = playInfo.getPlayURL();
}
return playUrl;
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
return null;
}
2、剪辑
由于需求要求要有未购买之前试看功能, 增加剪辑
剪辑需要对视频客户端进行初始化(音频/视频通用)
/**
* 初始化客户端(视频剪辑用)
*
* @param accessKeyId
* @param accessKeySecret
* @return
* @throws ClientException
*/
public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
String regionId = "cn-shanghai"; // 点播服务接入区域 一般为cn-shanghai 后续若要修改再行扩展
DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
开始剪辑, 此处由于没有特殊需求,从0秒开始剪辑
/**
* 视频剪辑
*
* @param accessKeyId 您的AccessKey ID
* @param accessKeySecret 您的AccessKey Secret
* @param mediaId 视频id
* @param limit 剪辑时长 单位:秒
* @return
*/
public String videoCut(String accessKeyId, String accessKeySecret, String mediaId, Long limit) {
DefaultAcsClient client = null;
try {
client = AliVodUtils.initVodClient(accessKeyId, accessKeySecret);
} catch (ClientException e) {
throw new RuntimeException("视频客户端初始化失败,请检查您的配置");
}
ProduceEditingProjectVideoRequest request = new ProduceEditingProjectVideoRequest();
// Build Editing Project Timeline
request.setTimeline(AliVodUtils.buildTimeline(mediaId, "Video", 0f, Float.parseFloat(String.valueOf(limit))));
ProduceEditingProjectVideoResponse response = null;
try {
response = client.getAcsResponse(request);
if (response != null){
// Produce Media ID
return response.getMediaId();
// Request ID 暂时用不到,后续如果需要对视频进行其他操作,再行扩展
// String requestId = response.getRequestId();
}
} catch (ServerException e){
throw new RuntimeException("服务异常,请检查视频ID与免费时长是否正确");
} catch (ClientException e){
throw new RuntimeException("视频处理失败,请检查您配置的accessKeyId与accessKeySecret是否正确");
} catch (Exception e) {
throw new RuntimeException("网络异常,请稍后再试");
}
return null;
}
/**
* 获取事件线
*
* @param mediaId 视频id
* @param type Video or Image 默认Video
* @param in 从xx 秒开始剪辑
* @param out 剪辑到xx秒
* @return
*/
public static String buildTimeline(String mediaId, String type, Float in, Float out){
JSONObject timeline = new JSONObject();
// Video Track
JSONArray videoTracks = new JSONArray();
JSONObject videoTrack = new JSONObject();
// Video Track Clips
JSONArray videoTrackClips = new JSONArray();
JSONObject videoTrackClip1 = new JSONObject();
videoTrackClip1.put("MediaId", mediaId);
videoTrackClip1.put("Type", type);
videoTrackClip1.put("Duration", 900);
videoTrackClip1.put("in", in);
videoTrackClip1.put("Out", out);
videoTrackClips.add(videoTrackClip1);
videoTrack.put("VideoTrackClips", videoTrackClips);
videoTracks.add(videoTrack);
timeline.put("VideoTracks", videoTracks);
return timeline.toString();
}
音频剪辑处理基本一致,不同之处在于以上时间线获取
videoTrackClip1.put(“Type”, “Volume”); --此处设置类型不一致
/**
* 音频获取时间线
*
* @param mediaId
* @param in
* @param out
* @return
*/
public static String buildTimelineVolume(String mediaId, Float in, Float out){
JSONObject timeline = new JSONObject();
// Video Track
JSONArray videoTracks = new JSONArray();
JSONObject videoTrack = new JSONObject();
// Video Track Clips
JSONArray videoTrackClips = new JSONArray();
JSONObject videoTrackClip1 = new JSONObject();
videoTrackClip1.put("MediaId", mediaId);
videoTrackClip1.put("Type", "Volume");
videoTrackClip1.put("Duration", out);
videoTrackClip1.put("in", in);
videoTrackClip1.put("Out", out);
videoTrackClips.add(videoTrackClip1);
videoTrack.put("VideoTrackClips", videoTrackClips);
videoTracks.add(videoTrack);
timeline.put("VideoTracks", videoTracks);
return timeline.toString();
}
播放方面我们使用自己播放器。
注1:需要使用以上功能,必须先开通-配置管理-分发加速器-域名管理 功能并可正常使用。如图
域名具体配置方法此处不再说明。
注2:本文只是根据自身需求,有部分功能未涉及。