@@ -1,13 +1,17 @@ | |||||
package com.iformall.controller; | package com.iformall.controller; | ||||
import com.github.pagehelper.PageInfo; | import com.github.pagehelper.PageInfo; | ||||
import com.iformall.common.ErrorCode; | |||||
import com.iformall.common.ResultData; | import com.iformall.common.ResultData; | ||||
import com.iformall.domain.po.base.BaseEntity; | import com.iformall.domain.po.base.BaseEntity; | ||||
import com.iformall.domain.po.sm.MouldPatch; | import com.iformall.domain.po.sm.MouldPatch; | ||||
import com.iformall.domain.po.sm.MouldPatchSign; | import com.iformall.domain.po.sm.MouldPatchSign; | ||||
import com.iformall.domain.po.sm.UserMouldVideo; | |||||
import com.iformall.enums.EnumColour; | import com.iformall.enums.EnumColour; | ||||
import com.iformall.enums.EnumMouldPatchType; | |||||
import com.iformall.enums.EnumMouldSendType; | import com.iformall.enums.EnumMouldSendType; | ||||
import com.iformall.enums.EnumaMouldPatchStatus; | import com.iformall.enums.EnumaMouldPatchStatus; | ||||
import com.iformall.language.LanguageDetect; | |||||
import com.iformall.service.sm.MouldPatchService; | import com.iformall.service.sm.MouldPatchService; | ||||
import com.iformall.service.sm.MouldPatchSignService; | import com.iformall.service.sm.MouldPatchSignService; | ||||
import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
@@ -60,4 +64,24 @@ public class MouldPatchController extends BaseController { | |||||
return new ResultData(mouldPatch); | return new ResultData(mouldPatch); | ||||
} | } | ||||
@ApiOperation("根据输入文案获取音色") | |||||
@GetMapping("voiceList") | |||||
@ApiImplicitParams({ | |||||
@ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), | |||||
@ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) | |||||
public ResultData voiceList(@RequestBody UserMouldVideo record, Integer pageNum, Integer pageSize) { | |||||
logger.debug("[" + getIpAddr() + "] MouldPatchController::voiceList"); | |||||
if (record == null || StringUtils.isBlank(record.getPaperwork())) { | |||||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); | |||||
} | |||||
LanguageDetect.detect(record.getPaperwork()); | |||||
MouldPatch mouldPatch = new MouldPatch(); | |||||
mouldPatch.setType(EnumMouldPatchType.voice_mould.getCode()); | |||||
mouldPatch.setSendType(EnumMouldSendType.auto.getCode()); | |||||
mouldPatch.setStatus(EnumaMouldPatchStatus.put_on.getCode()); | |||||
mouldPatch.setSortColumns(BaseEntity.SortField.UpdateDate_DESC); | |||||
return new ResultData(); | |||||
} | |||||
} | } |
@@ -65,6 +65,10 @@ public class UserInviteCodeController extends BaseController { | |||||
UserInviteCode inviteCode = new UserInviteCode(); | UserInviteCode inviteCode = new UserInviteCode(); | ||||
inviteCode.setUserId(getMemberId()); | inviteCode.setUserId(getMemberId()); | ||||
inviteCode = userInviteCodeService.selectOne(inviteCode); | inviteCode = userInviteCodeService.selectOne(inviteCode); | ||||
if(inviteCode == null){ | |||||
inviteCode = new UserInviteCode(); | |||||
inviteCode.setStatus(EnumYesOrNo.YES.getCode()); | |||||
} | |||||
return new ResultData(inviteCode); | return new ResultData(inviteCode); | ||||
} | } | ||||
@@ -13,6 +13,8 @@ import com.iformall.enums.EnumaMouldPatchStatus; | |||||
import com.iformall.service.sm.MouldPatchService; | import com.iformall.service.sm.MouldPatchService; | ||||
import com.iformall.service.sm.MouldPatchSignService; | import com.iformall.service.sm.MouldPatchSignService; | ||||
import com.iformall.service.sm.UserMouldVideoService; | import com.iformall.service.sm.UserMouldVideoService; | ||||
import com.iformall.video.VideoFactory; | |||||
import com.iformall.video.entity.VideUploadResult; | |||||
import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
import io.swagger.annotations.ApiImplicitParam; | import io.swagger.annotations.ApiImplicitParam; | ||||
import io.swagger.annotations.ApiImplicitParams; | import io.swagger.annotations.ApiImplicitParams; | ||||
@@ -39,6 +41,12 @@ public class UserMouldVideoController extends BaseController { | |||||
@Autowired | @Autowired | ||||
private MouldPatchService mouldPatchService; | private MouldPatchService mouldPatchService; | ||||
@Autowired | |||||
private VideoFactory videoFactory; | |||||
@Autowired | |||||
String videoType; | |||||
@ApiOperation("分页列表接口") | @ApiOperation("分页列表接口") | ||||
@GetMapping("list") | @GetMapping("list") | ||||
@ApiImplicitParams({ | @ApiImplicitParams({ | ||||
@@ -120,4 +128,18 @@ public class UserMouldVideoController extends BaseController { | |||||
return new ResultData(userMouldVideo); | return new ResultData(userMouldVideo); | ||||
} | } | ||||
@GetMapping(value = "/videoDetial") | |||||
@ApiOperation("视频详情") | |||||
@ApiImplicitParams({ | |||||
@ApiImplicitParam(name = "videoId", value = "视频编号", dataType = "String", paramType = "query", required = true)}) | |||||
public ResultData videoDetial(String videoId) { | |||||
try { | |||||
VideUploadResult videoDetail = videoFactory.getExcutor(videoType).getVideoDetailWithCache(videoId); | |||||
return new ResultData(videoDetail); | |||||
} catch (Exception e) { | |||||
logger.error(e.getMessage()); | |||||
return new ResultData(ErrorCode.PICTURE_ANALYZING_ERROR); | |||||
} | |||||
} | |||||
} | } |
@@ -160,10 +160,15 @@ alipay: | |||||
callback: https://callbacktest.malls.iformall.com/api/alipay/notify/callback | callback: https://callbacktest.malls.iformall.com/api/alipay/notify/callback | ||||
video: | video: | ||||
aliyun: | |||||
accessKeyId: LTAI4G7ixY4AhvM35F8o3W3V | |||||
accessKeySecret: VfWqGb83qIQrS9us45utskl8itd7ry | |||||
regionId: cn-beijing | |||||
aliyun: | |||||
accessKeyId: LTAI5tQs4MBjzLFbiQLjsMYy | |||||
accessKeySecret: nYmnexFJxrsBu0AGVIOSbUaSaweJu7 | |||||
regionId: cn-beijing | |||||
endPoint: https://oss-cn-beijing.aliyuncs.com | |||||
corePoolSize: 6 | |||||
maxPoolSize: 20 | |||||
queueCapacity: 1000 | |||||
namePrefix: aliyun-video-upload | |||||
jasypt: | jasypt: | ||||
encryptor: | encryptor: | ||||
@@ -1,8 +0,0 @@ | |||||
package com.iformall.service; | |||||
import com.iformall.domain.po.FengNiaoMapConfig; | |||||
public interface FengNiaoMapService { | |||||
FengNiaoMapConfig getConfigByTenantId(String tenantId); | |||||
} |
@@ -68,7 +68,7 @@ | |||||
and `age` = #{age} | and `age` = #{age} | ||||
</if> | </if> | ||||
<if test=" null != sex "> | |||||
<if test=" null != colour "> | |||||
and `colour` = #{colour} | and `colour` = #{colour} | ||||
</if> | </if> | ||||
@@ -3,19 +3,25 @@ package com.iformall.video; | |||||
import java.io.File; | import java.io.File; | ||||
import java.io.InputStream; | import java.io.InputStream; | ||||
import com.iformall.video.entity.VideTransResult; | |||||
import com.iformall.video.entity.VideUploadResult; | import com.iformall.video.entity.VideUploadResult; | ||||
public interface VideoExcutor { | public interface VideoExcutor { | ||||
/** | /** | ||||
* 上传视频 | * 上传视频 | ||||
* title:视频标题 | * title:视频标题 | ||||
*/ | */ | ||||
public VideUploadResult uploadVideoStream(String title,InputStream inputStream,String ex); | public VideUploadResult uploadVideoStream(String title,InputStream inputStream,String ex); | ||||
public String getVedioUploadProgress(String videoId); | public String getVedioUploadProgress(String videoId); | ||||
public String getVedioContentLength(String videoId); | public String getVedioContentLength(String videoId); | ||||
VideUploadResult getVideoDetail(String videoId); | |||||
VideUploadResult getVideoDetailWithCache(String videoId); | |||||
VideUploadResult getVideoDetailFromApi(String videoId); | |||||
public VideTransResult transVideo(String videoId); | |||||
public VideTransResult getTransVideoResult(String videoId, String taskId); | |||||
} | } |
@@ -8,8 +8,11 @@ import java.util.UUID; | |||||
import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoResponse; | import com.aliyuncs.vod.model.v20170321.CreateUploadVideoResponse; | ||||
import com.aliyuncs.vod.model.v20170321.GetPlayInfoResponse; | import com.aliyuncs.vod.model.v20170321.GetPlayInfoResponse; | ||||
import com.aliyuncs.vod.model.v20170321.GetTranscodeTaskResponse; | |||||
import com.aliyuncs.vod.model.v20170321.SubmitTranscodeJobsResponse; | |||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker; | import com.baomidou.mybatisplus.core.toolkit.IdWorker; | ||||
import com.iformall.video.entity.VideTransResult; | |||||
import org.apache.commons.io.FileUtils; | import org.apache.commons.io.FileUtils; | ||||
import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
@@ -33,14 +36,14 @@ public class AliyunVideoExcutor implements VideoExcutor { | |||||
@Autowired | @Autowired | ||||
AliyunVideoConfig config; | AliyunVideoConfig config; | ||||
@Autowired | @Autowired | ||||
AliyunVideoUploadThread thread; | AliyunVideoUploadThread thread; | ||||
@Autowired | |||||
@Qualifier("objectCommonRedisTemplate") | |||||
RedisTemplate<String, Object> redisTemplate; | |||||
@Autowired | |||||
@Qualifier("objectCommonRedisTemplate") | |||||
RedisTemplate<String, Object> redisTemplate; | |||||
private String getUrlByVeidoId(String videoId) { | private String getUrlByVeidoId(String videoId) { | ||||
try { | try { | ||||
return AliyunVedioServer.getVedioUrl(config, videoId); | return AliyunVedioServer.getVedioUrl(config, videoId); | ||||
@@ -49,14 +52,14 @@ public class AliyunVideoExcutor implements VideoExcutor { | |||||
} | } | ||||
return null; | return null; | ||||
} | } | ||||
public DefaultAcsClient initVodClient() throws ClientException { | public DefaultAcsClient initVodClient() throws ClientException { | ||||
String regionId = config.getRegionId(); // 点播服务接入区域 | |||||
DefaultProfile profile = DefaultProfile.getProfile(regionId, config.getAccessKeyId(), config.getAccessKeySecret()); | |||||
DefaultAcsClient client = new DefaultAcsClient(profile); | |||||
return client; | |||||
String regionId = config.getRegionId(); // 点播服务接入区域 | |||||
DefaultProfile profile = DefaultProfile.getProfile(regionId, config.getAccessKeyId(), config.getAccessKeySecret()); | |||||
DefaultAcsClient client = new DefaultAcsClient(profile); | |||||
return client; | |||||
} | } | ||||
/** | /** | ||||
* https://help.aliyun.com/document_detail/61063.html?spm=a2c4g.11186623.6.1036.2f81d418ydqsX8 | * https://help.aliyun.com/document_detail/61063.html?spm=a2c4g.11186623.6.1036.2f81d418ydqsX8 | ||||
* https://help.aliyun.com/document_detail/55407.htm?spm=a2c4g.11186623.2.12.77aad4180Hg9y0#doc-api-vod-CreateUploadVideo | * https://help.aliyun.com/document_detail/55407.htm?spm=a2c4g.11186623.2.12.77aad4180Hg9y0#doc-api-vod-CreateUploadVideo | ||||
@@ -75,6 +78,11 @@ public class AliyunVideoExcutor implements VideoExcutor { | |||||
FileUtils.copyInputStreamToFile(inputStream, targetFile); | FileUtils.copyInputStreamToFile(inputStream, targetFile); | ||||
CreateUploadVideoResponse response =AliyunVedioServer.createUploadVideo(config, title, _tempfilepath); | CreateUploadVideoResponse response =AliyunVedioServer.createUploadVideo(config, title, _tempfilepath); | ||||
result.setVideoId(response.getVideoId()); | result.setVideoId(response.getVideoId()); | ||||
if((!StringUtils.isBlank(config.getAutoTrans())) && ("Y".equals(config.getAutoTrans()) || "y".equals(config.getAutoTrans()))) { | |||||
result.setAutoTrans(true); | |||||
}else { | |||||
result.setAutoTrans(false); | |||||
} | |||||
//result.setVideoUrl(getUrlByVeidoId(response.getVideoId())); | //result.setVideoUrl(getUrlByVeidoId(response.getVideoId())); | ||||
result.setSuccess(true); | result.setSuccess(true); | ||||
//TODO 线程池的方式 | //TODO 线程池的方式 | ||||
@@ -110,47 +118,107 @@ public class AliyunVideoExcutor implements VideoExcutor { | |||||
} | } | ||||
@Override | @Override | ||||
public VideUploadResult getVideoDetail(String videoId) { | |||||
public VideUploadResult getVideoDetailWithCache(String videoId) { | |||||
VideUploadResult videoDetail = UploadCacheHelper.getVideoDetail(redisTemplate, videoId); | VideUploadResult videoDetail = UploadCacheHelper.getVideoDetail(redisTemplate, videoId); | ||||
if(videoDetail != null){ | if(videoDetail != null){ | ||||
return videoDetail; | return videoDetail; | ||||
}else{ | }else{ | ||||
VideUploadResult result = new VideUploadResult(); | |||||
result.setVideoId(videoId); | |||||
try { | |||||
GetPlayInfoResponse response = AliyunVedioServer.getPlayInfoResponse(config, videoId); | |||||
log.info("shipin---Detail{}"+JSON.toJSONString(response)); | |||||
if(response != null){ | |||||
List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList(); | |||||
//播放地址 | |||||
for (GetPlayInfoResponse.PlayInfo playInfo : playInfoList) { | |||||
result.setVideoUrl(playInfo.getPlayURL()); | |||||
break; | |||||
} | |||||
GetPlayInfoResponse.VideoBase videoBase = response.getVideoBase(); | |||||
result.setDuration(videoBase.getDuration()); | |||||
result.setCoverURL(videoBase.getCoverURL()); | |||||
result.setTitle(videoBase.getTitle()); | |||||
result.setSuccess(true); | |||||
if(StringUtils.isNotBlank(result.getCoverURL()) | |||||
&& StringUtils.isNotBlank(result.getDuration()) | |||||
&& !"0.0".equals(result.getDuration())){ | |||||
UploadCacheHelper.cacheVideoDetail(redisTemplate, videoId,result); | |||||
} | |||||
}else{ | |||||
result.setSuccess(false); | |||||
result.setMsg("未获取到视频"); | |||||
VideUploadResult result = getVideoDetailFromApi(videoId); | |||||
if(StringUtils.isNotBlank(result.getCoverURL()) | |||||
&& StringUtils.isNotBlank(result.getDuration()) | |||||
&& !"0.0".equals(result.getDuration())){ | |||||
UploadCacheHelper.cacheVideoDetail(redisTemplate, videoId,result); | |||||
} | |||||
return result; | |||||
} | |||||
} | |||||
@Override | |||||
public VideUploadResult getVideoDetailFromApi(String videoId) { | |||||
VideUploadResult result = new VideUploadResult(); | |||||
result.setVideoId(videoId); | |||||
try { | |||||
GetPlayInfoResponse response = AliyunVedioServer.getPlayInfoResponse(config, videoId); | |||||
log.info("shipin---Detail{}"+JSON.toJSONString(response)); | |||||
if(response != null){ | |||||
List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList(); | |||||
//播放地址 | |||||
for (GetPlayInfoResponse.PlayInfo playInfo : playInfoList) { | |||||
result.setVideoUrl(playInfo.getPlayURL()); | |||||
result.setHeight(playInfo.getHeight()); | |||||
result.setWidth(playInfo.getWidth()); | |||||
break; | |||||
} | } | ||||
} catch (ClientException e) { | |||||
GetPlayInfoResponse.VideoBase videoBase = response.getVideoBase(); | |||||
result.setDuration(videoBase.getDuration()); | |||||
result.setCoverURL(videoBase.getCoverURL()); | |||||
result.setTitle(videoBase.getTitle()); | |||||
result.setSuccess(true); | |||||
}else{ | |||||
result.setSuccess(false); | result.setSuccess(false); | ||||
result.setMsg("获取视频请求异常"); | |||||
result.setMsg("未获取到视频"); | |||||
} | } | ||||
return result; | |||||
} catch (ClientException e) { | |||||
result.setSuccess(false); | |||||
result.setMsg("获取视频请求异常"); | |||||
} | } | ||||
return result; | |||||
} | } | ||||
@Override | @Override | ||||
public String getVedioContentLength(String videoId) { | public String getVedioContentLength(String videoId) { | ||||
return UploadCacheHelper.getContentLength(redisTemplate, videoId); | return UploadCacheHelper.getContentLength(redisTemplate, videoId); | ||||
} | } | ||||
@Override | |||||
public VideTransResult transVideo(String videoId) { | |||||
VideTransResult result = new VideTransResult(); | |||||
//解码 | |||||
if ((!StringUtils.isBlank(videoId)) && (!StringUtils.isBlank(config.getTransTemplateId()))) { | |||||
result.setVideoId(videoId); | |||||
SubmitTranscodeJobsResponse transResponse = new SubmitTranscodeJobsResponse(); | |||||
try { | |||||
transResponse = AliyunVedioServer.submitTranscodeJobs(config, videoId, config.getTransTemplateId()); | |||||
//任务ID | |||||
//System.out.println("JobId = " + transResponse.getTranscodeJobs().get(0).getJobId()); | |||||
result.setTaskId(transResponse.getTranscodeTaskId()); | |||||
result.setSuccess(true); | |||||
return result; | |||||
}catch(Exception e) { | |||||
log.error(" aliyun uploadVideo trans error."+ videoId,e); | |||||
result.setSuccess(false); | |||||
result.setMsg(e.getLocalizedMessage()); | |||||
return result; | |||||
} | |||||
}else { | |||||
result.setSuccess(false); | |||||
result.setMsg("videoId或者转码模板编号为空"); | |||||
return result; | |||||
} | |||||
} | |||||
@Override | |||||
public VideTransResult getTransVideoResult(String videoId,String taskId) { | |||||
VideTransResult result = new VideTransResult(); | |||||
try { | |||||
GetTranscodeTaskResponse response = AliyunVedioServer.getTransTask(config, taskId); | |||||
if (null != response && "CompleteAllSucc".equals(response.getTranscodeTask().getTaskStatus())) { | |||||
result.setSuccess(true); | |||||
result.setTaskId(taskId); | |||||
result.setVideoId(videoId); | |||||
}else { | |||||
result.setSuccess(false); | |||||
result.setTaskId(taskId); | |||||
result.setVideoId(videoId); | |||||
result.setMsg(response.getTranscodeTask().getTaskStatus()); | |||||
} | |||||
} catch (Exception e) { | |||||
log.error(" aliyun uploadVideo getTransVideoResult error."+ videoId,e); | |||||
result.setSuccess(false); | |||||
result.setMsg(e.getLocalizedMessage()); | |||||
return result; | |||||
} | |||||
return result; | |||||
} | |||||
} | } |
@@ -13,4 +13,6 @@ public class AliyunVideoConfig { | |||||
private String accessKeySecret; | private String accessKeySecret; | ||||
private String regionId;//cn-shanghai 点播服务接入区域 | private String regionId;//cn-shanghai 点播服务接入区域 | ||||
private String endPoint;//以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com | private String endPoint;//以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com | ||||
private String transTemplateId;//转码的模板编号 | |||||
private String autoTrans; | |||||
} | } |
@@ -9,6 +9,7 @@ import java.net.URL; | |||||
import java.util.Base64; | import java.util.Base64; | ||||
import java.util.List; | import java.util.List; | ||||
import org.apache.commons.lang3.StringUtils; | |||||
import org.springframework.data.redis.core.RedisTemplate; | import org.springframework.data.redis.core.RedisTemplate; | ||||
import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
@@ -24,55 +25,60 @@ import com.aliyuncs.vod.model.v20170321.CreateUploadVideoRequest; | |||||
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoResponse; | import com.aliyuncs.vod.model.v20170321.CreateUploadVideoResponse; | ||||
import com.aliyuncs.vod.model.v20170321.GetPlayInfoRequest; | import com.aliyuncs.vod.model.v20170321.GetPlayInfoRequest; | ||||
import com.aliyuncs.vod.model.v20170321.GetPlayInfoResponse; | import com.aliyuncs.vod.model.v20170321.GetPlayInfoResponse; | ||||
import com.aliyuncs.vod.model.v20170321.GetTranscodeTaskRequest; | |||||
import com.aliyuncs.vod.model.v20170321.GetTranscodeTaskResponse; | |||||
import com.aliyuncs.vod.model.v20170321.RefreshUploadVideoRequest; | import com.aliyuncs.vod.model.v20170321.RefreshUploadVideoRequest; | ||||
import com.aliyuncs.vod.model.v20170321.RefreshUploadVideoResponse; | import com.aliyuncs.vod.model.v20170321.RefreshUploadVideoResponse; | ||||
import com.aliyuncs.vod.model.v20170321.SubmitTranscodeJobsRequest; | |||||
import com.aliyuncs.vod.model.v20170321.SubmitTranscodeJobsResponse; | |||||
import com.iformall.video.aliyun.config.AliyunVideoConfig; | import com.iformall.video.aliyun.config.AliyunVideoConfig; | ||||
import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||
import com.aliyuncs.exceptions.ClientException; | import com.aliyuncs.exceptions.ClientException; | ||||
import com.aliyuncs.exceptions.ServerException; | |||||
import com.aliyuncs.http.FormatType; | import com.aliyuncs.http.FormatType; | ||||
@Slf4j | @Slf4j | ||||
public class AliyunVedioServer { | public class AliyunVedioServer { | ||||
private static DefaultAcsClient initVodClient(AliyunVideoConfig config) throws ClientException { | private static DefaultAcsClient initVodClient(AliyunVideoConfig config) throws ClientException { | ||||
DefaultProfile profile = DefaultProfile.getProfile(config.getRegionId(), config.getAccessKeyId(), config.getAccessKeySecret()); | |||||
DefaultAcsClient client = new DefaultAcsClient(profile); | |||||
return client; | |||||
DefaultProfile profile = DefaultProfile.getProfile(config.getRegionId(), config.getAccessKeyId(), config.getAccessKeySecret()); | |||||
DefaultAcsClient client = new DefaultAcsClient(profile); | |||||
return client; | |||||
} | } | ||||
/** | /** | ||||
* 获取视频上传地址和凭证 | * 获取视频上传地址和凭证 | ||||
* @param | * @param | ||||
* @return CreateUploadVideoResponse 获取视频上传地址和凭证响应数据 | * @return CreateUploadVideoResponse 获取视频上传地址和凭证响应数据 | ||||
* @throws Exception | * @throws Exception | ||||
*/ | |||||
*/ | |||||
public static CreateUploadVideoResponse createUploadVideo(AliyunVideoConfig config,String title,String fileName) throws Exception { | public static CreateUploadVideoResponse createUploadVideo(AliyunVideoConfig config,String title,String fileName) throws Exception { | ||||
DefaultAcsClient client = initVodClient(config); | DefaultAcsClient client = initVodClient(config); | ||||
CreateUploadVideoRequest request = new CreateUploadVideoRequest(); | |||||
request.setTitle(title); | |||||
request.setFileName(fileName); | |||||
//UserData,用户自定义设置参数,用户需要单独回调URL及数据透传时设置(非必须) | |||||
//JSONObject userData = new JSONObject(); | |||||
//UserData回调部分设置 | |||||
//JSONObject messageCallback = new JSONObject(); | |||||
//messageCallback.put("CallbackURL", "http://192.168.0.0/16"); | |||||
//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); | |||||
CreateUploadVideoRequest request = new CreateUploadVideoRequest(); | |||||
request.setTitle(title); | |||||
request.setFileName(fileName); | |||||
//UserData,用户自定义设置参数,用户需要单独回调URL及数据透传时设置(非必须) | |||||
//JSONObject userData = new JSONObject(); | |||||
//UserData回调部分设置 | |||||
//JSONObject messageCallback = new JSONObject(); | |||||
//messageCallback.put("CallbackURL", "http://192.168.0.0/16"); | |||||
//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); | |||||
} | } | ||||
private static String toLanEndpoint(String bucket) { | private static String toLanEndpoint(String bucket) { | ||||
return bucket.replace(".aliyuncs.com", "-internal.aliyuncs.com"); | return bucket.replace(".aliyuncs.com", "-internal.aliyuncs.com"); | ||||
} | } | ||||
@@ -83,15 +89,15 @@ public class AliyunVedioServer { | |||||
JSONObject uploadAuth = JSON.parseObject(uploadAuthStr); | JSONObject uploadAuth = JSON.parseObject(uploadAuthStr); | ||||
JSONObject uploadAddress = JSON.parseObject(uploadAddressStr); | JSONObject uploadAddress = JSON.parseObject(uploadAddressStr); | ||||
String bucket = uploadAddress.getString("Bucket"); | String bucket = uploadAddress.getString("Bucket"); | ||||
String endpoint = uploadAddress.getString("Endpoint"); | |||||
String fileName = uploadAddress.getString("FileName"); | |||||
String accessKeyId = uploadAuth.getString("AccessKeyId"); | |||||
String accessKeySecret = uploadAuth.getString("AccessKeySecret"); | |||||
String securityToken = uploadAuth.getString("SecurityToken"); | |||||
OSS client = new OSSClientBuilder().build(toLanEndpoint(endpoint), accessKeyId, accessKeySecret,securityToken); | |||||
return new OssUploadClient(bucket, toLanEndpoint(endpoint), fileName, client); | |||||
String endpoint = uploadAddress.getString("Endpoint"); | |||||
String fileName = uploadAddress.getString("FileName"); | |||||
String accessKeyId = uploadAuth.getString("AccessKeyId"); | |||||
String accessKeySecret = uploadAuth.getString("AccessKeySecret"); | |||||
String securityToken = uploadAuth.getString("SecurityToken"); | |||||
OSS client = new OSSClientBuilder().build(toLanEndpoint(endpoint), accessKeyId, accessKeySecret,securityToken); | |||||
return new OssUploadClient(bucket, toLanEndpoint(endpoint), fileName, client); | |||||
} | } | ||||
private static OssUploadClient initOssClient(RefreshUploadVideoResponse response) throws UnsupportedEncodingException { | private static OssUploadClient initOssClient(RefreshUploadVideoResponse response) throws UnsupportedEncodingException { | ||||
final Base64.Decoder decoder = Base64.getDecoder(); | final Base64.Decoder decoder = Base64.getDecoder(); | ||||
String uploadAddressStr = new String(decoder.decode(response.getUploadAddress().getBytes("UTF-8"))); | String uploadAddressStr = new String(decoder.decode(response.getUploadAddress().getBytes("UTF-8"))); | ||||
@@ -99,15 +105,15 @@ public class AliyunVedioServer { | |||||
JSONObject uploadAuth = JSON.parseObject(uploadAuthStr); | JSONObject uploadAuth = JSON.parseObject(uploadAuthStr); | ||||
JSONObject uploadAddress = JSON.parseObject(uploadAddressStr); | JSONObject uploadAddress = JSON.parseObject(uploadAddressStr); | ||||
String bucket = uploadAddress.getString("Bucket"); | String bucket = uploadAddress.getString("Bucket"); | ||||
String endpoint = uploadAddress.getString("Endpoint"); | |||||
String fileName = uploadAddress.getString("FileName"); | |||||
String accessKeyId = uploadAuth.getString("AccessKeyId"); | |||||
String accessKeySecret = uploadAuth.getString("AccessKeySecret"); | |||||
String securityToken = uploadAuth.getString("SecurityToken"); | |||||
OSS client = new OSSClientBuilder().build(toLanEndpoint(endpoint), accessKeyId, accessKeySecret,securityToken); | |||||
return new OssUploadClient(bucket, toLanEndpoint(endpoint), fileName, client); | |||||
String endpoint = uploadAddress.getString("Endpoint"); | |||||
String fileName = uploadAddress.getString("FileName"); | |||||
String accessKeyId = uploadAuth.getString("AccessKeyId"); | |||||
String accessKeySecret = uploadAuth.getString("AccessKeySecret"); | |||||
String securityToken = uploadAuth.getString("SecurityToken"); | |||||
OSS client = new OSSClientBuilder().build(toLanEndpoint(endpoint), accessKeyId, accessKeySecret,securityToken); | |||||
return new OssUploadClient(bucket, toLanEndpoint(endpoint), fileName, client); | |||||
} | } | ||||
public static void uploadVideo(AliyunVideoConfig config,CreateUploadVideoResponse response,String localFile,RedisTemplate<String, Object> redisTemplate) throws UnsupportedEncodingException { | public static void uploadVideo(AliyunVideoConfig config,CreateUploadVideoResponse response,String localFile,RedisTemplate<String, Object> redisTemplate) throws UnsupportedEncodingException { | ||||
OssUploadClient ossClient = initOssClient(response); | OssUploadClient ossClient = initOssClient(response); | ||||
// 创建PutObjectRequest对象。 | // 创建PutObjectRequest对象。 | ||||
@@ -121,10 +127,10 @@ public class AliyunVedioServer { | |||||
// metadata.setObjectAcl(CannedAccessControlList.Private); | // metadata.setObjectAcl(CannedAccessControlList.Private); | ||||
// putObjectRequest.setMetadata(metadata); | // putObjectRequest.setMetadata(metadata); | ||||
// 上传文件。 | // 上传文件。 | ||||
String videoId = response.getVideoId(); | |||||
try { | try { | ||||
PutObjectResult result = ossClient.getOssClient().putObject(new PutObjectRequest(ossClient.getBucket(), ossClient.getFileName(), new File(localFile)). | PutObjectResult result = ossClient.getOssClient().putObject(new PutObjectRequest(ossClient.getBucket(), ossClient.getFileName(), new File(localFile)). | ||||
<PutObjectRequest>withProgressListener(new PutObjectProgressListener(redisTemplate,response.getVideoId(),localFile))); | |||||
<PutObjectRequest>withProgressListener(new PutObjectProgressListener(redisTemplate,response.getVideoId(),localFile))); | |||||
}catch(Exception e) { | }catch(Exception e) { | ||||
String msg = e.getLocalizedMessage(); | String msg = e.getLocalizedMessage(); | ||||
if (msg.contains("InvalidAccessKeyId")) { | if (msg.contains("InvalidAccessKeyId")) { | ||||
@@ -133,34 +139,51 @@ public class AliyunVedioServer { | |||||
RefreshUploadVideoResponse refrshResoponse = refreshUploadVideo(config,response.getVideoId()); | RefreshUploadVideoResponse refrshResoponse = refreshUploadVideo(config,response.getVideoId()); | ||||
ossClient1 = initOssClient(refrshResoponse); | ossClient1 = initOssClient(refrshResoponse); | ||||
ossClient1.getOssClient().putObject(new PutObjectRequest(ossClient1.getBucket(), ossClient1.getFileName(), new File(localFile)). | ossClient1.getOssClient().putObject(new PutObjectRequest(ossClient1.getBucket(), ossClient1.getFileName(), new File(localFile)). | ||||
<PutObjectRequest>withProgressListener(new PutObjectProgressListener(redisTemplate,refrshResoponse.getVideoId(),localFile))); | |||||
<PutObjectRequest>withProgressListener(new PutObjectProgressListener(redisTemplate,refrshResoponse.getVideoId(),localFile))); | |||||
videoId = refrshResoponse.getVideoId(); | |||||
} catch (Exception e1) { | } catch (Exception e1) { | ||||
UploadCacheHelper.cacheError(redisTemplate, response.getVideoId()); | UploadCacheHelper.cacheError(redisTemplate, response.getVideoId()); | ||||
log.error(" aliyun uploadVideo error."+ response.getVideoId(),e); | log.error(" aliyun uploadVideo error."+ response.getVideoId(),e); | ||||
videoId = ""; | |||||
} | } | ||||
if (null != ossClient1) { | if (null != ossClient1) { | ||||
ossClient1.getOssClient().shutdown(); | |||||
ossClient1.getOssClient().shutdown(); | |||||
} | } | ||||
}else { | }else { | ||||
UploadCacheHelper.cacheError(redisTemplate, response.getVideoId()); | UploadCacheHelper.cacheError(redisTemplate, response.getVideoId()); | ||||
log.error(" aliyun uploadVideo error."+ response.getVideoId(),e); | log.error(" aliyun uploadVideo error."+ response.getVideoId(),e); | ||||
videoId = ""; | |||||
} | } | ||||
} | } | ||||
// 关闭OSSClient。 | // 关闭OSSClient。 | ||||
ossClient.getOssClient().shutdown(); | |||||
ossClient.getOssClient().shutdown(); | |||||
} | |||||
/** | |||||
* 提交转码 | |||||
*/ | |||||
public static SubmitTranscodeJobsResponse submitTranscodeJobs(AliyunVideoConfig config,String videoId,String templateId) throws Exception { | |||||
DefaultAcsClient client = initVodClient(config); | |||||
SubmitTranscodeJobsRequest request = new SubmitTranscodeJobsRequest(); | |||||
//需要转码的视频ID | |||||
request.setVideoId(videoId); | |||||
//转码模板ID | |||||
request.setTemplateGroupId(templateId); | |||||
return client.getAcsResponse(request); | |||||
} | } | ||||
public static RefreshUploadVideoResponse refreshUploadVideo(AliyunVideoConfig config,String videoId) throws Exception { | public static RefreshUploadVideoResponse refreshUploadVideo(AliyunVideoConfig config,String videoId) throws Exception { | ||||
RefreshUploadVideoRequest request = new RefreshUploadVideoRequest(); | |||||
request.setVideoId("VideoId"); | |||||
request.setAcceptFormat(FormatType.JSON); | |||||
request.setSysReadTimeout(1000); | |||||
request.setSysConnectTimeout(1000); | |||||
DefaultAcsClient client = initVodClient(config); | |||||
return client.getAcsResponse(request); | |||||
RefreshUploadVideoRequest request = new RefreshUploadVideoRequest(); | |||||
request.setVideoId("VideoId"); | |||||
request.setAcceptFormat(FormatType.JSON); | |||||
request.setSysReadTimeout(1000); | |||||
request.setSysConnectTimeout(1000); | |||||
DefaultAcsClient client = initVodClient(config); | |||||
return client.getAcsResponse(request); | |||||
} | } | ||||
//获取视频播放地址 | //获取视频播放地址 | ||||
//https://help.aliyun.com/document_detail/61064.html?spm=a2c4g.11186623.6.1043.7c2d3838K6wQPZ | //https://help.aliyun.com/document_detail/61064.html?spm=a2c4g.11186623.6.1043.7c2d3838K6wQPZ | ||||
public static String getVedioUrl(AliyunVideoConfig config,String videoId) throws ClientException { | public static String getVedioUrl(AliyunVideoConfig config,String videoId) throws ClientException { | ||||
@@ -168,16 +191,16 @@ public class AliyunVedioServer { | |||||
GetPlayInfoResponse response = new GetPlayInfoResponse(); | GetPlayInfoResponse response = new GetPlayInfoResponse(); | ||||
try { | try { | ||||
GetPlayInfoRequest request = new GetPlayInfoRequest(); | GetPlayInfoRequest request = new GetPlayInfoRequest(); | ||||
request.setVideoId(videoId); | |||||
response = client.getAcsResponse(request); | |||||
List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList(); | |||||
//播放地址 | |||||
for (GetPlayInfoResponse.PlayInfo playInfo : playInfoList) { | |||||
return playInfo.getPlayURL(); | |||||
} | |||||
} catch (Exception e) { | |||||
log.error("getVedioUrl error.",e); | |||||
} | |||||
request.setVideoId(videoId); | |||||
response = client.getAcsResponse(request); | |||||
List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList(); | |||||
//播放地址 | |||||
for (GetPlayInfoResponse.PlayInfo playInfo : playInfoList) { | |||||
return playInfo.getPlayURL(); | |||||
} | |||||
} catch (Exception e) { | |||||
log.error("getVedioUrl error.",e); | |||||
} | |||||
return null; | return null; | ||||
} | } | ||||
@@ -195,4 +218,42 @@ public class AliyunVedioServer { | |||||
} | } | ||||
return null; | return null; | ||||
} | } | ||||
//查询转码任务详情 | |||||
//https://help.aliyun.com/document_detail/109342.html | |||||
public static GetTranscodeTaskResponse getTransTask(AliyunVideoConfig config,String taskId) throws ClientException { | |||||
DefaultAcsClient client = initVodClient(config); | |||||
try { | |||||
GetTranscodeTaskResponse response = new GetTranscodeTaskResponse(); | |||||
response = getTranscodeTask(client,taskId); | |||||
return response; | |||||
// //转码任务ID | |||||
// System.out.println("TranscodeTaskId = " + response.getTranscodeTask().getTranscodeTaskId()); | |||||
// //转码任务状态 | |||||
// System.out.println("TaskStatus = " + response.getTranscodeTask().getTaskStatus()); | |||||
// for (GetTranscodeTaskResponse.TranscodeTask.TranscodeJobInfo jobInfo : response.getTranscodeTask().getTranscodeJobInfoList()) { | |||||
// //转码作业ID | |||||
// System.out.println("TranscodeJobId = " + jobInfo.getTranscodeJobId()); | |||||
// //转码作业状态 | |||||
// System.out.println("TranscodeJobStatus = " + jobInfo.getTranscodeJobStatus()); | |||||
// //转码处理进度 | |||||
// System.out.println("TranscodeProgress = " + jobInfo.getTranscodeProgress()); | |||||
// //转码作业完成时间 | |||||
// System.out.println("CompleteTime = " + jobInfo.getCompleteTime()); | |||||
// | |||||
// } | |||||
} catch (Exception e) { | |||||
log.error("getTransTask error.",e); | |||||
} | |||||
return null; | |||||
// System.out.println("RequestId = " + response.getRequestId()); | |||||
} | |||||
private static GetTranscodeTaskResponse getTranscodeTask(DefaultAcsClient client,String taskId) throws Exception { | |||||
GetTranscodeTaskRequest request = new GetTranscodeTaskRequest(); | |||||
request.setTranscodeTaskId(taskId); | |||||
return client.getAcsResponse(request); | |||||
} | |||||
} | } |
@@ -0,0 +1,11 @@ | |||||
package com.iformall.video.entity; | |||||
import lombok.Data; | |||||
@Data | |||||
public class VideTransResult { | |||||
private String videoId; | |||||
private boolean success = false; | |||||
private String msg; | |||||
private String taskId; | |||||
} |
@@ -6,10 +6,15 @@ import lombok.Data; | |||||
public class VideUploadResult { | public class VideUploadResult { | ||||
private String videoId; | private String videoId; | ||||
private String videoUrl; | private String videoUrl; | ||||
private Long height; | |||||
private Long Width; | |||||
private String coverURL;//视频封面 | private String coverURL;//视频封面 | ||||
private String duration;//视频时长 | private String duration;//视频时长 | ||||
private String title;//视频标题 | private String title;//视频标题 | ||||
private String size;//视频大小 | private String size;//视频大小 | ||||
private boolean success = false; | private boolean success = false; | ||||
private String msg; | private String msg; | ||||
private boolean autoTrans;//是否自动转码 | |||||
} | } |