CRMEB知识付费二次开发 加密阿里云视频MP4点播链接为m3u8格式 hls blob协议

这篇具有很好参考价值的文章主要介绍了CRMEB知识付费二次开发 加密阿里云视频MP4点播链接为m3u8格式 hls blob协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

只有添加分发加速的域名才能使用HLS加密,同时也要做HTTPS证书添加,不然也会报错。
1、这是电脑端视频播放页面效果
CRMEB知识付费二次开发 加密阿里云视频MP4点播链接为m3u8格式 hls blob协议
2、这个手机端H5视频播放页面效果
CRMEB知识付费二次开发 加密阿里云视频MP4点播链接为m3u8格式 hls blob协议
3、在网站后台上传你的视频内容
CRMEB知识付费二次开发 加密阿里云视频MP4点播链接为m3u8格式 hls blob协议
4、上传完之后可以进行预览
CRMEB知识付费二次开发 加密阿里云视频MP4点播链接为m3u8格式 hls blob协议5、在阿里云控制台设置就好自己的转码模板
将不转码设为默认的原因是自动触发转码不支持HLS标准加密,所以需要先上传不转码,然后根据回调再去调用转码接口,实现手动转码
CRMEB知识付费二次开发 加密阿里云视频MP4点播链接为m3u8格式 hls blob协议
6、设置上传完成回调 - 用于手动转码
CRMEB知识付费二次开发 加密阿里云视频MP4点播链接为m3u8格式 hls blob协议
7、创建回调接口
可以用frp搭一个,然后就是正常的restful接口
回调是POST请求,然后请求体我是用 @RequestBody String body接收的,不知道为什么,用对象接收就是不行
请求转码需要用到KMS加密,因此需要准备文档中准备工作的第三步搭建密钥管理服务生成AES_128密钥

// 示例代码
技术开发QQ 
// getClient()是我封装的获取client对象的方法
IAcsClient client = getClient();
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysVersion("2016-01-20");
// 一定要和自己的服务地区相匹配
request.setSysDomain("kms.cn-shenzhen.aliyuncs.com");
request.setSysAction("GenerateDataKey");
// kms服务仅支持HTTPS
request.setSysProtocol(ProtocolType.HTTPS);
// 提交工单后,工作人员会帮你生成,前往KMS控制台就能看到
request.putQueryParameter("KeyId", "KMS控制台中的id");
request.putQueryParameter("KeySpec", "AES_128");
CommonResponse response = client.getCommonResponse(request);
// 封装了一个对象来存储aes_128
aes128 = JSON.parseObject(response.getData(), AliyunGenAes128Vo.class);
log.info("生成AES_128 {}", aes128);

8、请求转码

/**
 * 提交转码请求  技术开发QQ 
 */
public static void submitTranscodeJobs(String videoId) throws ClientException {
    IAcsClient client = getClient();
    CommonRequest request = new CommonRequest();
    request.setSysMethod(MethodType.POST);
    request.setSysDomain("vod.cn-shenzhen.aliyuncs.com");
    request.setSysVersion("2017-03-21");
    request.setSysAction("SubmitTranscodeJobs");
    // 转码模板
    request.putQueryParameter("TemplateGroupId", "转码模板id");
    request.putQueryParameter("VideoId", videoId);
    request.putQueryParameter("EncryptConfig", genEncryptConfigStr());
    CommonResponse response = client.getCommonResponse(request);
    log.info("发送转码请求成功 {}", response.getData());
}

/**
 * 获取加密配置字符串
 */
private static String genEncryptConfigStr() throws ClientException {
	// 上面生成的aes128对象
    AliyunGenAes128Vo aes128 = genAes128();
    AliyunEncryptConfig encryptConfig = new AliyunEncryptConfig();
    encryptConfig.setCipherText(aes128.getCiphertextBlob());
    encryptConfig.setKeyServiceType("KMS");
    // 自己的服务,等会创建接口
    encryptConfig.setDecryptKeyUri("http://test.abc.com/play?Ciphertext=" + aes128.getCiphertextBlob());
    String jsonString = JSON.toJSONString(encryptConfig);
    log.info("加密信息 {}", jsonString);
    return jsonString;
}

这样文件上传完成后就会转码生成加密文件了

9、开通加密播放
CRMEB知识付费二次开发 加密阿里云视频MP4点播链接为m3u8格式 hls blob协议
10、获取视频信息或凭证

