前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WEB端—(旧版)HLS普通加密视频注意事项及常见问题

WEB端—(旧版)HLS普通加密视频注意事项及常见问题

原创
作者头像
榴莲很好吃
修改2020-09-23 11:21:58
2.8K0
修改2020-09-23 11:21:58
举报

重要提示:本篇加密文档为旧版加密文档,请使用新版加密播放(自适应码率的加密视频、并且不需要在业务侧写返回密钥逻辑的都是新版)的用户不要使用该文档提供的代码进行加密播放。

这篇文章是对加密过程中的细节及容易疏漏的地方进行补充和说明,在此之前,需要您对加密视频有一个大概了解,点击查看官方文档。

加密视频完整流程图
加密视频完整流程图

名词解释

密钥:又称key,用于加密/解密资源文件。

密钥服务器:客户端服务器,用于业务方管理密钥存储、分发的业务服务器,播放器在播放视频文件之前需要到该服务器获取密钥。

解密密钥服务器域名:又称getkeyurl,简称“解密密钥域名”,即密钥服务器的域名,在开通视频加密服务时需要将该域名登记到腾讯云云点播。

token:业务端用户的身份标识,播放器请求获取密钥时会携带token,密钥服务器对token进行鉴权,只有携带token合法的请求才能获得到密钥。

注意事项

1、解密密钥格式确认

解密密钥是一段长度为16字节的二进制数据,且开头和结尾不能为空白字符。

播放器播放加密视频流程图
播放器播放加密视频流程图

如何判断返回的密钥格式是否正确?

在浏览器器中打开开发者工具,在network里选择获取密钥的请求,如下图。如果返回的密钥长度不对或密钥前后有空白,则需要检查密钥服务器返回密钥的逻辑。

 查看密钥的步骤
查看密钥的步骤
查看密钥的长度
查看密钥的长度

2、“HLS普通加密”和“DRM商业加密”的调用参数区别

腾讯云目前推出了两种加密方案:1、HLS普通加密;2、DRM商业加密。

两种加密方案在Web播放器里播放时需要配置的参数有区别,参数配置不对会导致无法播放加密视频。

HLS普通加密代码示例:

代码语言:javascript
复制
var player = TCPlayer('player-container-id', {
    fileID: '', // 请传入需要播放的视频 filID(必须)
    appID: '' // 请传入点播账号的 appID(必须)
});

HLS普通加密里的token属于非必填参数,如需使用token可以点击查看demo。

DRM商业加密代码示例:

代码语言:javascript
复制
var player = TCPlayer('player-container-id', {
     appID: '', // 请传入点播账号的 appID(必须)
     fileID: '', // 请传入需要播放的视频 fileID(必须)
     playDefinition: '' // 请传入播放模版,播放 DRM 内容必须
     plugins: {
         DRM: {
             token: '', // 传入您的后台服务签发的 token,播放 DRM 内容必须
             certificateUri: '', // 传入 FairPlay 证书的下载地址,播放 FairPlay 加密内容必须
             }
     }
 });

3、浏览器跨域访问处理

如果含播放器的Web页面的域名(或者Flash插件的域名)与密钥服务器域名不一致,则密钥服务器需要配置 CORS 策略(或corssdomain.xml),允许 JavaScript 和 Flash 插件跨域获取解密密钥。

跨域的场景分两种:H5模式和Flash模式

H5模式(Chrome、Firefox或其他浏览器极速模式下是H5模式)

如果播放页面与解密密钥服务器域名不一致,这个时候需要在密钥服务器配置 CORS 策略,允许 JavaScript 跨域获取解密密钥。

 播放页面与解密密钥域名不一致的报错
播放页面与解密密钥域名不一致的报错

CORS 策略配置参考:

代码语言:javascript
复制
<CORSConfiguration>
 <CORSRule>
 <AllowedMethod>HEAD</AllowedMethod>
 <AllowedMethod>POST</AllowedMethod>
 <AllowedMethod>GET</AllowedMethod>
 <AllowedMethod>PUT</AllowedMethod>
 <AllowedMethod>DELETE</AllowedMethod>
 <AllowedOrigin>*</AllowedOrigin>
 <AllowedHeader>*</AllowedHeader>
 <MaxAgeSeconds>7200</MaxAgeSeconds>
 <ExposeHeader>ETag</ExposeHeader>
 <ExposeHeader>x-cos-request-id</ExposeHeader>
 </CORSRule>
</CORSConfiguration>

