文档

如何播放加密视频

视频点播和视频直播提供多种方式为视频加密,搭配阿里云播放器SDK进行解密播放,可用于防止视频内容被盗链、非法下载和传播,本文介绍如何使用阿里云播放器SDK播放HLS标准加密、阿里云视频加密(私有加密)及DRM加密视频。

视频加密简介

阿里云视频点播已经拥有一套完善的内容安全保护机制,可用于保障视频内容不被盗链、非法下载和传播。安全机制包括访问限制、URL鉴权、远程鉴权、视频加密和安全下载等。

有关访问限制、URL鉴权及远程鉴权等安全机制的详细内容请参见视频安全概述,本文主要介绍三种视频加密方式的视频播放。三种视频加密的简介如下:

安全机制

安全手段

特点

安全等级

使用门槛

视频加密

阿里云视频加密(私有加密)

云端一体的视频加密解决方案,采用私有加密算法,并确保链路的安全传输。

较低,简单配置并集成阿里云播放器即可。

HLS标准加密

HLS通用加密方案,使用AES_128对内容加密,适配所有HLS播放器,但密钥容易被窃取。

较高

高,需自建密钥管理和令牌颁发服务,并确保链路传输安全。

商业DRM

苹果Fairplay、谷歌Widevine的原生支持,安全级别很高,满足大的版权内容提供商的要求。

高,按调用License次数收费,只需集成阿里云播放器SDK。

播放器SDK加密播放兼容说明

说明

使用Web播放器SDK播放加密视频之前,请先了解对浏览器及各类型加密功能的适配情况,例如:暂不支持在移动端iOS平台的Web播放器SDK中播放私有加密视频等,详细信息请参见H5浏览器适配说明H5功能适配说明

终端

播放方式

HLS(M3U8)私有加密

MP4私有加密

HLS(M3U8)标准加密

HLS(M3U8) DRM加密

Web端

点播UrlSource

✔️

点播VidAuth

✔️

✔️

点播VidSts

✔️

✔️

直播UrlSource

-

✔️

直播LiveStsSource

✔️

-

✔️

Android端

点播UrlSource

✔️,SDK版本需为6.8.0及以上版本

点播VidAuth

✔️

✔️

✔️

点播VidSts

✔️

✔️

✔️

✔️

直播UrlSource

-

✔️

直播LiveStsSource

✔️

-

✔️

iOS端

点播UrlSource

✔️,SDK版本需为6.8.0及以上版本

点播VidAuth

✔️

✔️

✔️

点播VidSts

✔️

✔️

✔️

✔️

直播UrlSource

-

✔️

直播LiveStsSource

✔️

-

✔️

阿里云视频加密(私有加密)

简介

阿里云视频加密是对视频数据加密,即使下载到本地,视频本身也是被加密的,无法恶意二次分发,可有效防止视频泄露和盗链问题。有关阿里云视频加密的加密机制及核心优势等更多内容,请参见阿里云视频加密(私有加密)

阿里云播放器将内部解密逻辑、服务端交互逻辑都封装到了SDK内部。您只需要配置加密转码,再集成播放器播放视频即可低成本使用加密播放。

重要

阿里云视频加密仅支持输出HLS协议(M3U8格式)、MP4格式的视频,且只能使用阿里云播放器播放加密视频。

配置私有加密

阿里云视频加密的详细流程及配置,请参见如何使用

播放私有加密视频-Web端

使用限制

经过阿里云视频加密(私有加密)加密过的HLS协议视频,现仅支持使用阿里云播放器播放。

操作步骤

用户可以在自己的Web页面中嵌入Web播放器并实现播放。代码示例如下:

说明
  • 使用阿里云Web播放器SDK之前,请先了解浏览器及阿里云视频加密(私有加密)视频播放功能的适配情况,具体如下:

    • H5模式支持桌面端和移动端浏览器环境,其中移动端的iOS平台暂不支持播放私有加密视频,Android平台仅Chrome for Android支持。桌面端浏览器的支持情况请参见H5功能适配说明

    • Flash模式仅支持桌面端浏览器环境,具体的浏览器支持情况请参见Flash浏览器适配说明

  • 出于安全考虑,阿里云视频加密(私有加密)不支持用真实的加密视频调试。

私有加密播放-视频点播VidAuth播放(HLS协议)

经过私有加密的视频通过点播VidAuth方式播放时,与播放普通视频相比,需额外传入参数encryptType: 1,来启用私有加密。

<!DOCTYPE html>
  <html>
      <head>
       <meta charset="UTF-8">
       <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
       <title>点播私有加密播放测试用例</title>
       <link rel="stylesheet" href="https://g.alicdn.com/apsara-media-box/imp-web-player/2.16.3/skins/default/aliplayer-min.css" />
       <script charset="utf-8" type="text/javascript" src="https://g.alicdn.com/apsara-media-box/imp-web-player/2.16.3/aliplayer-min.js"></script>
      </head>
      <body>
          <div class="prism-player" id="J_prismPlayer"></div>
          <script>
              var player = new Aliplayer({
                id: 'J_prismPlayer',
                width: '100%',
                vid : '<your video ID>',// 必选参数,可以通过点播控制台(路径:媒资库>音/视频)查询。示例:1e067a2831b641db90d570b6480f****。
                playauth : '<your PlayAuth>',// 必选参数,参数值可通过调用GetVideoPlayAuth接口获取。
                encryptType: 1, // 必选参数,当播放私有加密流时需要设置本参数值为1。其它情况无需设置。
                playConfig:{EncryptType:'AliyunVoDEncryption'}, // 当您输出的M3U8流中,含有其他非私有加密流时,需要指定此参数。
                // authTimeout: 7200, // 可选参数,播放地址的有效时长,单位:秒。该时长会覆盖在视频点播控制台设置的URL鉴权的有效时长。如果不传,则取默认值7200。如需设置此参数,请确保该时间大于视频的实际时长,防止播放地址在播放完成前过期。
              },function(player){
                console.log('The player is created.')
             });
          </script>
      </body>
  </html>

私有加密播放-视频直播LiveStsSource播放(HLS协议)