/**
     * 获取视频信息 - 播放地址等  技术开发QQ 
     * @param videoId 阿里云视频id
     */
    public static AliyunPlayInfo getPlayInfo(String videoId) throws Exception {
        IAcsClient client = getClient();
        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        request.setSysDomain("vod.cn-shenzhen.aliyuncs.com");
        request.setSysVersion("2017-03-21");
        request.setSysAction("GetPlayInfo");
        request.putQueryParameter("VideoId", videoId);
        CommonResponse response = client.getCommonResponse(request);
        AliyunPlayInfo playInfo = JSON.parseObject(response.getData(), AliyunPlayInfo.class);
        JSONObject jsonObject = JSONObject.parseObject(playInfo.getInfoStr());
        String listJson = jsonObject.getString("PlayInfo");
        playInfo.setPlayInfoList(JSON.parseArray(listJson, AliyunPlayInfo.PlayInfo.class));
        return playInfo;
    }

11、获取上传凭证 - 用于上传视频

// AliStsResVo 自己封装的对象
public ReturnResult<AliUploadAuthResVo> uploadAuth(@RequestBody AliStsResVo vo) {
        // 点播服务所在的Region,接入服务中心为上海,则填cn-shanghai
        String regionId = "cn-shenzhen";
        IClientProfile profile = DefaultProfile.getProfile(regionId, vo.getKeyId(), vo.getKeySecret(), vo.getToken());
        DefaultAcsClient client = new DefaultAcsClient(profile);

        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        request.setSysDomain("vod.cn-shenzhen.aliyuncs.com");
        request.setSysVersion("2017-03-21");
        request.setSysAction("CreateUploadVideo");
        request.putQueryParameter("Title", vo.getFileName());
        request.putQueryParameter("FileName", vo.getFilePath());
        try {
            CommonResponse response = client.getCommonResponse(request);
            AliUploadAuthResVo uploadAuthResVo = JSON.parseObject(response.getData(), AliUploadAuthResVo.class);
            return ReturnResult.success(uploadAuthResVo);
        } catch (ClientException e) {
            e.printStackTrace();
            return ReturnResult.error();
        }
    }

12、上传凭证有效期为3000秒, 刷新凭证

public ReturnResult<AliUploadAuthResVo> refreshUploadAuth(@RequestBody AliStsResVo vo) {
        DefaultProfile profile = DefaultProfile.getProfile("cn-shenzhen", vo.getKeyId(), vo.getKeySecret(), vo.getToken());
        IAcsClient client = new DefaultAcsClient(profile);
        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        request.setSysDomain("vod.cn-shenzhen.aliyuncs.com");
        request.setSysVersion("2017-03-21");
        request.setSysAction("RefreshUploadVideo");
        request.putQueryParameter("VideoId", vo.getVideoId());

        try {
            CommonResponse response = client.getCommonResponse(request);
            AliUploadAuthResVo uploadAuthResVo = JSON.parseObject(response.getData(), AliUploadAuthResVo.class);
            return ReturnResult.success(uploadAuthResVo);
        } catch (Exception e) {
            e.printStackTrace();
            return ReturnResult.error();
        }
    }

13、CRMEB阿里云视频加密
设置上传完成回调 - 用于手动转码
CRMEB知识付费二次开发 加密阿里云视频MP4点播链接为m3u8格式 hls blob协议
15、获取视频凭证

/**
     *
     * @param videoId 阿里云视频id
     * @param timeout 凭证有效期 100-3000 秒
     */
    public static AliyunPlayAuth getPlayAuth(String videoId, String timeout) throws Exception {
        IAcsClient client = getClient();
        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        request.setSysDomain("vod.cn-shenzhen.aliyuncs.com");
        request.setSysVersion("2017-03-21");
        request.setSysAction("GetVideoPlayAuth");
        request.putQueryParameter("VideoId", videoId);
        request.putQueryParameter("AuthInfoTimeout", timeout);
        CommonResponse response = client.getCommonResponse(request);
        return JSON.parseObject(response.getData(), AliyunPlayAuth.class);
    }

16、用到的两个对象

@Data
@ApiModel("视频详细信息")
public class AliyunPlayInfo {
    @JSONField(name = "VideoBase")
    private VideoBase videoBase;
    @JSONField(name = "PlayInfoList")
    private String infoStr;
    private List<PlayInfo> playInfoList;


