diff --git a/src/main/java/com/peanut/common/service/HlsDecryptService.java b/src/main/java/com/peanut/common/service/HlsDecryptService.java index 22bb8ac9..0fcb0642 100644 --- a/src/main/java/com/peanut/common/service/HlsDecryptService.java +++ b/src/main/java/com/peanut/common/service/HlsDecryptService.java @@ -25,11 +25,7 @@ import java.net.URI; import java.util.regex.Matcher; import java.util.regex.Pattern; -@Slf4j -@Service public class HlsDecryptService { - @Autowired - private PlayToken playToken; private static DefaultAcsClient client; static { @@ -79,7 +75,7 @@ public class HlsDecryptService { String token = getMtsHlsUriToken(httpExchange); boolean validRe = false; try { - validRe = playToken.validateToken(token); +// validRe = playToken.validateToken(token); } catch (Exception e) { throw new RuntimeException(e); } @@ -201,7 +197,6 @@ public class HlsDecryptService { // System.out.println("hls decrypt server started"); } - @PostConstruct public void init() throws IOException { // HlsDecryptService server = new HlsDecryptService(); serviceBootStrap(); diff --git a/src/main/java/com/peanut/common/utils/SpdbUtil.java b/src/main/java/com/peanut/common/utils/SpdbUtil.java index 639172f7..1ef0c880 100644 --- a/src/main/java/com/peanut/common/utils/SpdbUtil.java +++ b/src/main/java/com/peanut/common/utils/SpdbUtil.java @@ -1,5 +1,6 @@ package com.peanut.common.utils; +import com.alibaba.fastjson.JSONObject; import com.aliyun.tea.TeaException; import com.aliyun.teautil.models.RuntimeOptions; import com.aliyun.vod20170321.Client; @@ -150,6 +151,68 @@ public class SpdbUtil { } + public static void startM3u8(String vid,String edk){ + com.aliyun.vod20170321.models.SubmitTranscodeJobsRequest submitTranscodeJobsRequest = new com.aliyun.vod20170321.models.SubmitTranscodeJobsRequest(); + submitTranscodeJobsRequest.setVideoId(vid); + submitTranscodeJobsRequest.setTemplateGroupId("d346d2609a058b9dfd9b8bb392175721"); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("CipherText",edk); + jsonObject.put("DecryptKeyUri","http://59.110.212.44:8099?CipherText="+edk); + jsonObject.put("KeyServiceType","KMS"); + submitTranscodeJobsRequest.setEncryptConfig(jsonObject.toJSONString()); + com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); + try { + // 复制代码运行请自行打印 API 的返回值 + client.submitTranscodeJobsWithOptions(submitTranscodeJobsRequest, runtime); + } catch (TeaException error) { + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + } catch (Exception _error) { + TeaException error = new TeaException(_error.getMessage(), _error); + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + } + } + + + public static GetPlayInfoResponseBody getUrl(String vid){ + com.aliyun.vod20170321.models.GetPlayInfoRequest getPlayInfoRequest = new com.aliyun.vod20170321.models.GetPlayInfoRequest(); + getPlayInfoRequest.setVideoId(vid); + com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); + try { + // 复制代码运行请自行打印 API 的返回值 + GetPlayInfoResponse playInfoWithOptions = client.getPlayInfoWithOptions(getPlayInfoRequest, runtime); + GetPlayInfoResponseBody body = playInfoWithOptions.getBody(); + return body; + } catch (TeaException error) { + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + return null; + } catch (Exception _error) { + TeaException error = new TeaException(_error.getMessage(), _error); + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + return null; + } + } + + public static AssumeRoleResponse assumeRole() throws ClientException { diff --git a/src/main/java/com/peanut/modules/common/entity/CourseCatalogueChapterVideoEntity.java b/src/main/java/com/peanut/modules/common/entity/CourseCatalogueChapterVideoEntity.java index c5d1f5fd..b353c3e1 100644 --- a/src/main/java/com/peanut/modules/common/entity/CourseCatalogueChapterVideoEntity.java +++ b/src/main/java/com/peanut/modules/common/entity/CourseCatalogueChapterVideoEntity.java @@ -39,5 +39,7 @@ public class CourseCatalogueChapterVideoEntity { @TableField(exist = false) private String Mp4Url; @TableField(exist = false) + private String m3u8Url; + @TableField(exist = false) private String MtsHlsUriToken; } diff --git a/src/main/java/com/peanut/modules/master/controller/CourseController.java b/src/main/java/com/peanut/modules/master/controller/CourseController.java index 26062c3e..028cb619 100644 --- a/src/main/java/com/peanut/modules/master/controller/CourseController.java +++ b/src/main/java/com/peanut/modules/master/controller/CourseController.java @@ -1,8 +1,11 @@ package com.peanut.modules.master.controller; +import com.aliyun.vod20170321.models.GenerateKMSDataKeyResponseBody; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.peanut.common.utils.R; +import com.peanut.common.utils.SpdbUtil; +import com.peanut.modules.common.dao.VideoM3u8Dao; import com.peanut.modules.common.entity.*; import com.peanut.modules.common.to.EditCourseRecordDto; import com.peanut.modules.common.to.ParamTo; @@ -35,6 +38,8 @@ public class CourseController { private SysCourseDirectService sysCourseDirectService; @Autowired private ShopProductService shopProductService; + @Autowired + private VideoM3u8Dao videoM3u8Dao; @RequestMapping("/getCourseList") @@ -60,6 +65,19 @@ public class CourseController { return R.ok(); } + @RequestMapping("/pushM3u8Video") + public R pushM3u8Video(@RequestBody Map map) throws Exception { + String s = map.get("vid"); + GenerateKMSDataKeyResponseBody kms = SpdbUtil.KMS(); + VideoM3u8Entity videoM3u8Entity = new VideoM3u8Entity(); + assert kms != null; + videoM3u8Entity.setEdk(kms.getCiphertextBlob()); + videoM3u8Entity.setVid(s); + videoM3u8Dao.insert(videoM3u8Entity); + SpdbUtil.startM3u8(s,kms.getCiphertextBlob()); + return R.ok(); + } + @RequestMapping("/getCoursedetail") public R getCoursedetail(@RequestBody ParamTo param){ CourseEntity course = courseService.getById(param.getId()); diff --git a/src/main/java/com/peanut/modules/master/service/impl/CourseCatalogueChapterVideoServiceImpl.java b/src/main/java/com/peanut/modules/master/service/impl/CourseCatalogueChapterVideoServiceImpl.java index 1096ec7c..fce7f165 100644 --- a/src/main/java/com/peanut/modules/master/service/impl/CourseCatalogueChapterVideoServiceImpl.java +++ b/src/main/java/com/peanut/modules/master/service/impl/CourseCatalogueChapterVideoServiceImpl.java @@ -1,5 +1,6 @@ package com.peanut.modules.master.service.impl; +import com.aliyun.vod20170321.models.GetPlayInfoResponseBody; import com.aliyun.vod20170321.models.GetVideoPlayAuthResponse; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -109,7 +110,10 @@ public class CourseCatalogueChapterVideoServiceImpl extends ServiceImpl map){ + GetPlayInfoResponseBody urlbody = SpdbUtil.getUrl(map.get("vid")); + String url = urlbody==null?null:urlbody.getPlayInfoList().getPlayInfo().get(0).getPlayURL(); + return R.ok().put("result",url); + } + + @RequestMapping("/ttt") @SneakyThrows public R ttt(){ diff --git a/src/main/java/com/peanut/modules/sys/controller/VodAliController.java b/src/main/java/com/peanut/modules/sys/controller/VodAliController.java index 6834189d..9a748304 100644 --- a/src/main/java/com/peanut/modules/sys/controller/VodAliController.java +++ b/src/main/java/com/peanut/modules/sys/controller/VodAliController.java @@ -1,20 +1,39 @@ package com.peanut.modules.sys.controller; +import com.aliyun.vod20170321.models.DecryptKMSDataKeyResponseBody; +import com.peanut.common.utils.PlayToken; +import com.peanut.common.utils.SpdbUtil; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.Map; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; @Slf4j @RestController @RequestMapping("/sys/vodAli") public class VodAliController { + @Autowired + private PlayToken playToken; + @GetMapping("/vodAliVideoRe") + public String vodAliVideoRe(@RequestParam("CipherText") String cipherText, + @RequestParam("MtsHlsUriToken") String mtsHlsUriToken){ - @RequestMapping("/vodAliVideoRe") - public void vodAliVideoRe(@RequestBody Map map){ + boolean validRe = false; + try { + validRe = playToken.validateToken(mtsHlsUriToken); + } catch (Exception e) { + throw new RuntimeException(e); + } + if (!validRe) { + return "Illegal access"; + } + if (null == cipherText) + return "Illegal access"; + DecryptKMSDataKeyResponseBody decryptKMSDataKeyResponseBody = SpdbUtil.enKMS(cipherText); + return decryptKMSDataKeyResponseBody.getPlaintext(); } + + + }