经过私有加密的视频通过直播LiveStsSource方式播放时,需要传入URL和STS临时身份凭证等信息,STS临时身份凭证的生成请参见使用STS临时授权方案上传视频。示例代码如下:

<!DOCTYPE html>
 <html>
     <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
      <title>直播私有加密播放测试用例</title>
      <link rel="stylesheet" href="https://g.alicdn.com/apsara-media-box/imp-web-player/2.16.3/skins/default/aliplayer-min.css" />
      <script charset="utf-8" type="text/javascript" src="https://g.alicdn.com/apsara-media-box/imp-web-player/2.16.3/aliplayer-min.js"></script>
     </head>
     <body>
         <div class="prism-player" id="J_prismPlayer"></div>
         <script>
             var player = new Aliplayer({
               id: 'J_prismPlayer',
               width: '100%',
               isLive: true, // 直播设置为true。
               source: '<your live stream url>',// 必选参数。播放地址为经过私有加密的HLS直播流地址。
               accessKeyId: '<your AccessKey ID>',// 必选参数。STS临时AK对的访问密钥ID,需要调用STS服务的AssumeRole接口生成。
               accessKeySecret: '<your AccessKey Secret>',//必选参数。STS临时AK对的访问密钥,需要调用STS服务的AssumeRole接口生成。
               securityToken: '<your STS token>',// 必选参数。STS安全令牌,需要调用STS服务的AssumeRole接口生成。
               domain: '<your Domain>',// 必选参数。直播流的拉流域名。
               app:'<your App Name>',// 必选参数。直播流的AppName。
               stream:'<your Stream Name>',// 必选参数。直播流的StreamName。
               regionId: '<region of your video>',// 必选参数。服务地域。如cn-shanghai、eu-central-1, ap-southeast-1等。
             },function(player){
               console.log('The player is created.')
            });
         </script>
     </body>
 </html>

播放私有加密视频-Android端

使用限制

经过阿里云视频加密(私有加密)加密过的HLS协议、MP4格式视频,现仅支持使用阿里云播放器播放。

操作步骤

用户可以通过快速集成Android播放器到自己的应用中并实现播放。步骤及示例代码如下:

  1. 集成阿里云Android播放器SDK。

    Android播放器SDK的集成操作请参见快速集成

  2. 创建播放器播放视频。

    创建播放器的操作请参见创建播放器。其中,步骤3.创建DataSource的操作请根据实际需求选择以下任一方式创建。

    私有加密播放-视频点播UrlSource播放(MP4格式)

    说明

    仅6.8.0及以后版本的Android播放器SDK支持通过点播UrlSource方式播放MP4格式的私有加密视频。

    经过私有加密输出的MP4格式视频通过点播UrlSource方式播放时,可调用GetPlayInfo - 获取音视频播放地址接口获取视频的播放地址,获取到的视频URL需要您按协议在URL尾部自行拼接etavirp_nuyila=1后再传入播放器进行播放,播放器SDK的配置与播放普通视频配置一致,无需额外设置参数。

    播放URL示例:https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1

    UrlSource urlSource = new UrlSource();
    urlSource.setUri("播放地址");// 必选参数,视频的播放地址(URL),可调用GetPlayInfo接口获取视频URL
    // 获取到的视频URL需要在尾部自行拼接etavirp_nuyila=1后再传入,示例:https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1
    aliPlayer.setDataSource(urlSource);

    私有加密播放-视频点播VidAuth播放(HLS协议+MP4格式)

    经过私有加密输出的HLS协议或MP4格式视频通过点播VidAuth方式播放时,若当前视频存在其他非私有加密类型的加密流或普通转码流时,可通过设置视频加密类型为AliyunVodEncryption来筛选私有加密流进行播放

    VidAuth vidAuth = new VidAuth();
    VidPlayerConfigGen vidPlayerConfigGen = new VidPlayerConfigGen();
    vidPlayerConfigGen.setEncryptType(VidPlayerConfigGen.EncryptType.AliyunVodEncryption);// 可选参数,设置加密类型为AliyunVodEncryption时,则只会返回经过私有加密的视频流。
    vidAuth.setPlayConfig(vidPlayerConfigGen);
    vidAuth.setVid("Vid信息");// 必选参数,视频ID(VideoId)。
    vidAuth.setPlayAuth("<yourPlayAuth>");// 必选参数,播放凭证,需要调用点播服务的GetVideoPlayAuth接口生成。
    vidAuth.setRegion("接入地域");// 5.5.5.0及之后版本播放器SDK,本参数已弃用,无需设置region,播放器会自动解析region;5.5.5.0之前版本播放器SDK,本参数必选,点播服务的接入地域,默认为cn-shanghai。
    // vidAuth.setAuthTimeout(3600); // 可选参数,播放地址的有效时长,单位:秒。该时长会覆盖在视频点播控制台设置的URL鉴权的有效时长。如果不传,则取默认值3600。如需设置此参数,请确保该时间大于视频的实际时长,防止播放地址在播放完成前过期。
    aliPlayer.setDataSource(vidAuth);

    私有加密播放-视频点播VidSts播放(HLS协议+MP4格式)

    经过私有加密输出的HLS协议或MP4格式视频通过点播VidSts方式播放时,若当前视频存在其他非私有加密类型的加密流或普通转码流时,可通过设置视频加密类型为AliyunVodEncryption来筛选私有加密流进行播放

    VidSts vidSts = new VidSts();
    VidPlayerConfigGen vidPlayerConfigGen = new VidPlayerConfigGen();
    vidPlayerConfigGen.setEncryptType(VidPlayerConfigGen.EncryptType.AliyunVodEncryption);// 可选参数,设置加密类型为AliyunVodEncryption时,则只会返回经过私有加密的视频流。
    vidSts.setPlayConfig(vidPlayerConfigGen);
    vidSts.setVid("Vid信息");// 必选参数,视频ID(VideoId)。
    vidSts.setAccessKeyId("<yourAccessKeyId>");// 必选参数,STS临时AK对的访问密钥ID,需要调用STS服务的AssumeRole接口生成。
    vidSts.setAccessKeySecret("<yourAccessKeySecret>");// 必选参数,STS临时AK对的访问密钥,需要调用STS服务的AssumeRole接口生成。
    vidSts.setSecurityToken("<yourSecurityToken>");// 必选参数,STS安全令牌,需要调用STS服务的AssumeRole接口生成。
    vidSts.setRegion("接入地域");// 必选参数,点播服务的接入地域,默认为cn-shanghai。
    // vidSts.setAuthTimeout(3600); // 可选参数,播放地址的有效时长,单位:秒。该时长会覆盖在视频点播控制台设置的URL鉴权的有效时长。如果不传,则取默认值3600。如需设置此参数,请确保该时间大于视频的实际时长,防止播放地址在播放完成前过期。
    aliPlayer.setDataSource(vidSts);

    私有加密播放-视频直播LiveStsSource播放(HLS协议)

    经过私有加密输出的HLS协议视频通过直播LiveStsSource方式播放时,需要传入URL和STS凭证,并设置视频加密类型为AliEncryption。示例代码如下:

    1. 创建DataSource。

      需传递AVPLiveStsSource作为播放源。

      // 创建LiveSts,EncryptionType需要设置为AliEncryption
      LiveSts liveSts = new LiveSts();
      liveSts.setUrl("<your live stream url>");// 必选参数,播放地址为经过私有加密的HLS直播流地址。
      liveSts.setAccessKeyId("<your AccessKey ID>");// 必选参数,STS临时AK对的访问密钥ID,需要调用STS服务的AssumeRole接口生成。
      liveSts.setAccessKeySecret("<your AccessKey Secret>");// 必选参数,STS临时AK对的访问密钥,需要调用STS服务的AssumeRole接口生成。
      liveSts.setSecurityToken("<your STS token>");// 必选参数,STS安全令牌,需要调用STS服务的AssumeRole接口生成。
      liveSts.setDomain("<your Domain>");// 必选参数,直播流的播流域名。
      liveSts.setApp("<your App Name>");// 必选参数,直播流的AppNam。
      liveSts.setStream("<your Stream Name>");// 必选参数,直播流的StreamName。
      liveSts.setEncryptionType(LiveSts.LiveEncryptionType.AliEncryption);// 必选参数,设置加密类型为AliEncryption。
      liveSts.setRegion("<region of your video>");// 必选参数,服务地域。如cn-shanghai等。
      // 设置播放源
      aliPlayer.setDataSource(liveSts);
      // 准备播放
      aliPlayer.prepare();
    2. 监听STS是否无效。

      加密直播播放过程中可能会有更换加密Key的过程,换Key时则会通过STS去请求到最新的Key。开发者需要监听STS是否有效。如果无效则会影响加密直播流的播放。

      mAliyunVodPlayer.setOnVerifyTimeExpireCallback(new AliPlayer.OnVerifyTimeExpireCallback() {
      		@Override
          public AliPlayer.Status onVerifySts(StsInfo info) {
              if(info 可以使用){
                  return IPlayer.StsStatus.Valid;
              }
      
              if(可以获取有效的STS){
                  获取STS();// 异步同步均可。
                  return IPlayer.StsStatus.Pending;
              }
              // 如果info无效,且无法获取到最新的STS,那么建议停止播放。防止出现花屏。
              mAliyunVodPlayer.stop();
              return IPlayer.StsStatus.Invalid;
          }
      
          @Override
          public AliPlayer.Status onVerifyAuth(VidAuth auth) {
              return AliPlayer.Status.Valid;
          }
      });
      说明

      获取STS成功之后,需要调用updateLiveStsInfo方法去更新STS。如果获取失败,则建议停止播放。如果不更新STS,超时之后播放器会继续使用之前的STS去获取Key。如果STS失效,则可能会出现花屏或者播放失败。

      mAliyunVodPlayer.updateStsInfo(stsInfo);

