专栏首页沈唁志使用腾讯云云点播对视频进行HLS加密

使用腾讯云云点播对视频进行HLS加密

加密并不是百分百不会泄露,只是增加直接获取被加密资源的代价,别人录屏等等也是可以的,防不胜防

这里我们说一下使用腾讯云云点播对视频进行HLS加密,云点播提出了一套基础级别的 DRM(数字版权管理) 方案,使用 HLS 的普通 AES 加密技术对视频内容加密,保障内容安全

什么是HLS普通加密方案,这里就不说了,感兴趣的查看腾讯云文档,开发之前还是要好好读腾讯云文档,有很多暗坑

虽然文档有这么长,看了几遍,加上期间提交工单询问一些事情,总结一下五步就可以完成HLS加密

  1. 创建 HLS 普通加密模板
  2. 对需加密视频进行加密转码
  3. 前端利用 tcplayer(或者超级播放器)播放视频;
  4. 播放器自动请求 getkeyurl 获取 dk,getkeyurl 根据业务侧逻辑确认是否返回 dk;
  5. 成功返回 dk 播放器自动解码播放。

封装了一个composer包,直接使用就可以了

安装

composer require sy-records/vod-hls

使用方法

1. 创建 HLS 普通加密模板

/**
 * 创建 HLS 普通加密模板
 * @url https://cloud.tencent.com/document/product/266/35167
 */
$config = [
    "Action" => "CreateSimpleAesTemplate", // 接口指令的名称
    "get_key_url" => "", // HLS 普通加密模板的 GetKeyURL 必须https
    "Region" => "", // 区域参数
    "Timestamp" => time(), // 当前 UNIX 时间戳
    "Nonce" => uniqid(), // 随机正整数,与 Timestamp 联合起来, 用于防止重放攻击
    "SecretId" => "", // 由腾讯云平台上申请的标识身份的 SecretId
];

$secretKey = ""; // 由腾讯云平台上申请的标识身份的SecretKey 需要生成签名

$data = Core::getCloudData($config, $secretKey);

2. 通过 ProcessFile 接口发起视频加密

/**
 * 通过 ProcessFile 接口发起视频加密
 * @url https://cloud.tencent.com/document/product/266/9642
 */
$config = [
	"Action" => "ProcessFile",
	"fileId" => "", // 文件 ID
	"transcode.definition.0" => 230, // 转码输出模板号
	"transcode.drm.definition" => 10, // 视频加密控制参数,加密方式;
	"Region" => "", // 区域参数
	"Timestamp" => time(), // 当前 UNIX 时间戳
	"Nonce" => uniqid(), // 随机正整数,与 Timestamp 联合起来, 用于防止重放攻击
	"SecretId" => "", // 由腾讯云平台上申请的标识身份的 SecretId
	"notifyMode" => "Finish" // 任务流状态变更通知模式任务流状态变更通知模式。
];

$secretKey = ""; // 由腾讯云平台上申请的标识身份的SecretKey 需要生成签名

$data = Core::getCloudData($config, $secretKey);

3. 获取视频信息(获取EDK) 获取 EDK 时,drm 内容需要在视频转码完成后获取,需要依靠视频转码完成回调,或多次请求 GetVideoInfo,或提前加密延时获取EDK

/**
 * 获取视频信息
 * @url https://cloud.tencent.com/document/product/266/8586
 */
$config = [
	"Action" => "GetVideoInfo",
	"fileId" => "", // 文件 ID
	"Region" => "", // 区域参数
	"Timestamp" => time(), // 当前 UNIX 时间戳
	"Nonce" => uniqid(), // 随机正整数,与 Timestamp 联合起来, 用于防止重放攻击
	"SecretId" => "", // 由腾讯云平台上申请的标识身份的 SecretId
	"notifyMode" => "Finish" // 任务流状态变更通知模式任务流状态变更通知模式。
];