    @Data
    public static class VideoBase {
        @ApiModelProperty("阿里云视频id")
        @JSONField(name = "VideoId")
        private String videoId;
        @ApiModelProperty("封面地址")
        @JSONField(name = "CoverURL")
        private String coverURL;
        @ApiModelProperty("阿里云视频名")
        @JSONField(name = "Title")
        private String title;
        @ApiModelProperty("视频时长 秒")
        @JSONField(name = "Duration")
        private String duration;
    }
    @Data
    public static class PlayInfo {
        @ApiModelProperty("视频字节")
        @JSONField(name = "Size")
        private Long size;
        @ApiModelProperty("播放地址")
        @JSONField(name = "PlayURL")
        private String playURL;
        @ApiModelProperty("帧率")
        @JSONField(name = "Fps")
        private String fps;
        @ApiModelProperty("高")
        @JSONField(name = "Height")
        private String height;
        @ApiModelProperty("宽")
        @JSONField(name = "Width")
        private String width;
        @ApiModelProperty("FD:流畅。\n" +
                "LD:标清。\n" +
                "SD:高清。\n" +
                "HD:超清\n" +
                "OD:原画。\n" +
                "2K:2K。\n" +
                "4K:4K。\n" +
                "SQ:普通音质。\n" +
                "HQ:高音质。\n" +
                "AUTO:自适应码率。")
        @JSONField(name = "Definition")
        private String definition;
    }
}

@Data
@ApiModel("视频播放凭证")
public class AliyunPlayAuth {
    @JSONField(name = "PlayAuth")
    @ApiModelProperty("凭证")
    private String playAuth;
    @JSONField(name = "VideoMeta")
    @ApiModelProperty("视频信息")
    private AliyunPlayInfo.VideoBase videoMeta;
}

17、此时获取的视频是加密的
可以测试一下
前往阿里在线诊断地址
选择视频播放
将上面获取的视频的地址放到Source中,点击播放。F12查看网络请求, 发现它一直往第四步请求转码中genEncryptConfigStr()方法中设置的setDecryptKeyUri发送请求,所以需要搭建一个解密的接口

解密

@GetMapping("play")
    public void play(@RequestParam String Ciphertext, HttpServletResponse response) throws IOException {
        //从KMS中解密出来,并Base64 decode
        byte[] key = decrypt(Ciphertext);
        //设置header
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setStatus(200);
        response.setContentLength(key.length);
        //返回base64decode之后的密钥
        response.getOutputStream().write(key);
    }
    private byte[] decrypt(String ciphertext) {
        DecryptRequest request = new DecryptRequest();
        request.setCiphertextBlob(ciphertext);
        request.setSysProtocol(ProtocolType.HTTPS);
        try {
            DecryptResponse response = AliyunVideoUtils.getClient().getAcsResponse(request);
            String plaintext = response.getPlaintext();
            //注意:需要base64 decode
            return Base64.decodeBase64(plaintext);
        } catch (ClientException e) {
            e.printStackTrace();
            return null;
        }
    }

18、这样再次点击播放就能成功播放了
不过这里面我并没有进行安全认证,所以后续需要安全认证需要自己手动添加
设置URL鉴权
CRMEB知识付费二次开发 加密阿里云视频MP4点播链接为m3u8格式 hls blob协议
19、开启URL鉴权后,在生成视频地址后面就会增加一个auth_key
但是此时在点击视频播放就会出现跨域问题,因此需要在HTTP头这里设置
CRMEB知识付费二次开发 加密阿里云视频MP4点播链接为m3u8格式 hls blob协议

QQ技术交流 扫一下

CRMEB知识付费二次开发 加密阿里云视频MP4点播链接为m3u8格式 hls blob协议文章来源地址https://www.toymoban.com/news/detail-475922.html