播放私有加密视频-iOS端

使用限制

经过阿里云视频加密(私有加密)加密过的HLS协议、MP4格式视频,现仅支持使用阿里云播放器播放。

操作步骤

用户可以通过快速集成iOS播放器到自己的应用中并实现播放。步骤如下:

  1. 集成阿里云iOS播放器SDK。

    iOS播放器SDK的集成操作请参见快速集成

  2. 创建播放器播放视频。

    创建播放器的操作步骤请参见创建播放器。其中,步骤3.创建DataSource的操作请根据实际需求选择以下任一方式创建。

    私有加密播放-视频点播UrlSource播放(MP4格式)

    说明

    仅6.8.0及以后版本的iOS播放器SDK支持通过点播UrlSource方式播放MP4格式的私有加密视频。

    经过私有加密输出的MP4格式视频通过点播UrlSource方式播放时,可调用GetPlayInfo - 获取音视频播放地址接口获取视频的播放地址,获取到的视频URL需要您按协议在URL尾部自行拼接etavirp_nuyila=1后再传入播放器进行播放,播放器SDK的配置与播放普通视频配置一致,无需额外设置参数。

    播放URL示例:https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1

    AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:url]; // 必选参数,视频的播放地址(URL),可调用GetPlayInfo接口获取视频URL,获取到的视频URL需要在尾部自行拼接etavirp_nuyila=1后再传入,示例:https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1
    [self.player setUrlSource:urlSource]; 

    私有加密播放-视频点播VidAuth(HLS协议+MP4格式)

    经过私有加密输出的HLS协议或MP4格式视频通过点播VidAuth方式播放时,若当前视频存在其他非私有加密类型的加密流或普通转码流时,可通过设置视频加密类型为AliyunVodEncryption来筛选私有加密流进行播放

    AVPVidAuthSource *authSource = [[AVPVidAuthSource alloc] init];
    authSource.vid = @"Vid信息"; // 必选参数,视频ID(VideoId)。
    authSource.playAuth = @"<yourPlayAuth>"; // 必选参数,播放凭证,需要调用点播服务的GetVideoPlayAuth接口生成。
    authSource.region = @"接入地域"; // 5.5.5.0及之后版本播放器SDK,本参数已弃用,无需设置region,播放器会自动解析region;5.5.5.0之前版本播放器SDK,本参数必选,点播服务的接入地域,默认为cn-shanghai。
    // authSource.authTimeout = 3600; // 可选参数,播放地址的有效时长,单位:秒。该时长会覆盖在视频点播控制台设置的URL鉴权的有效时长。如果不传,则取默认值3600。如需设置此参数,请确保该时间大于视频的实际时长,防止播放地址在播放完成前过期。
    
    //通过VidPlayerConfigGenerator构建config
    VidPlayerConfigGenerator* config = [[VidPlayerConfigGenerator alloc]init];
    [config addVidPlayerConfigByStringValue:@"EncryptType" value:@"AliyunVodEncryption"]; //可选参数,设置加密类型为AliyunVodEncryption时,则只会返回经过私有加密的视频流。
    authSource.playConfig = [config generatePlayerConfig]; 
    [self.player setAuthSource:authSource];

    私有加密播放-视频点播VidSts(HLS协议+MP4格式)

    经过私有加密输出的HLS协议或MP4格式视频通过点播VidSts方式播放时,若当前视频存在其他非私有加密类型的加密流或普通转码流时,可通过设置视频加密类型为AliyunVodEncryption来筛选私有加密流进行播放

    AVPVidStsSource *source = [[AVPVidStsSource alloc] init];
    source.region = @"接入地域"; // 必选参数,点播服务的接入地域,默认为cn-shanghai。
    source.vid = @"Vid信息"; // 必选参数,视频ID(VideoId)。
    source.securityToken = @"<yourSecurityToken>"; // 必选参数,STS安全令牌,需要调用STS服务的AssumeRole接口生成。
    source.accessKeySecret = @"<yourAccessKeySecret>"; // 必选参数,STS临时AK对的访问密钥,需要调用STS服务的AssumeRole接口生成。
    source.accessKeyId = @"<yourAccessKeyId>"; // 必选参数,STS临时AK对的访问密钥ID,需要调用STS服务的AssumeRole接口生成。
    // source.authTimeout = 3600; // 可选参数,播放地址的有效时长,单位:秒。该时长会覆盖在视频点播控制台设置的URL鉴权的有效时长。如果不传,则取默认值3600。如需设置此参数,请确保该时间大于视频的实际时长,防止播放地址在播放完成前过期。
    
    //通过VidPlayerConfigGenerator构建config
    VidPlayerConfigGenerator* config = [[VidPlayerConfigGenerator alloc]init];
    [config addVidPlayerConfigByStringValue:@"EncryptType" value:@"AliyunVodEncryption"]; //可选参数,设置加密类型为AliyunVodEncryption时,则只会返回经过私有加密的视频流。
    source.playConfig = [config generatePlayerConfig]; 
    
    //设置播放源
    [self.player setStsSource:source];

    私有加密播放-视频直播LiveStsSource(HLS协议)

    经过私有加密输出的HLS协议视频通过直播LiveStsSource方式播放时,需要传入URL和STS凭证,并设置视频加密类型为ENCRYPTION_TYPE_ALIVODENCRYPTION。示例代码如下:

    1. 创建DataSource。

      需传递AVPLiveStsSource作为播放源。

      // 创建LiveSts,encryptionType需要设置为ENCRYPTION_TYPE_ALIVODENCRYPTION
      AVPLiveStsSource *liveStsSource = [[AVPLiveStsSource alloc] initWithUrl:@"加密直播url" 
                                                                  accessKeyId:@"临时akId" 
                                                                  accessKeySecret:@"临时akId" 
                                                                  securityToken:@"安全token" 
                                                                  region:@"region值" 
                                                                  domain:@"url播流域名" 
                                                                  app:@"播流应用名" 
                                                                  stream:@"播流流名" 
                                                                  encryptionType:ENCRYPTION_TYPE_ALIVODENCRYPTION];// 必选参数,设置加密类型为ENCRYPTION_TYPE_ALIVODENCRYPTION。
       // 设置播放源
       [self.aliPlayer setLiveStsSource:liveStsSource];
       ......
       // 准备播放
       [self.aliPlayer prepare];

    2. 监听STS是否无效。

      加密直播播放过程中可能会有更换加密Key的过程,换Key时则会通过STS去请求到最新的Key。开发者需要监听STS是否有效。如果无效则会影响加密直播流的播放。

       __weak typeof(self) weakSelf = self;
      [self.aliPlayer setVerifyStsCallback:^AVPStsStatus(AVPStsInfo info) {
          if (info 可以使用) {
              return Valid;
          }
          if(可以获取有效的STS){
              获取STS();// 异步同步均可。
              return Pending;
          }
          [weakSelf.aliPlayer stop];
          return Invalid;
      }];
      说明

      获取STS成功之后,需要调用updateLiveStsInfo方法去更新STS。如果获取失败,则建议停止播放。如果不更新STS,超时之后播放器会继续使用之前的STS去获取Key。如果STS失效,则可能会出现花屏或者播放失败。

      [self.aliPlayer updateLiveStsInfo:self.liveStsSource.accessKeyId accKey:self.liveStsSource.accessKeySecret token:self.liveStsSource.securityToken region:self.liveStsSource.region];