$secretKey = ""; // 由腾讯云平台上申请的标识身份的SecretKey 需要生成签名

$data = Core::getCloudData($config, $secretKey);

4. 根据业务侧逻辑确认是否返回 dk

/**
 * getkeyurl获取dk
 * @url https://cloud.tencent.com/document/product/266/9643
 */
$config = [
	"Action" => "DescribeDrmDataKey",
	"edkList.0" => "", // 视频edk
	"Region" => "", // 区域参数
	"Timestamp" => time(), // 当前 UNIX 时间戳
	"Nonce" => uniqid(), // 随机正整数,与 Timestamp 联合起来, 用于防止重放攻击
	"SecretId" => "", // 由腾讯云平台上申请的标识身份的 SecretId
];

$secretKey = ""; // 由腾讯云平台上申请的标识身份的SecretKey 需要生成签名

$data = Core::getCloudData($config, $secretKey);

$res = json_decode($data,true);

// 需要进行decode还原为二进制
echo base64_decode($res['data']['keyList'][0]['dk']); 

EDK 和 DK 关系一一对应,可直接缓存,至此,业务方成功返回 dk,播放器自动解码播放 ?

Github项目地址:sy-records/vod-hls

沈唁志,一个PHPer的成长之路! 任何个人或团体,未经允许禁止转载本文:《使用腾讯云云点播对视频进行HLS加密》,谢谢合作!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 走进安卓的重灾区----video

    html5的video已经出来很久了。在ios上使用基本上没什么毛病,但是安卓下就是一个重灾区了,各种体验差。这几天搞了安卓的兼容,简直是要吐血。所以特意总结了...

    winty
  • 腾讯云视频云(点播&直播)产品月刊(2019.12)

    适用对象:适用于需要实现在不同网络环境下,自动调节分辨率从而保证观众流畅观看的客户。

    腾讯云视频
  • 超前点播引发风波,视频平台变现不易

    12月11日热播剧《庆余年》终于迎来更新,会员可以先睹为快,腾讯视频和爱奇艺同时向VIP会员推出的特别服务超前点播引发较大热议,成为2019年视频行业一大“话题...

    罗超频道
  • 基于三维卷积神经网络的全参考视频质量评估算法

    在腾讯,我们有多个视频业务线,点播视频有腾讯视频,企鹅影视;短视频有微视,K歌;直播类有Now直播,企鹅电竞;实时传输类有QQ和微信的音视频通话,无线投屏和腾讯...

    今日份的嘤嘤怪
  • uni-app微信小程序开发之引入腾讯视频小程序播放插件

    目录导航 登录微信小程序管理后台添加腾讯视频播放插件:  在uni-app中引入插件代码: 指定整个小程序可使用: 指定到对应的分包中使用: 在pages.j...

    腾讯NEXT学位
  • 腾讯云直播+点播全线产品支持AV1,带来极致视频体验

    日前,腾讯视频云直播、点播、媒体处理全线产品均已支持AV1标准,据悉,腾讯云也是国内首家直播+点播同时支持AV1视频处理业务的公有云厂商。 据悉,AV1(Al...

    腾讯云视频
  • 60个Chrome神器插件大收集:助你快速成为B站老司机,一键分析网站技术栈

    目标是为优秀的Chrome插件写一本中文说明书, 让Chrome插件英雄们造福人类。

    量子位
  • 学习|Android播放网络视频综合运用

    随着生活节奏的增加,短视频已经开始慢慢替代公众号软文的情况了,就像我自己发的文章也会经常放一些自己剪辑的效果视频,所以这一篇我们就主要学习一下Andriod的A...

    Vaccae
  • FFmpeg-音视频产品不容忽视的隐形王者

    目前,业界的视频播放主要有三种架构:MPC, MPlayer和VLC,占据市场90%的份额。而三个架构均使用或者融合FFmpeg的视频解码技术。FFmpeg犹...

    用户5521279

扫码关注云+社区

领取腾讯云代金券