Flash模式下(IE浏览器及其他浏览器兼容模式下是Flash模式)

1、如果 Flash 插件地址 与密钥服务器的域名不一致,则需要在密钥服务器的 Web 服务根目录配置 corssdomain.xml ,允许 Flash 跨域获取解密密钥。

corssdomain.xml 配置参考如下:

代码语言:javascript
复制
<?xml version=”1.0″ encoding="UTF-8"?>
<cross-domain-policy>
 <allow-access-from domain="*" />
</cross-domain-policy>

注:腾讯云Web播放器的 Flash 插件文件默认存放在 imgcache.qq.com 域名下,可自行下载 swf 文件并部署到自己的 Web 服务器上。

2、播放页面与解密密钥服务器协议不一致。

在 Flash 模式下,注意保证协议一致。如果播放页面的协议是 http,而获取解密密钥地址的协议是 https,播放器到密钥服务器获取解密密钥时会被浏览器拦截,导致无法播放。

4、返回的密钥是 gzip 压缩过的

如果在密钥服务器的 Web 服务中配置过 gzip 压缩(或其他压缩方式),直接使用压缩后的密钥会导致解密失败,需要业务方先自行解压,返回给播放器非压缩形式的密钥来进行解密。

如何检查密钥是否经过压缩?

打开浏览器的开发者工具,在network里选择获取密钥的请求,如下图,查看请求的Response Headers 中是否带有 Content-Encoding:gzip(或其他压缩方式)。若返回正常的密钥,则 Response Headers 中的 Content-Length 为 16 字节。

 返gzip形式压缩的响应
返gzip形式压缩的响应
 返回正常的密钥长度
返回正常的密钥长度

5、视频只能进行一次加密,不可多次加密

若一个视频进行转码加密超过一次,会导致视频无法播放。

6、密钥服务器的获取密钥逻辑问题

HLS 方式播放的视频是由若干个 TS 分片组成,在大部分安卓微信端进行播放时,每加载一个 TS 分片都需要获取一次密钥解密,如果密钥服务器上获取密钥的接口只允许一次请求,会导致视频播放几秒后无法播放。

常见问题

Q1:播放器怎么播放加密视频?

当播放器获取到加密视频时,会发送请求到解密密钥服务器获取密钥,然后解密播放。发送请求获取密钥以及解密播放的工作由播放器完成,返回密钥的工作由业务端服务器完成。

Q2:token 参数是否必填?

token 不是必填参数。

加密视频在转码时就已进行过加密操作,token 是客户端播放器访问加密视频时的鉴权操作,如果不需要客户端再进行鉴权,可以不填写。

Q3:怎样将 token 传给播放器?

目前腾讯云Web点播播放器有两个,传递token如下:

A、通过腾讯云Web超级播放器通过参数传递,参考示例:

代码语言:javascript
复制
var player = TCPlayer('player-container-id', {
    fileID: '', // 请传入需要播放的视频 filID(必须)
    appID: '' // 请传入点播账号的 appID(必须)
    plugins:{
      HLSToken: {
        token: ''//传入token
        }
       }
 });

B、通过腾讯云TCPlayerLite播放则需要将token拼接到视频url里面,再将视频url传给播放器。

Q4:HLS普通加密是否支持和Key防盗链一起使用?

答:支持。

参考示例:

代码语言:javascript
复制
var player = TCPlayer('player-container-id', {
     fileID: '', // 请传入需要播放的视频 filID(必须)
     appID: '', // 请传入点播账号的 appID(必须)
     t: '',
     us: '',
     sign:''
});

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 重要提示:本篇加密文档为旧版加密文档,请使用新版加密播放(自适应码率的加密视频、并且不需要在业务侧写返回密钥逻辑的都是新版)的用户不要使用该文档提供的代码进行加密播放。
  • 名词解释
  • 注意事项
    • 1、解密密钥格式确认
      • 2、“HLS普通加密”和“DRM商业加密”的调用参数区别
        • 3、浏览器跨域访问处理
          • 4、返回的密钥是 gzip 压缩过的
            • 5、视频只能进行一次加密,不可多次加密
              • 6、密钥服务器的获取密钥逻辑问题
              • 常见问题
                • Q1:播放器怎么播放加密视频?
                  • Q2:token 参数是否必填?
                    • Q3:怎样将 token 传给播放器?
                      • Q4:HLS普通加密是否支持和Key防盗链一起使用?
                      相关产品与服务
                      文件存储
                      文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档