HLS标准加密

简介

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

有关HLS标准加密的加密机制及使用限制等更多内容,请参见HLS标准加密

配置HLS标准加密

HLS标准加密的详细流程及配置,请参见接入流程

播放HLS标准加密视频-Web端

使用限制

HLS标准加密支持所有的HLS播放器,用户可选择使用自研或开源的播放器。本文以介绍如何使用阿里云播放器播放HLS标准加密视频为例进行说明。阿里云播放器支持用户令牌传递,阿里云CDN服务会动态修改M3U8文件中的解密URI,解密URI中会带上用户的令牌,业务方可以对令牌进行验证。

操作步骤

用户可以在自己的Web页面中嵌入Web播放器并实现播放。

说明

使用阿里云Web播放器SDK之前,请先了解浏览器及HLS标准加密视频播放功能的适配情况,具体如下:

  • H5模式支持桌面端和移动端浏览器环境,具体的浏览器支持情况请参见H5功能适配说明

  • Flash模式仅支持桌面端浏览器环境,具体的浏览器支持情况请参见Flash浏览器适配说明

点播和直播播放HLS标准加密视频与播放普通视频所需配置一致无需额外设置参数,详细操作及代码示例请参见快速接入

播放HLS标准加密视频-Android端

使用限制

HLS标准加密支持所有的HLS播放器,用户可选择使用自研或开源的播放器。本文以介绍如何使用阿里云播放器播放HLS标准加密视频为例进行说明。阿里云播放器支持用户令牌传递,阿里云CDN服务会动态修改M3U8文件中的解密URI,解密URI中会带上用户的令牌,业务方可以对令牌进行验证。