到了这里,关于CRMEB知识付费二次开发 加密阿里云视频MP4点播链接为m3u8格式 hls blob协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 知识付费系统开发:构建高效智能的付费内容平台

    知识付费系统开发:构建高效智能的付费内容平台

    随着数字化时代的来临,知识付费正迅速崭露头角,为知识创作者和求知者带来了全新的商机。在这个背景下,开发一款高效智能的知识付费系统成为了一项重要的任务。本文将深入探讨如何基于Python编程语言和相关技术构建一个智能的知识付费内容平台。 首先,让我们考虑

    2024年02月13日
    浏览(10)
  • Jmeter二次开发实现rsa加密

    Jmeter二次开发实现rsa加密

    jmeter函数助手提供了大量的函数,像 counter、digest、random、split、strLen,这些函数在接口测试、性能测试中大量被使用,但是大家在实际工作,形形色色的测试需求不同,导致jmeter自带或者扩展插件给我们提供的函数无法全部满足,这个时候我们就可以自己动手, 对JMeter进行

    2024年02月08日
    浏览(6)
  • 机构企业学员培训知识付费小程序开源版开发

    机构企业学员培训知识付费小程序开源版开发

    机构企业学员培训知识付费小程序开源版开发 用户注册与登录:提供用户注册和登录功能,以便用户能够访问和使用小程序。 个人信息管理:允许用户管理个人资料,包括修改个人信息和上传个人头像。 课程浏览:提供课程列表,包括课程名称、简介、讲师信息和价格等详

    2024年02月09日
    浏览(14)
  • UG\NX二次开发 加密锁(加密狗)编写加密函数

     文章作者:里海 来源网站:王牌飞行员_里海的博客_CSDN博客-里海NX二次开发3000例,CC++,Qt领域博主 目录 加密锁简介 加密锁外观 开发资料 YT88 开发包

    2024年02月09日
    浏览(36)
  • 音视频知识:MPEG-4、H264、MP4、AAC之间的关系

    MPEG-4 一种编码标准。是国际标准化组织 (ISO) 主要针对消费类应用,已经针对运动图像压缩定义的标准。MPEG(Moving Picture Experts Group)标准包括 MPEG1、MPEG2与 MPEG4。 MPEG-4标准目前分为27个部分,统称为ISO/IEC14496国际标准。其中第10部分(ISO/IEC 14496-10)就是熟悉的高级视频编码

    2024年02月14日
    浏览(15)
  • Qt/C++音视频开发46-音视频同步保存到MP4

    用ffmpeg单独做视频保存不难,单独做音频保存也不难,难的是音视频同步保存到MP4中,重点是音视频要同步,其实这也不难,只要播放那边音视频同步后的数据,写入到文件即可。最难的是在播放过程中不断随机的切换播放进度,而且还会暂停播放、暂停录制的情况出现,这

    2024年02月17日
    浏览(13)
  • 【音视频开发】FFmpeg转换与封装 I - MP4格式

    【音视频开发】FFmpeg转换与封装 I - MP4格式

    1 FFmpeg转换与封装 1.1 MP4格式转换 1.1.1 MP4格式标准         FFmpeg支持的媒体封装格式具有多样性与全面性,与此, 我们还可以使用FFmpeg来对媒体格式进行转换与封装 。 在互联网常见的格式中,跨平台最好的应该是 MP4 文件,因为 MP4 文件既可以在PC 平台的Flashplayer中播放,

    2024年02月08日
    浏览(11)
  • Qt音视频开发47-文字和图片水印(可存储到MP4中)

    近期花了两周时间闭门啃硬骨头,主要就解决三个问题(音视频同步存储和推流、图片水印并将水印信息存储到文件或者推流、rtsp推流),这三个问题困扰了很多年,以至于找遍了网络和翻遍ffplay代码以及ffmpeg示例的代码,通过不下于上百次方案的调整和测试,几乎每次都是

    2024年02月16日
    浏览(17)
  • Revit二次开发知识分享(二十四)实现鼠标可视化跟随动画效果

    Revit二次开发知识分享(二十四)实现鼠标可视化跟随动画效果

    背景:群友询问:怎样子实现在批量选择完管道,在点击放置标签时,想有一个可视化跟随的动画效果。然后研究了一番,下面提供了一个简易版的实行方案,大家可以参考学习。 源码 实现如下图所示的选择完管件后,鼠标动画跟随效果 其中Rectangle是当前视图边框投影到屏

    2024年02月10日
    浏览(28)
  • 广和通l610二次开发|广和通l610 CAT.1模组opencpu开发《三》阿里云物联网平台mqtt动态注册

    广和通l610二次开发|广和通l610 CAT.1模组opencpu开发《三》阿里云物联网平台mqtt动态注册

    使用模组的IMEI作为设备的name,采用动态注册自动在案例云平台上注册设备 官网参考文档 硬件平台:广和通L610 opencpu模组 协议:mqtt支持TLS加密连接 平台:阿里物联网平台 平台中产品创建需要启用动态注册功能 说明 目前,动态注册只支持使用TLS建立连接,不支持TCP直连。动

    2024年02月11日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包