文档

视频加密播放

更新时间:

阿里云提供了私有加密和HLS标准加密两种视频加密播放解决方案,以保护视频版权和防止盗版分发。本文为您介绍视频加密播放的阿里云私有加密和HLS标准加密的应用。

背景信息

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

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

阿里云私有加密

阿里云视频加密采用私有的加密算法和安全传输机制,提供云端一体的视频安全方案,该方案主要包括两个关键环节:视频的加密转码以及解密播放 。阿里云具体的私有加密流程如下图所示。

image

如何播放私有加密?

阿里云播放器将内部解密逻辑、服务端交互逻辑都封装到了SDK内部,用户无需感知此过程。播放加密视频和普通方式没有区别,无需进行额外的属性设置,只需要通过videoId的播放方式集成播放器播放视频即可。因此,用户只需要配置加密转码即可实现零成本使用加密播放。

阿里云私有加密的核心优势

  • 每个媒体文件拥有独立的加密钥匙,能有效避免采用单一密钥时,一个密钥的泄露引起大范围的安全问题。

  • 提供信封加密机制“密文Key+明文Key”,仅密文Key入库,明文Key不落存储,所有过程只在内存中,用完即销毁。

  • 提供安全的播放器内核SDK,涵盖iOS/Android/多平台,自动对加密内容进行解密播放。

  • 播放器和云端使用私有加密协议进行密文传输,不传输明文Key,有效防止密钥被窃取。

  • 提供安全下载,缓存到本地的视频会再次加密,在确保无网离线播放前提下,防止视频被拷贝窃取。

重要

阿里云视频加密仅支持输出HLS格式,且只能使用阿里云播放器。

更多信息参考 阿里云-视频加密

HLS标准加密

HLS标准加密支持HTTP Live Streaming中规定的通用加密方案,使用AES-128对视频内容本身进行加密,同时能支持所有的HLS播放器,用户可选择使用自研或开源的播放器。相比私有加密方案,灵活性更好,但使用门槛更高、安全性更低。HLS标准加密流程如下图所示。

image
  • 用户需搭建密钥管理服务,提供密钥生成(用于转码时对视频内容进行加密)和解密服务(用于播放时获取解密密钥),也可基于阿里云KMS进行封装。

  • 用户需提供令牌颁发服务,用于验证播放端的身份,避免解密密钥被非法获取,此处为关键点,处理不好会千里之堤溃于蚁穴。

  • 播放器和云端传输明文Key,容易被窃取。

具体可以参考HLS标准加密流程

如何播放HLS标准加密?

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

通过STS、PlayAuth和MPS设置HlsUriToken的方法如下:

  • 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使用方式

      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;
  • 本页导读 (1)
文档反馈