操作步骤

用户可以通过快速集成Android播放器到自己的应用中并实现播放。步骤及示例代码如下:

  1. 集成阿里云Android播放器SDK。

    Android播放器SDK的集成操作请参见快速集成

  2. 创建播放器播放视频。

    创建播放器的操作请参见创建播放器。其中,步骤3.创建DataSource的操作请根据实际需求选择以下任一方式创建。

    HLS标准加密播放-视频点播VidAuth播放

    经过HLS标准加密的视频通过点播VidAuth方式播放时,若当前视频存在其他非HLS标准加密类型的加密流或普通转码流时,可通过设置视频加密类型为HLSEncryption来筛选HLS标准加密流进行播放,示例代码如下:

    VidAuth vidAuth = new VidAuth();
    VidPlayerConfigGen playerConfig = new VidPlayerConfigGen();
    playerConfig.setEncryptType(VidPlayerConfigGen.EncryptType.HLSEncryption);// 可选参数,设置加密类型为HLSEncryption时,则只会返回经过HLS标准加密的视频流。
    playerConfig.setMtsHlsUriToken("用户令牌");// 可选参数,如需校验MtsHlsUriToken(用户令牌),可使用此参数传递。
    vidAuth.setPlayConfig(playerConfig);
    vidAuth.setVid("Vid信息");// 必选参数,视频ID(VideoId)。
    vidAuth.setPlayAuth("<yourPlayAuth>");// 必选参数,播放凭证,需要调用点播服务的GetVideoPlayAuth接口生成。
    vidAuth.setRegion("接入地域");// 5.5.5.0及之后版本播放器SDK,本参数已弃用,无需设置region,播放器会自动解析region;5.5.5.0之前版本播放器SDK,本参数必选,点播服务的接入地域,默认为cn-shanghai。
    // vidAuth.setAuthTimeout(3600);// 可选参数,播放地址的有效时长,单位:秒。该时长会覆盖在视频点播控制台设置的URL鉴权的有效时长。如果不传,则取默认值3600。如需设置此参数,请确保该时间大于视频的实际时长,防止播放地址在播放完成前过期。
    aliPlayer.setDataSource(vidAuth);

    HLS标准加密播放-视频点播VidSts播放

    经过HLS标准加密的视频通过点播VidSts方式播放时,若当前视频存在其他非HLS标准加密类型的加密流或普通转码流时,可通过设置视频加密类型为HLSEncryption来筛选HLS标准加密流进行播放,示例代码如下:

    VidSts vidSts = new VidSts();
    VidPlayerConfigGen playerConfig = new VidPlayerConfigGen();
    VidPlayerConfigGen.setEncryptType(VidPlayerConfigGen.EncryptType.HLSEncryption);//可选参数,设置加密类型为HLSEncryption时,则只会返回经过HLS标准加密的视频流。
    playerConfig.setMtsHlsUriToken("用户令牌");// 可选参数,如需校验MtsHlsUriToken(用户令牌),可使用此参数传递。
    vidSts.setPlayConfig(playerConfig);
    vidSts.setVid("Vid信息");// 必选参数,视频ID(VideoId)。
    vidSts.setAccessKeyId("<yourAccessKeyId>");// 必选参数,STS临时AK对的访问密钥ID,需要调用STS服务的AssumeRole接口生成。
    vidSts.setAccessKeySecret("<yourAccessKeySecret>");// 必选参数,STS临时AK对的访问密钥,需要调用STS服务的AssumeRole接口生成。
    vidSts.setSecurityToken("<yourSecurityToken>");// 必选参数,STS安全令牌,需要调用STS服务的AssumeRole接口生成。
    vidSts.setRegion("接入地域");// 必选参数,点播服务的接入地域,默认为cn-shanghai。
    // vidSts.setAuthTimeout(3600);// 可选参数,播放地址的有效时长,单位:秒。该时长会覆盖在视频点播控制台设置的URL鉴权的有效时长。如果不传,则取默认值3600。如需设置此参数,请确保该时间大于视频的实际时长,防止播放地址在播放完成前过期。
    aliPlayer.setDataSource(vidSts);

    HLS标准加密播放-视频直播UrlSource播放

    经过HLS标准加密的视频通过直播UrlSource方式播放时,与播放普通视频一致,无需额外设置参数。

    UrlSource urlSource = new UrlSource();
            urlSource.setUri("播放地址");// 必选参数,播放地址为经过HLS标准加密的直播流地址。
            aliPlayer.setDataSource(urlSource);

播放HLS标准加密视频-iOS端

使用限制

HLS标准加密支持所有的HLS播放器,用户可选择使用自研或开源的播放器。本文以介绍如何使用阿里云播放器播放HLS标准加密视频为例进行说明。阿里云播放器支持用户令牌传递,阿里云CDN服务会动态修改M3U8文件中的解密URI,解密URI中会带上用户的令牌,业务方可以对令牌进行验证。

操作步骤

