本文为您提供了SDK加密播放的操作步骤及说明,通过本文您可以了解如何进行视频SDK加密以及相关设置。

基本介绍

阿里云视频点播已经有一套完善的机制保障视频内容的安全、不被盗链、非法下载和传播,安全机制如下表:
安全机制 安全手段 特点 安全等级 使用门栏
访问限制 Referer、UA黑白名单 基于HTTP Header跟踪来源,但极易伪造 低,仅云端配置
IP黑白名单 拒绝或只允许特定IP访问、不适合大量C端用户的分发 较低 低,仅云端配置
URL访问次数、独立IP数限制 设置访问上线,不适合大量分发也无法识别合法访问 较低 低,仅云端配置
播放中心鉴权 URL鉴权、URL时效控制 生成动态变化的加密URL,可自定义过期时效 较低,通过API获取动态地址,或根据Key自动生成
业务方二次鉴权 透传业务请求信息给客户自定义鉴权中心来判断合法性 业务方更懂自己的用户:客户添加自定义的业务请求信息,通过自建鉴权中心,更加精准识别合法请求 较高 较高,需部署鉴权中心,并确保高可用
视频加密 阿里云视频加密(私有加密) 云端一体的视频加密解决方案,采用私有加密算法,确保链路的安全传输 较低,简单配置+集成阿里云播放器即可
HLS标准加密 HLS标准加密方案,使用AES-128进行内容加密,适配所有HLS播放器,但密钥易被窃取 较高 高,需自建密钥管理令牌颁发服务,并确保链路传输安全
商业DRM 支持多种DRM技术:
  • China DRM
  • 微软Playready
  • 苹果Fairplay
  • 谷歌Widevine
  • Marlin
各平台原生支持确保安全性
高u单独购买License,集成特定SDK

Referer访问控制

基于HTTP协议支持的Referer机制,通过 Referer跟踪来源,对来源进行识别和判断,用户可配置访问的 Referer 黑、白名单(二者互斥)来限制视频资源被访问的情况。
  • 阿里云控制台支持黑名单和白名单两种模式,访客对资源发起请求后,请求到达CDN 节点,节点会根据用户预设的防盗链黑名单或白名单进行过滤,符合规则可顺利请求到视频数据;若不符合,请求会被拒绝,并返回403响应码。
  • 配置后会自动添加泛域名支持,例如填写a.com,最终配置生效的是*.a.com,所有子级域名都会生效。
  • 由于移动端一般拿不到Referer,当前默认支持空Referer访问,可选择关闭。
控制台配置页面如下:控制台

播放器referer接口

阿里云播放器提供了Referer的设置。 比如:控制台设置的白名单为:aliyun.com 。
  • Android端,示例如下:
    AliPlayer player = AliPlayerFactory.createAliPlayer(context);
    ....
    //获取播放器参数
    PlayerConfig config = player.getConfig();
    //设置referrer。注意:加上http(s)://的协议头
    config.mReferrer = "http://aliyun.com";
    //设置回播放器
    player.setConfig(config);
  • iOS端,示例如下:
    //获取播放器参数
    AVPConfig* config = [self.player getConfig];
    //设置referrer。注意:加上http(s)://的协议头
    config.referer = @"http://aliyun.com";
    //设置回播放器
    [self.player setConfig:config];
    [self.player setStsSource:self.stsSource];
    [self.player prepare];

视频加密播放

防盗链安全机制能有效保障用户的合法访问,但对于付费观看视频的场景,用户只需通过一次付费行为拿到视频合法的防盗链播放URL,将视频下载到本地,进而实现二次分发。因此,防盗链方案对于视频版权保护是远远不够的。视频文件一旦泄露,会给付费观看模式造成十分严重的经济损失。

