| @@ -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;//是否自动转码 | |||||
| } | } | ||||