用户可以通过快速集成iOS播放器到自己的应用中并实现播放。步骤及示例代码如下:

  1. 集成阿里云iOS播放器SDK。

    iOS播放器SDK的集成操作请参见快速集成

  2. 创建播放器播放视频。

    创建播放器的操作请参见创建播放器。其中,步骤3.创建DataSource的操作请根据实际需求选择以下任一方式创建。

    HLS标准加密播放-视频点播VidAuth播放

    经过HLS标准加密的视频通过点播VidAuth方式播放时,若当前视频存在其他非HLS标准加密类型的加密流或普通转码流时,可通过设置视频加密类型为HLSEncryption来筛选HLS标准加密流进行播放,示例代码如下:

    AVPVidAuthSource *authSource = [[AVPVidAuthSource alloc] init];
    authSource.vid = @"Vid信息"; // 必选参数,视频ID(VideoId)。
    authSource.playAuth = @"<yourPlayAuth>"; // 必选参数,播放凭证,需要调用点播服务的GetVideoPlayAuth接口生成。
    authSource.region = @"接入地域"; // 5.5.5.0及之后版本播放器SDK,本参数已弃用,无需设置region,播放器会自动解析region;5.5.5.0之前版本播放器SDK,本参数必选,点播服务的接入地域,默认为cn-shanghai。
    // authSource.authTimeout = 3600; // 可选参数,播放地址的有效时长,单位:秒。该时长会覆盖在视频点播控制台设置的URL鉴权的有效时长。如果不传,则取默认值3600。如需设置此参数,请确保该时间大于视频的实际时长,防止播放地址在播放完成前过期。
    
    //通过VidPlayerConfigGenerator构建config
    VidPlayerConfigGenerator* config = [[VidPlayerConfigGenerator alloc]init];
    [config addVidPlayerConfigByStringValue:@"EncryptType" value:@"HLSEncryption"]; // 可选参数,设置加密类型为HLSEncryption时,则只会返回经过HLS标准加密的视频流。
    [config setHlsUriToken: @"xxxxxxx"]; // 可选参数,如需校验MtsHlsUriToken(用户令牌),可使用此参数传递。
    source.playConfig = [config generatePlayerConfig];
    
    //设置播放源
    [self.player setAuthSource:authSource];
    

    HLS标准加密播放-视频点播VidSts播放

    经过HLS标准加密的视频通过点播VidSts方式播放时,若当前视频存在其他非HLS标准加密类型的加密流或普通转码流时,可通过设置视频加密类型为HLSEncryption来筛选HLS标准加密流进行播放,示例代码如下:

    AVPVidStsSource *source = [[AVPVidStsSource alloc] init];
    source.vid = @"Vid信息"; // 必选参数,视频ID(VideoId)。
    source.region = @"接入地域"; // 必选参数,点播服务的接入地域,默认为cn-shanghai。
    source.securityToken = @"<yourSecurityToken>"; // 必选参数,STS安全令牌,需要调用STS服务的AssumeRole接口生成。
    source.accessKeySecret = @"<yourAccessKeySecret>"; // 必选参数,STS临时AK对的访问密钥,需要调用STS服务的AssumeRole接口生成。
    source.accessKeyId = @"<yourAccessKeyId>"; // 必选参数,STS临时AK对的访问密钥ID,需要调用STS服务的AssumeRole接口生成。
    // source.authTimeout = 3600; // 可选参数,播放地址的有效时长,单位:秒。该时长会覆盖在视频点播控制台设置的URL鉴权的有效时长。如果不传,则取默认值3600。如需设置此参数,请确保该时间大于视频的实际时长,防止播放地址在播放完成前过期。
    
    //通过VidPlayerConfigGenerator构建config
    VidPlayerConfigGenerator* config = [[VidPlayerConfigGenerator alloc]init];
    [config addVidPlayerConfigByStringValue:@"EncryptType" value:@"HLSEncryption"]; // 可选参数,设置加密类型为HLSEncryption时,则只会返回经过HLS标准加密的视频流。
    [config setHlsUriToken: @"xxxxxxx"]; // 可选参数,如需校验MtsHlsUriToken(用户令牌),可使用此参数传递。
    source.playConfig = [config generatePlayerConfig]; 
    
    // 设置播放源
    [self.player setStsSource:source];
    

    HLS标准加密播放-视频直播UrlSource播放

    经过HLS标准加密的视频通过直播UrlSource方式播放时,与播放普通视频一致,无需额外设置参数。

    AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:url]; // 必选参数,播放地址为经过HLS标准加密的直播流地址。
    [self.player setUrlSource:urlSource];

常见问题

使用HLS标准加密过程中的常见问题及解决方案,请参见HLS标准加密常见问题

DRM加密

简介

阿里云视频点播服务提供了行业通用的DRM(Digital Rights Management)加密方式,通过一站式添加和管理,轻松保护版权视频内容的安全。支持WideVine和Fairplay的DRM方案。

核心优势及架构等更多内容,请参见DRM加密概述

配置DRM加密

仅支持通过视频点播控制台开启,详细操作请参见DRM加密

播放DRM加密视频-Web端

使用限制

经过DRM加密的视频,现仅支持通过阿里云播放器播放。

操作步骤

用户可以在自己的Web页面中嵌入Web播放器并实现播放。代码示例如下:

说明

使用阿里云Web播放器SDK之前,请先了解浏览器及DRM加密视频播放功能的适配情况,具体如下:

  • H5模式支持桌面端和移动端浏览器环境,具体的浏览器支持情况请参见H5功能适配说明

  • Flash模式仅支持桌面端浏览器环境,具体的浏览器支持情况请参见Flash浏览器适配说明

DRM加密播放-视频点播VidSts播放

经过DRM加密的视频通过点播VidSts方式播放,与播放普通视频相比,需要额外传入参数isDrm: true,来启用DRM加密。

<!DOCTYPE html>
 <html>
     <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
      <title>点播DRM加密测试用例</title>
      <link rel="stylesheet" href="https://g.alicdn.com/apsara-media-box/imp-web-player/2.16.3/skins/default/aliplayer-min.css" />
      <script charset="utf-8" type="text/javascript" src="https://g.alicdn.com/apsara-media-box/imp-web-player/2.16.3/aliplayer-min.js"></script>
     </head>
     <body>
         <div class="prism-player" id="J_prismPlayer"></div>
         <script>
             var player = new Aliplayer({
               id: 'J_prismPlayer',
               width: '100%',
               isDrm: true,
               vid: '<your video ID>',// 必选参数,可以通过点播控制台(路径:媒资库>音/视频)查询。示例:1e067a2831b641db90d570b6480f****。
               accessKeyId: '<your AccessKey ID>',// 必选参数,STS临时AK对的访问密钥ID,需要调用STS服务的AssumeRole接口生成。
               securityToken: '<your STS token>',// 必选参数,STS安全令牌,需要调用STS服务的AssumeRole接口生成。
               accessKeySecret: '<your AccessKey Secret>',// 必选参数,STS临时AK对的访问密钥,需要调用STS服务的AssumeRole接口生成。
               region: '<region of your video>', // 必选参数,媒体资源所在的区域。如cn-shanghai、eu-central-1, ap-southeast-1等。
               certId: '<your certificate ID>', // 苹果设备播放时此参数必选。用于请求苹果证书,可根据DRM加密的实现到视频点播或视频直播控制台获取。
               // authTimeout: 7200, // 可选参数,播放地址的有效时长,单位:秒。该时长会覆盖在视频点播控制台设置的URL鉴权的有效时长。如果不传,则取默认值7200。如需设置此参数,请确保该时间大于视频的实际时长,防止播放地址在播放完成前过期。
             },function(player){
               console.log('The player is created.')
            });
         </script>
     </body>
 </html>

