阿里云视频加密(又称阿里云私有加密)可针对直播流进行加密,本文介绍优势、整体架构和使用方法。
仅支持输出HLS格式和FLV格式。
只能使用阿里云播放器。
H5端支持情况参见H5浏览器适配说明中阿里云私有加密视频播放功能项。
背景
防盗链URL不能防止用户通过一次付费行为拿到付费直播合法的防盗链URL,进而实现二次分发。因此,防盗链方案对于直播的版权保护是远远不够的。
优势介绍
阿里云视频加密是对视频数据加密,即使下载到本地,视频本身也是被加密的,无法恶意二次分发。视频加密可有效防止视频泄露和盗链问题,广泛用于在线教育、财经金融、行业培训、独播剧等在线版权视频领域。
采用阿里云私有加密算法,安全级别高,能够便捷、高效、安全地保护视频资源。
每个媒体文件拥有独立的加密钥匙,能有效避免采用单一密钥时,一个密钥的泄露引起大范围的安全问题。
视频直播提供完善的权限管理机制“子账号+播放凭证”。
视频直播提供信封加密机制”密文Key+明文Key”,明文Key不存储,所有过程只在内存中。
视频直播提供安全的播放内核SDK。
整体架构
阿里云视频加密方案包含两部分:加密转码+解密播放。
加密转码:流程1~3。
主播推流到直播中心后,直播服务负责通过密钥管理服务KMS生成明文Key和密文Key。通过直播转码服务,使用明文密钥对音视频进行对称加密,并将密文Key存入视频封装。
解密播放:流程4~11。
播放终端如需播放此直播流,需向应用服务器AppServer发起播放请求,获取播流URL。使用播流URL向直播服务请求视频流。直播服务将经过转码的加密视频和密文Key传输到播放器SDK。
播放终端用密文Key向直播服务获取二次加密后的明文Key,直播服务再通过密文Key向密钥管理服务KMS获取明文Key。播放终端将解密得到的明文Key传给播放器SDK,播放器SDK解密视频进行播放。
使用方式
阿里云视频加密是通过转码模板进行配置,可支持控制台和API两种配置方式。
使用阿里云视频加密需要配置KMS密钥ID,如果没有密钥,请先前往KMS服务创建一个密钥,需注意创建密钥时KMS密钥的区域需要和域名的直播中心保持一致。具体操作,请参见创建密钥。
方式一:通过视频直播控制台。具体操作,请参见通用转码、自定义转码。
方式二:API调用。
配置视频加密转码模板,可调用AddLiveStreamTranscode添加通用转码配置信息或调用AddCustomLiveStreamTranscode添加自定义转码配置信息,设置加密配置参数
EncryptParameters
,其中EncryptType
加密类型取值aliyun
。Java SDK添加通用转码配置代码示例如下:
//需要<>内容替换成实际使用的值 DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>"); IAcsClient client = new DefaultAcsClient(profile); AddLiveStreamTranscodeRequest addLiveStreamTranscodeRequest = new AddLiveStreamTranscodeRequest(); addLiveStreamTranscodeRequest.setDomain("<DomainName>"); addLiveStreamTranscodeRequest.setApp("<AppName>"); //转码模板 addLiveStreamTranscodeRequest.setTemplate("<Template>"); //加密配置,EncryptType:固定值aliyun,KmsKeyID:KMS主密钥ID,KmsKeyExpireInterval:换Key周期,取值范围:60~3600,单位:秒 addLiveStreamTranscodeRequest.setEncryptParameters("{\"EncryptType\": \"aliyun\", \"KmsKeyID\":\"<KmsKeyID>\",\"KmsKeyExpireInterval\":\"<60>\"}"); // //其他业务代码 // try { AddLiveStreamTranscodeResponse addLiveStreamTranscodeResponse = client.getAcsResponse(addLiveStreamTranscodeRequest); System.out.println(new Gson().toJson(addLiveStreamTranscodeResponse)); // todo something. } catch (ServerException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClientException e) { // TODO Auto-generated catch block e.printStackTrace(); }
说明如果更改转码配置,需要进行重新推流后配置才可生效。
使用JAVA SDK,具体请参见Java SDK使用说明。
其他相关API。
API名称
说明
调用UpdateLiveStreamTranscode更新通用转码配置信息。
调用UpdateCustomLiveStreamTranscode更新自定义转码配置信息。
调用DescribeLiveStreamTranscodeInfo查询转码配置信息。
调用DeleteLiveStreamTranscode删除转码配置信息。
相关文档
使用视频加密,会自动创建AliyunServiceRoleForLiveKes角色获取KMS服务访问权限,更多信息请参见直播加密服务关联角色。