阿里云视频加密是对视频数据加密,即使下载到本地,视频本身也是被加密的,无法恶意二次分发,可有效防止视频泄露和盗链问题。

  • 阿里云私有加密
    阿里云视频加密采用私有的加密算法和安全传输机制,提供云端一体的视频安全方案,核心部分包括加密转码解密播放。示意图如下:示意图
    • 核心优势
      • 每个媒体文件拥有独立的加密钥匙,能有效避免采用单一密钥时,一个密钥的泄露引起大范围的安全问题。
      • 提供信封加密机制“密文Key+明文Key”,仅密文Key入库,明文Key不落存储,所有过程只在内存中,用完即销毁。
      • 提供安全的播放器内核SDK,涵盖iOS/Android/多平台,自动对加密内容进行解密播放。
      • 播放器和云端使用私有加密协议进行密文传输,不传输明文Key,有效防止密钥被窃取。
      • 提供安全下载,缓存到本地的视频会再次加密,在确保无网离线播放前提下,防止视频被拷贝窃取。
      注意 阿里云视频加密仅支持输出HLS格式,且只能使用阿里云播放器。更多信息请参见阿里云视频加密
    • 如何播放私有加密

      阿里云播放器将内部解密逻辑、服务端交互逻辑都封装到了SDK内部。播放加密视频和普通方式没有区别,不用做多余属性的设置,只需要通过videoId的播放方式集成播放器播放视频即可。 所以您只需要配置加密转码即可,您可以零成本使用加密播放。

  • HLS标准加密
    HLS标准加密支持HTTP Live Streaming中规定的通用加密方案,使用AES-128对视频内容本身进行加密,同时能支持所有的HLS播放器,您可选择使用自研或开源的播放器。相比私有加密方案灵活性更好,但使用门槛更高、安全性更低,流程图如下:流程图
    1. 搭建密钥管理服务,提供密钥生成(用于转码时对视频内容进行加密)和解密服务(用于播放时获取解密密钥),也可基于阿里云KMS进行封装。
    2. 提供令牌颁发服务,用于验证播放端的身份,避免解密密钥被非法获取。
    3. 播放器和云端传输明文Key,容易被窃取。更多内容,请参见HLS标准加密
  • 如何播放HLS标准加密

    阿里云播放器支持用户令牌传递,阿里CDN会动态修改m3u8文件中的解密URI,解密URI中会带上用户的令牌,业务方可以对令牌进行验证。

  • STS设置HlsUriToken
    • Android端:通过VidSts播放源来设置playConfig,playConfig中携带mtsHlsUriToken参数。示例如下:
      VidSts vidsts = new VidSts();
      VidPlayerConfigGen playerConfig = new VidPlayerConfigGen();
      //设置用户令牌
      playerConfig.setMtsHlsUriToken("用户令牌");
      vidsts.setPlayConfig(playerConfig);
    • iOS端:通过AVPVidStsSource播放来设置playConfig,playConfig中携带mtsHlsUriToken参数。示例如下:
      - (instancetype)initWithVid:(NSString *)vid
                      accessKeyId:(NSString *)accessKeyId
                  accessKeySecret:(NSString *)accessKeySecret
                    securityToken:(NSString *)securityToken
                           region:(NSString *)region
                      playConfig:(NSString *)playConfig;
      - (void)setStsSource:(AVPVidStsSource*)source;
    • 生成playConfig参数
      SDK中提供了一个类:VidPlayerConfigGenerator,通过这个类的setHlsUriToken来设置令牌,然后最终通过generatePlayerConfig接口来生成playConfig。示例如下:
      -(void) setHlsUriToken:(NSString*)MtsHlsUriToken;
      -(NSString*) generatePlayerConfig;

PlayAuth设置HlsUriToken

  • Android端:通过VidAuth播放源来设置playConfig,playConfig中携带mtsHlsUriToken参数。示例如下:
    VidAuth vidauth = new VidAuth();
    VidPlayerConfigGen playerConfig = new VidPlayerConfigGen();
    //设置用户令牌
    playerConfig.setMtsHlsUriToken("用户令牌");
    vidauth.setPlayConfig(playerConfig);
  • iOS端:通过AVPVidAuthSource播放来设置playConfig,playConfig中携带mtsHlsUriToken参数。示例如下:
    - (instancetype)initWithVid:(NSString *)vid
            playAuth:(NSString *)playAuth
              region:(NSString *)region
              playConfig:(NSString *)playConfig;
    - (void)setAuthSource:(AVPVidAuthSource*)source;
  • 生成playConfig参数
    SDK中提供了一个类:VidPlayerConfigGenerator,通过这个类的setHlsUriToken来设置令牌,然后最终通过generatePlayerConfig接口来生成playConfig。示例如下:
    -(void) setHlsUriToken:(NSString*)MtsHlsUriToken;
    -(NSString*) generatePlayerConfig;

MPS设置HlsUriToken

  • Android端:创建VidMps对象后,通过调用setHlsUriToken方法设置,然后传递给播放器播放即可。示例如下:
    VidMps vidmps = new VidMps();
    //设置用户令牌
    vidmps.setHlsUriToken("用户令牌");
    ... // vidmps的其他设置。
    
    AliPlayer player = AliPlayerFactory.createAliPlayer(context);
    //设置vidmps到播放器
    player.setDataSource(vidmps);
    ...//播放器的其他设置
  • iOS端:通过AVPVidMpsSource播放来设置mtsHlsUriToken。示例如下:
    - (instancetype)initWithVid:(NSString*)vid
                     accId:(NSString *)accId
                 accSecret:(NSString*)accSecret
                  stsToken:(NSString*)stsToken
                  authInfo:(NSString*)authInfo
                    region:(NSString*)region
                playDomain:(NSString*)playDomain
            mtsHlsUriToken:(NSString*)mtsHlsUriToken;
    - (void)setMpsSource:(AVPVidMpsSource*)source;