DRM加密播放-视频直播LiveStsSource播放

经过DRM加密的视频通过直播LiveStsSource方式播放,需要传入URL和STS临时身份凭证等信息,STS临时身份凭证的生成请参见使用STS临时授权方案上传视频,示例代码如下:

<!DOCTYPE html>
 <html>
     <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
      <title>直播DRM加密测试用例</title>
      <link rel="stylesheet" href="https://g.alicdn.com/apsara-media-box/imp-web-player/2.16.3/skins/default/aliplayer-min.css" />
      <script charset="utf-8" type="text/javascript" src="https://g.alicdn.com/apsara-media-box/imp-web-player/2.16.3/aliplayer-min.js"></script>
     </head>
     <body>
         <div class="prism-player" id="J_prismPlayer"></div>
         <script>
             var player = new Aliplayer({
               id: 'J_prismPlayer',
               width: '100%',
               isLive: true, // 直播设置为true。
               isDrm: true,
               source: '<your live stream url>',// 必选参数,播放地址为经过DRM加密的直播流地址。
               accessKeyId: '<your AccessKey ID>',// 必选参数,STS临时AK对的访问密钥ID,需要调用STS服务的AssumeRole接口生成。
               securityToken: '<your STS token>',// 必选参数,STS安全令牌,需要调用STS服务的AssumeRole接口生成。
               accessKeySecret: '<your AccessKey Secret>',// 必选参数,STS临时AK对的访问密钥,需要调用STS服务的AssumeRole接口生成。
               region: '<region of your video>', // 必选参数,媒体资源所在的服务地域。如cn-shanghai、eu-central-1, ap-southeast-1等。
               certId: '<your certificate ID>', // 苹果设备播放时此参数必选,用于请求苹果证书,可根据DRM加密的实现到视频点播或视频直播控制台获取。
             },function(player){
               console.log('The player is created.')
            });
         </script>
     </body>
 </html>

播放DRM加密视频-Android端

使用限制

经过DRM加密的视频,现仅支持通过阿里云播放器播放。

操作步骤

用户可以通过快速集成Android播放器到自己的应用中并实现播放。步骤及示例代码如下:

  1. 集成阿里云Android播放器SDK。

    Android播放器SDK的集成操作请参见快速集成

  2. 创建播放器播放视频。

    创建播放器的操作请参见创建播放器。其中,步骤3.创建DataSource的操作请根据实际需求选择以下任一方式创建。

    说明

    Android平台,为了保证高安全等级的视频能正常播放,建议使用surfaceView进行播放。

    DRM加密播放-视频点播VidSts播放

    经过DRM加密的视频通过点播VidSts方式播放时,与播放普通视频配置一致,无需额外设置参数

    VidSts vidSts = new VidSts();
            vidSts.setVid("Vid信息");// 必选参数,视频ID(VideoId)。
            vidSts.setAccessKeyId("<yourAccessKeyId>");// 必选参数,STS临时AK对的访问密钥ID,需要调用STS服务的AssumeRole接口生成。
            vidSts.setAccessKeySecret("<yourAccessKeySecret>");// 必选参数,STS临时AK对的访问密钥,需要调用STS服务的AssumeRole接口生成。
            vidSts.setSecurityToken("<yourSecurityToken>");// 必选参数,STS安全令牌,需要调用STS服务的AssumeRole接口生成。
            vidSts.setRegion("接入地域");// 必选参数,点播服务的接入地域,默认为cn-shanghai。
            // vidSts.setAuthTimeout(3600); // 可选参数,播放地址的有效时长,单位:秒。该时长会覆盖在视频点播控制台设置的URL鉴权的有效时长。如果不传,则取默认值3600。如需设置此参数,请确保该时间大于视频的实际时长,防止播放地址在播放完成前过期。
            aliPlayer.setDataSource(vidSts);

    DRM加密播放-视频直播LiveStsSource播放

    经过DRM加密的视频通过直播LiveStsSource方式播放时,需要传入URL和STS凭证,并设置视频加密类型为WideVine_FairPlay。示例代码如下:

    1. 创建DataSource。

      需传递AVPLiveStsSource作为播放源。

      // 创建LiveSts,EncryptionType需要设置为WideVine_FairPlay
      LiveSts liveSts = new LiveSts();
      liveSts.setUrl("<your live stream url>");// 必选参数,播放地址为经过DRM加密的HLS直播流地址。
      liveSts.setAccessKeyId("<your AccessKey ID>");// 必选参数,STS临时AK对的访问密钥ID,需要调用STS服务的AssumeRole接口生成。
      liveSts.setAccessKeySecret("<your AccessKey Secret>");// 必选参数,STS临时AK对的访问密钥,需要调用STS服务的AssumeRole接口生成。
      liveSts.setSecurityToken("<your STS token>");// 必选参数,STS安全令牌,需要调用STS服务的AssumeRole接口生成。
      liveSts.setDomain("<your Domain>");// 必选参数,直播流的播流域名。
      liveSts.setApp("<your App Name>");// 必选参数,直播流的AppNam。
      liveSts.setStream("<your Stream Name>");// 必选参数,直播流的StreamName。
      liveSts.setEncryptionType(LiveSts.LiveEncryptionType.WideVine_FairPlay);// 必选参数,设置加密类型为WideVine_FairPlay。 
      liveSts.setRegion("<region of your video>");// 必选参数,服务地域。如cn-shanghai等。
      // 设置播放源
      aliPlayer.setDataSource(liveSts);
      // 准备播放
      aliPlayer.prepare();
    2. 监听STS是否无效。

      加密直播播放过程中可能会有更换加密Key的过程,换Key时则会通过STS去请求到最新的Key。开发者需要监听STS是否有效。如果无效则会影响加密直播流的播放。

      mAliyunVodPlayer.setOnVerifyTimeExpireCallback(new AliPlayer.OnVerifyTimeExpireCallback() {
      		@Override
          public AliPlayer.Status onVerifySts(StsInfo info) {
              if(info 可以使用){
                  return IPlayer.StsStatus.Valid;
              }
      
              if(可以获取有效的STS){
                  获取STS();// 异步同步均可。
                  return IPlayer.StsStatus.Pending;
              }
              // 如果info无效,且无法获取到最新的STS,那么建议停止播放。防止出现花屏。
              mAliyunVodPlayer.stop();
              return IPlayer.StsStatus.Invalid;
          }
      
          @Override
          public AliPlayer.Status onVerifyAuth(VidAuth auth) {
              return AliPlayer.Status.Valid;
          }
      });
      说明

      获取STS成功之后,需要调用updateLiveStsInfo方法去更新STS。如果获取失败,则建议停止播放。如果不更新STS,超时之后播放器会继续使用之前的STS去获取Key。如果STS失效,则可能会出现花屏或者播放失败。

      mAliyunVodPlayer.updateStsInfo(stsInfo);

