火山引擎提供一套自研的云端一体视频加密解决方案,采用私有加密算法,确保整个传输链路的安全性。相比 HLS 标准加密,私有加密更安全,使用门槛更低。本文为您介绍火山引擎私有加密的优势、架构、兼容性和使用流程。
火山引擎私有加密方案由加密转码和解密播放两个核心模块组成。
类型 | 格式 |
---|---|
Android | HLS、DASH、MP4、OPUS |
iOS | HLS、DASH、MP4、OPUS |
类型 | 格式 |
---|---|
H5 |
|
浏览器 |
|
经过火山引擎私有加密的视频,只能使用视频点播提供的播放器 SDK 对加密内容进行解密播放。
Native 端 Vid 模式下整体解密播放流程如下:
UnionInfo
是播放端从设备中提取的用于标识访问或设备唯一性的信息。可调用播放器 SDK 的 getEngineUniqueId 方法生成设备唯一标识。UnionInfo
发起播放请求。应用服务端通过视频点播服务端 SDK 本地签发包含 UnionInfo
的临时播放 Token,然后将包含 UnionInfo
的临时播放 Token 下发给客户端。签发临时播放 Token 的示例代码请见以下文档:
说明
签发临时播放 Token 时,除了 UnionInfo
参数,您还需指定 FileType
、Format
、Codec
、Definition
参数,确保 SDK 能够获取到加密文件地址。
PlayUrl
和加密后的播放密钥返回给播放器 SDK。说明
密钥通过 UnionInfo
二次加密,安全性更高。
PlayUrl
向 CDN 请求加密视频内容。UnionInfo
解密出真实的播放密钥,再使用密钥解密视频并播放。Native 端 DirectUrl 模式下整体解密播放流程如下:
生成 UnionInfo:调用播放器 SDK 的 getEngineUniqueId
方法生成 UnionInfo(设备唯一信息)。
发起播放请求:客户端携带 UnionInfo 向应用服务端发起播放请求。应用服务端通过视频点播服务端 SDK 调用 GetPlayInfo 接口获取视频播放地址及播放密钥。请求参数中,除了 UnionInfo
参数,您还需指定 FileType
、Format
、 Codec
、Definition
参数,确保 SDK 能够获取到加密文件地址。点播服务端会将视频地址以及加密后的播放密钥返回给应用服务端,即返回参数中的 MainPlayUrl
(视频播放地址)和 PlayAuth
(加密后的密钥)。具体示例代码,请见以下文档:
设置播放源:参考以下示例代码传入 MainPlayUrl
和 PlayAuth
设置播放源:
Android 播放器 SDK:
String videoId = "your video id";
// 视频地址
String url = "http://chw.byte-test.com/848e602532464e80984de05c01f6b5fa/main.m3u8?t=6356ce6e&sign=14db6f9cb85fce01bc8f8917218a1db4";
String playAuth = "l7wZ9Em+A/JKvQXASrkG6HmlMaWl"; // 使用服务端 SDK 获取的 playAuth
DirectUrlSource source = new DirectUrlSource.Builder()
.setVid(videoId)
.addItem(new DirectUrlSource.UrlItem.Builder()
.setUrl(url)
.setCacheKey(TTVideoEngine.computeMD5(url))
.setPlayAuth(playAuth)
.build())
.build();
iOS 播放器 SDK:
// 视频地址
NSString *url = @"http://***.byte-test.com/848e602532464e80984de05c01f6b5fa/main.m3u8?t=6356ce6e&exper=120&sign=c0b97ac806***ec7728974cbc00cd2b";
// 使用服务端 SDK 获取的 playAuth
NSString *playAuth = @"l7wZ9Em+A/JKvQXASrkG6HmlMaWl";
// cache key , 建议使用 url 的 md5 值
NSString *cacheKey = url.md5String;
TTVideoEngineUrlSource *urlSouce = [[TTVideoEngineUrlSource alloc] initWithUrl:url1 cacheKey:cacheKey];
urlSouce.decryptionKey = playAuth;
[self.videoEngine setVideoEngineVideoSource:urlSouce];
PlayUrl
向 CDN 请求加密视频内容。Web 播放器 SDK 仅支持通过 Vid 模式播放私有加密视频。整体解密播放流程如下:
unionId
、 getVideoByToken.playAuthToken
和 getVideoByToken.getDrmAuthToken
参数。示例代码请见播放私有加密视频。PlayUrl
、PlayAuthId
等信息。PlayAuthId
、Vid
、UnionInfo
向应用服务端请求获取私有加密 Token。应用服务端通过视频点播服务端 SDK 本地签发私有加密 Token,然后下发给客户端。具体请见以下文档:
说明
UnionInfo
是 SDK 使用您在实例化播放器时设置的 unionId
生成的,有效时长为 30 秒。
PlayAuthId
向点播密钥服务请求密钥。点播密钥服务解析出 UnionInfo
,使用 UnionInfo
对密钥进行二次加密,并返回给 Web 播放器 SDK。Web 播放器 SDK 使用 UnionInfo
解密出真实密钥。说明
密钥通过 UnionInfo
二次加密,安全性更高。
PlayUrl
向点播 CDN 请求加密视频内容。