播放DRM加密视频-iOS端

使用限制

经过DRM加密的视频,现仅支持通过阿里云播放器播放。

操作步骤

用户可以通过快速集成iOS播放器到自己的应用中并实现播放。步骤及示例代码如下:

  1. 集成阿里云iOS播放器SDK。

    iOS播放器SDK的集成操作请参见快速集成

  2. 创建播放器播放视频。

    创建播放器的操作请参见创建播放器。其中,步骤3.创建DataSource的操作请根据实际需求选择以下任一方式创建。

    说明

    iOS平台,需要在[self.player prepare]之前全局调用一次AliPlayerGlobalSettings中的setFairPlayCertID方法来设置证书ID。证书ID可以在视频点播控制台 > 配置管理 > 媒体处理配置 > DRM证书管理中获取。

     [AliPlayerGlobalSettings setFairPlayCertID:@"控制台获取的证书ID"];

    DRM加密播放-视频点播VidSts播放

    经过DRM加密的视频通过点播VidSts方式播放时,与播放普通视频配置一致,无需额外设置参数

    AVPVidStsSource *source = [[AVPVidStsSource alloc] init];
    source.region = @"接入地域"; // 必选参数,点播服务的接入地域,默认为cn-shanghai。
    source.vid = @"Vid信息"; // 必选参数,视频ID(VideoId)。
    source.securityToken = @"<yourSecurityToken>"; // 必选参数,STS安全令牌,需要调用STS服务的AssumeRole接口生成。
    source.accessKeySecret = @"<yourAccessKeySecret>"; // 必选参数,STS临时AK对的访问密钥,需要调用STS服务的AssumeRole接口生成。
    source.accessKeyId = @"<yourAccessKeyId>"; // 必选参数,STS临时AK对的访问密钥ID,需要调用STS服务的AssumeRole接口生成。
    // source.authTimeout = 3600; // 可选参数,播放地址的有效时长,单位:秒。该时长会覆盖在视频点播控制台设置的URL鉴权的有效时长。如果不传,则取默认值3600。如需设置此参数,请确保该时间大于视频的实际时长,防止播放地址在播放完成前过期。
     //设置播放源
     [self.player setStsSource:source]

    DRM加密播放-视频直播LiveStsSource播放

    经过DRM加密的视频通过直播LiveStsSource方式播放时,需要传入URL和STS凭证,并设置视频加密类型为ENCRYPTION_TYPE_FAIRPLAY。示例代码如下:

    1. 创建DataSource。

      需传递AVPLiveStsSource作为播放源。

      // 创建LiveSts,encryptionType需要设置为ENCRYPTION_TYPE_FAIRPLAY
      AVPLiveStsSource *liveStsSource = [[AVPLiveStsSource alloc] initWithUrl:@"加密直播url" 
                                                                  accessKeyId:@"临时akId" 
                                                                  accessKeySecret:@"临时akId" 
                                                                  securityToken:@"安全token" 
                                                                  region:@"region值" 
                                                                  domain:@"url播流域名" 
                                                                  app:@"播流应用名" 
                                                                  stream:@"播流流名" 
                                                                  encryptionType:ENCRYPTION_TYPE_FAIRPLAY];// 必选参数,设置加密类型为ENCRYPTION_TYPE_FAIRPLAY。
       // 设置播放源
       [self.aliPlayer setLiveStsSource:liveStsSource];
       ......
       // 准备播放
       [self.aliPlayer prepare];

    2. 监听STS是否无效。

      加密直播播放过程中可能会有更换加密Key的过程,换Key时则会通过STS去请求到最新的Key。开发者需要监听STS是否有效。如果无效则会影响加密直播流的播放。

       __weak typeof(self) weakSelf = self;
      [self.aliPlayer setVerifyStsCallback:^AVPStsStatus(AVPStsInfo info) {
          if (info 可以使用) {
              return Valid;
          }
          if(可以获取有效的STS){
              获取STS();// 异步同步均可。
              return Pending;
          }
          [weakSelf.aliPlayer stop];
          return Invalid;
      }];
      说明

      获取STS成功之后,需要调用updateLiveStsInfo方法去更新STS。如果获取失败,则建议停止播放。如果不更新STS,超时之后播放器会继续使用之前的STS去获取Key。如果STS失效,则可能会出现花屏或者播放失败。

      [self.aliPlayer updateLiveStsInfo:self.liveStsSource.accessKeyId accKey:self.liveStsSource.accessKeySecret token:self.liveStsSource.securityToken region:self.liveStsSource.region];

相关文档

播放加密视频相关问题

  • 本页导读 (1)
文档反馈