日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

如何播放加密視頻

更新時(shí)間:

視頻點(diǎn)播和視頻直播提供多種方式為視頻加密,搭配阿里云播放器SDK進(jìn)行解密播放,可用于防止視頻內(nèi)容被盜鏈、非法下載和傳播,本文介紹如何使用阿里云播放器SDK播放HLS標(biāo)準(zhǔn)加密、阿里云視頻加密(私有加密)及DRM加密視頻。

視頻加密簡介

阿里云視頻點(diǎn)播已經(jīng)擁有一套完善的內(nèi)容安全保護(hù)機(jī)制,可用于保障視頻內(nèi)容不被盜鏈、非法下載和傳播。安全機(jī)制包括訪問限制、URL鑒權(quán)、遠(yuǎn)程鑒權(quán)、視頻加密和安全下載等。

有關(guān)訪問限制、URL鑒權(quán)及遠(yuǎn)程鑒權(quán)等安全機(jī)制的詳細(xì)內(nèi)容請(qǐng)參見視頻安全概述,本文主要介紹三種視頻加密方式的視頻播放。三種視頻加密的簡介如下:

安全機(jī)制

安全手段

特點(diǎn)

安全等級(jí)

使用門檻

視頻加密

阿里云視頻加密(私有加密)

云端一體的視頻加密解決方案,采用私有加密算法,并確保鏈路的安全傳輸。

較低,簡單配置并集成阿里云播放器即可。

HLS標(biāo)準(zhǔn)加密

HLS通用加密方案,使用AES_128對(duì)內(nèi)容加密,適配所有HLS播放器,但密鑰容易被竊取。

較高

高,需自建密鑰管理和令牌頒發(fā)服務(wù),并確保鏈路傳輸安全。

商業(yè)DRM

蘋果Fairplay、谷歌Widevine的原生支持,安全級(jí)別很高,滿足大的版權(quán)內(nèi)容提供商的要求。

高,按調(diào)用License次數(shù)收費(fèi),只需集成阿里云播放器SDK。

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

說明

使用Web播放器SDK播放加密視頻之前,請(qǐng)先了解對(duì)瀏覽器及各類型加密功能的適配情況,例如:暫不支持在移動(dòng)端iOS平臺(tái)的Web播放器SDK中播放私有加密視頻等,詳細(xì)信息請(qǐng)參見H5瀏覽器適配說明H5功能適配說明

終端

播放方式

HLS(M3U8)私有加密

MP4私有加密

FLV私有加密

HLS(M3U8)標(biāo)準(zhǔn)加密

HLS(M3U8) DRM加密

Web端

點(diǎn)播UrlSource

?

?

?

??

?

點(diǎn)播VidAuth

??

?

?

??

?

點(diǎn)播VidSts

?

?

?

??

??

直播UrlSource

?

?

??

?

直播LiveStsSource

??

?

?

??

Android端

點(diǎn)播UrlSource

??,SDK版本需為6.17.0及以上版本

??,SDK版本需為6.8.0及以上版本

?

?

?

點(diǎn)播VidAuth

??

??

?

??

?

點(diǎn)播VidSts

??

??

?

??

??

直播UrlSource

?

?

??

?

直播LiveStsSource

??

??

?

??

iOS端

點(diǎn)播UrlSource

??,SDK版本需為6.17.0及以上版本

??,SDK版本需為6.8.0及以上版本

?

?

?

點(diǎn)播VidAuth

??

??

?

??

?

點(diǎn)播VidSts

??

??

?

??

??

直播UrlSource

?

?

??

?

直播LiveStsSource

??

??

?

??

Flutter

點(diǎn)播UrlSource

??

??

?

?

?

點(diǎn)播VidAuth

??

??

?

??

?

點(diǎn)播VidSts

??

??

?

??

?

直播UrlSource

?

?

?

?

?

直播LiveStsSource

?

?

??

?

?

鴻蒙端

點(diǎn)播UrlSource

?

?

?

??

?

點(diǎn)播VidAuth

??

?

?

??

?

點(diǎn)播VidSts

??

?

?

??

?

直播UrlSource

?

?

??

?

直播LiveStsSource

??

??

?

?

阿里云視頻加密(私有加密)

簡介

阿里云視頻加密是對(duì)視頻數(shù)據(jù)加密,即使下載到本地,視頻本身也是被加密的,無法惡意二次分發(fā),可有效防止視頻泄露和盜鏈問題。有關(guān)阿里云視頻加密的加密機(jī)制及核心優(yōu)勢等更多內(nèi)容,請(qǐng)參見阿里云視頻加密(私有加密)

阿里云播放器將內(nèi)部解密邏輯、服務(wù)端交互邏輯都封裝到了SDK內(nèi)部。您只需要配置加密轉(zhuǎn)碼,再集成播放器播放視頻即可低成本使用加密播放。

重要

阿里云視頻加密僅支持輸出HLS格式(M3U8格式)、FLV格式和MP4格式的視頻,且只能使用阿里云播放器播放加密視頻。

配置私有加密

阿里云視頻加密的詳細(xì)流程及配置,請(qǐng)參見如何使用

播放私有加密視頻-Web端

使用限制

經(jīng)過阿里云視頻加密(私有加密)加密過的HLS格式視頻,現(xiàn)僅支持使用阿里云播放器播放。

操作步驟

用戶可以在自己的Web頁面中嵌入Web播放器并實(shí)現(xiàn)播放。代碼示例如下:

說明
  • 使用阿里云Web播放器SDK之前,請(qǐng)先了解瀏覽器及阿里云視頻加密(私有加密)視頻播放功能的適配情況,具體如下:

    • H5 模式支持桌面端和移動(dòng)端瀏覽器環(huán)境,具體支持情況請(qǐng)參見H5功能適配說明

    • Flash模式僅支持桌面端瀏覽器環(huán)境,具體的瀏覽器支持情況請(qǐng)參見Flash瀏覽器適配說明

  • 出于安全考慮,阿里云視頻加密(私有加密)不支持用真實(shí)的加密視頻調(diào)試。

私有加密播放-視頻點(diǎn)播VidAuth播放(HLS格式)

經(jīng)過私有加密的視頻通過點(diǎn)播VidAuth方式播放時(shí),與播放普通視頻相比,需額外傳入?yún)?shù)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>點(diǎn)播私有加密播放測試用例</title>
       <link rel="stylesheet"  />
       <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>',// 必選參數(shù),可以通過點(diǎn)播控制臺(tái)(路徑:媒資庫>音/視頻)查詢。示例:1e067a2831b641db90d570b6480f****。
                playauth : '<your PlayAuth>',// 必選參數(shù),參數(shù)值可通過調(diào)用GetVideoPlayAuth接口獲取。
                encryptType: 1, // 必選參數(shù),當(dāng)播放私有加密流時(shí)需要設(shè)置本參數(shù)值為1。其它情況無需設(shè)置。
                playConfig:{EncryptType:'AliyunVoDEncryption'}, // 當(dāng)您輸出的M3U8流中,含有其他非私有加密流時(shí),需要指定此參數(shù)。
                // authTimeout: 7200, // 可選參數(shù),播放地址的有效時(shí)長,單位:秒。該時(shí)長會(huì)覆蓋在視頻點(diǎn)播控制臺(tái)設(shè)置的URL鑒權(quán)的有效時(shí)長。如果不傳,則取默認(rèn)值7200。如需設(shè)置此參數(shù),請(qǐng)確保該時(shí)間大于視頻的實(shí)際時(shí)長,防止播放地址在播放完成前過期。
              },function(player){
                console.log('The player is created.')
             });
          </script>
      </body>
  </html>
說明

如果希望支持 iOS 17.1 以下瀏覽器的點(diǎn)播私有加密,需要您自行部署一個(gè)額外的播放器插件腳本,具體步驟如下:

原理說明:iOS 17.1 以下私有加密需要一個(gè)額外的插件,該插件使用了 Service Worker 技術(shù),由于瀏覽器的安全策略限制,僅允許網(wǎng)站訪問和當(dāng)前網(wǎng)站同源的 service worker 腳本,因此需要您將播放器插件腳本部署到和您網(wǎng)站相同的域名下使用。

一、下載腳本:https://g.alicdn.com/apsara-media-box/imp-web-player/<版本號(hào)>/aliplayer-worker-min.js

二、部署腳本:假設(shè)您播放私有加密視頻的網(wǎng)站為 https://www.aliyun.com/a/b.html,您需要將腳本部署到 https://www.aliyun.com/a/aliplayer-worker-min.js,即和當(dāng)前網(wǎng)站同級(jí)目錄

三、初始化播放器時(shí)傳入此地址:

new Aliplayer({
  // ...其它參數(shù)
  swScriptURL: 'https://www.aliyun.com/a/aliplayer-worker-min.js' // 請(qǐng)?zhí)顚懲暾牟寮_本地址,確保此地址可以訪問
})

注意:請(qǐng)確保播放器的版本和插件的版本完全一致。

私有加密播放-視頻直播LiveStsSource播放(HLS格式)

經(jīng)過私有加密的視頻通過直播LiveStsSource方式播放時(shí),需要傳入U(xiǎn)RL和STS臨時(shí)身份憑證等信息,STS臨時(shí)身份憑證的生成請(qǐng)參見使用STS臨時(shí)授權(quán)方案上傳視頻。示例代碼如下:

<!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"  />
      <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, // 直播設(shè)置為true。
               source: '<your live stream url>',// 必選參數(shù)。播放地址為經(jīng)過私有加密的HLS直播流地址。
               accessKeyId: '<your AccessKey ID>',// 必選參數(shù)。STS臨時(shí)AK對(duì)的訪問密鑰ID,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
               accessKeySecret: '<your AccessKey Secret>',//必選參數(shù)。STS臨時(shí)AK對(duì)的訪問密鑰,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
               securityToken: '<your STS token>',// 必選參數(shù)。STS安全令牌,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
               domain: '<your Domain>',// 必選參數(shù)。直播流的拉流域名。
               app:'<your App Name>',// 必選參數(shù)。直播流的AppName。
               stream:'<your Stream Name>',// 必選參數(shù)。直播流的StreamName。
               regionId: '<region of your video>',// 必選參數(shù)。服務(wù)地域。如cn-shanghai、eu-central-1, ap-southeast-1等。
             },function(player){
               console.log('The player is created.')
            });
         </script>
     </body>
 </html>

播放私有加密視頻-Android端

使用限制

經(jīng)過阿里云視頻加密(私有加密)加密過的HLS格式、FLV格式和MP4格式視頻,現(xiàn)僅支持使用阿里云播放器播放。

操作步驟

用戶可以通過快速集成Android播放器到自己的應(yīng)用中并實(shí)現(xiàn)播放。步驟及示例代碼如下:

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

    Android播放器SDK的集成操作請(qǐng)參見快速集成

  2. 創(chuàng)建播放器(預(yù)加載)播放(加載)視頻。

    創(chuàng)建播放器的操作請(qǐng)參見創(chuàng)建播放器。其中,步驟3.創(chuàng)建DataSource的操作請(qǐng)根據(jù)實(shí)際需求選擇以下任一方式創(chuàng)建。

    私有加密播放-視頻點(diǎn)播UrlSource播放(HLS格式+MP4格式)

    說明

    僅6.8.0及以后版本的Android播放器SDK支持通過點(diǎn)播UrlSource方式播放MP4格式的私有加密視頻,6.17.0及以后的版本支持HLS格式(單碼率、多碼率)的私有加密視頻。

    經(jīng)過私有加密輸出的HLS格式或MP4格式視頻通過點(diǎn)播UrlSource方式播放時(shí),可調(diào)用GetPlayInfo - 獲取音視頻播放地址接口獲取視頻的播放地址,獲取到的視頻URL(僅限MP4需此參數(shù),HLS不需要)需要您按協(xié)議在URL尾部自行拼接etavirp_nuyila=1后再傳入播放器進(jìn)行播放,播放器SDK的配置與播放普通視頻配置一致,無需額外設(shè)置參數(shù)。

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

    // 播放地址
    String playURL = "https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1";
    
    // 播放器
    UrlSource urlSource = new UrlSource();
    urlSource.setUri(playURL);// 必選參數(shù),視頻的播放地址(URL),可調(diào)用GetPlayInfo接口獲取視頻URL
    aliPlayer.setDataSource(urlSource);
    aliPlayer.prepare();
    
    // 短視頻播放器
    AliListPlayer aliyunListPlayer = AliPlayerFactory.createAliListPlayer(getApplicationContext());
    // 添加UrlSource播放源
    aliyunListPlayer.addUrl(playURL,uid);
    aliyunListPlayer.moveTo(uid);
    
    //預(yù)加載
    MediaLoader mediaLoader = MediaLoader.getInstance();
    mediaLoader.load(playURL,"duration");

    私有加密播放-視頻點(diǎn)播VidAuth播放(HLS格式+MP4格式)

    經(jīng)過私有加密輸出的HLS格式或MP4格式視頻通過點(diǎn)播VidAuth方式播放時(shí),若當(dāng)前視頻存在其他非私有加密類型的加密流或普通轉(zhuǎn)碼流時(shí),可通過設(shè)置視頻加密類型為AliyunVoDEncryption來篩選私有加密流進(jìn)行播放

    VidAuth vidAuth = new VidAuth();
    VidPlayerConfigGen vidPlayerConfigGen = new VidPlayerConfigGen();
    vidPlayerConfigGen.setEncryptType(VidPlayerConfigGen.EncryptType.AliyunVoDEncryption);// 可選參數(shù),設(shè)置加密類型為AliyunVoDEncryption時(shí),則只會(huì)返回經(jīng)過私有加密的視頻流。
    vidAuth.setPlayConfig(vidPlayerConfigGen);
    vidAuth.setVid("Vid信息");// 必選參數(shù),視頻ID(VideoId)。
    vidAuth.setPlayAuth("<yourPlayAuth>");// 必選參數(shù),播放憑證,需要調(diào)用點(diǎn)播服務(wù)的GetVideoPlayAuth接口生成。
    vidAuth.setRegion("接入地域");// 5.5.5.0及之后版本播放器SDK,本參數(shù)已棄用,無需設(shè)置region,播放器會(huì)自動(dòng)解析region;5.5.5.0之前版本播放器SDK,本參數(shù)必選,點(diǎn)播服務(wù)的接入地域,默認(rèn)為cn-shanghai。
    // vidAuth.setAuthTimeout(3600); // 可選參數(shù),播放地址的有效時(shí)長,單位:秒。該時(shí)長會(huì)覆蓋在視頻點(diǎn)播控制臺(tái)設(shè)置的URL鑒權(quán)的有效時(shí)長。如果不傳,則取默認(rèn)值3600。如需設(shè)置此參數(shù),請(qǐng)確保該時(shí)間大于視頻的實(shí)際時(shí)長,防止播放地址在播放完成前過期。
    aliPlayer.setDataSource(vidAuth);

    私有加密播放-視頻點(diǎn)播VidSts播放(HLS格式+MP4格式)

    經(jīng)過私有加密輸出的HLS格式或MP4格式視頻通過點(diǎn)播VidSts方式播放時(shí),若當(dāng)前視頻存在其他非私有加密類型的加密流或普通轉(zhuǎn)碼流時(shí),可通過設(shè)置視頻加密類型為AliyunVoDEncryption來篩選私有加密流進(jìn)行播放。

    VidSts vidSts = new VidSts();
    VidPlayerConfigGen vidPlayerConfigGen = new VidPlayerConfigGen();
    vidPlayerConfigGen.setEncryptType(VidPlayerConfigGen.EncryptType.AliyunVoDEncryption);// 可選參數(shù),設(shè)置加密類型為AliyunVoDEncryption時(shí),則只會(huì)返回經(jīng)過私有加密的視頻流。
    vidSts.setPlayConfig(vidPlayerConfigGen);
    vidSts.setVid("Vid信息");// 必選參數(shù),視頻ID(VideoId)。
    vidSts.setAccessKeyId("<yourAccessKeyId>");// 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰ID,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
    vidSts.setAccessKeySecret("<yourAccessKeySecret>");// 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
    vidSts.setSecurityToken("<yourSecurityToken>");// 必選參數(shù),STS安全令牌,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
    vidSts.setRegion("接入地域");// 必選參數(shù),點(diǎn)播服務(wù)的接入地域,默認(rèn)為cn-shanghai。
    // vidSts.setAuthTimeout(3600); // 可選參數(shù),播放地址的有效時(shí)長,單位:秒。該時(shí)長會(huì)覆蓋在視頻點(diǎn)播控制臺(tái)設(shè)置的URL鑒權(quán)的有效時(shí)長。如果不傳,則取默認(rèn)值3600。如需設(shè)置此參數(shù),請(qǐng)確保該時(shí)間大于視頻的實(shí)際時(shí)長,防止播放地址在播放完成前過期。
    aliPlayer.setDataSource(vidSts);

    私有加密播放-視頻直播LiveStsSource播放(HLS格式+FLV格式)

    經(jīng)過私有加密輸出的HLS格式或者FLV格式視頻通過直播LiveStsSource方式播放時(shí),需要傳入U(xiǎn)RL和STS憑證,并設(shè)置視頻加密類型為AliEncryption。示例代碼如下:

    1. 創(chuàng)建DataSource。

      需傳遞AVPLiveStsSource作為播放源。

      // 創(chuàng)建LiveSts,EncryptionType需要設(shè)置為AliEncryption
      LiveSts liveSts = new LiveSts();
      liveSts.setUrl("<your live stream url>");// 必選參數(shù),播放地址為經(jīng)過私有加密的HLS直播流地址。
      liveSts.setAccessKeyId("<your AccessKey ID>");// 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰ID,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
      liveSts.setAccessKeySecret("<your AccessKey Secret>");// 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
      liveSts.setSecurityToken("<your STS token>");// 必選參數(shù),STS安全令牌,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
      liveSts.setDomain("<your Domain>");// 必選參數(shù),直播流的播流域名。
      liveSts.setApp("<your App Name>");// 必選參數(shù),直播流的AppNam。
      liveSts.setStream("<your Stream Name>");// 必選參數(shù),直播流的StreamName。
      liveSts.setEncryptionType(LiveSts.LiveEncryptionType.AliEncryption);// 必選參數(shù),設(shè)置加密類型為AliEncryption。
      liveSts.setRegion("<region of your video>");// 必選參數(shù),服務(wù)地域。如cn-shanghai等。
      // 設(shè)置播放源
      aliPlayer.setDataSource(liveSts);
      // 準(zhǔn)備播放
      aliPlayer.prepare();
    2. 監(jiān)聽STS是否無效。

      加密直播播放過程中可能會(huì)有更換加密Key的過程,換Key時(shí)則會(huì)通過STS去請(qǐng)求到最新的Key。開發(fā)者需要監(jiān)聽STS是否有效。如果無效則會(huì)影響加密直播流的播放。

      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,那么建議停止播放。防止出現(xiàn)花屏。
              mAliyunVodPlayer.stop();
              return IPlayer.StsStatus.Invalid;
          }
      
          @Override
          public AliPlayer.Status onVerifyAuth(VidAuth auth) {
              return AliPlayer.Status.Valid;
          }
      });
      說明

      獲取STS成功之后,需要調(diào)用updateLiveStsInfo方法去更新STS。如果獲取失敗,則建議停止播放。如果不更新STS,超時(shí)之后播放器會(huì)繼續(xù)使用之前的STS去獲取Key。如果STS失效,則可能會(huì)出現(xiàn)花屏或者播放失敗。

      mAliyunVodPlayer.updateStsInfo(stsInfo);

播放私有加密視頻-iOS端

使用限制

經(jīng)過阿里云視頻加密(私有加密)加密過的HLS格式、FLV格式和MP4格式視頻,現(xiàn)僅支持使用阿里云播放器播放。

操作步驟

用戶可以通過快速集成iOS播放器到自己的應(yīng)用中并實(shí)現(xiàn)播放。步驟如下:

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

    iOS播放器SDK的集成操作請(qǐng)參見快速集成

  2. 創(chuàng)建播放器(預(yù)加載)播放(加載)視頻。

    創(chuàng)建播放器的操作步驟請(qǐng)參見創(chuàng)建播放器。其中,步驟3.創(chuàng)建DataSource的操作請(qǐng)根據(jù)實(shí)際需求選擇以下任一方式創(chuàng)建。

    私有加密播放-視頻點(diǎn)播UrlSource播放(HLS格式+MP4格式)

    說明

    僅6.8.0及以后版本的iOS播放器SDK支持通過點(diǎn)播UrlSource方式播放MP4格式的私有加密視頻,6.17.0及以后版本支持HLS格式(單碼率、多碼率)的私有加密視頻。

    經(jīng)過私有加密輸出的HLS格式或MP4格式視頻通過點(diǎn)播UrlSource方式播放時(shí),可調(diào)用GetPlayInfo - 獲取音視頻播放地址接口獲取視頻的播放地址,獲取到的視頻URL(僅限MP4需此參數(shù),HLS不需要)需要您按協(xié)議在URL尾部自行拼接etavirp_nuyila=1后再傳入播放器進(jìn)行播放,播放器SDK的配置與播放普通視頻配置一致,無需額外設(shè)置參數(shù)。

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

    //播放地址
    NSString *playURL = @"https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1";
    
    //播放器
    AliPlayer *player = [[AliPlayer alloc] init];
    AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:playURL]; // 必選參數(shù),視頻的播放地址(URL),可調(diào)用GetPlayInfo接口獲取視頻URL,獲取到的視頻URL(僅限MP4)需要在尾部自行拼接etavirp_nuyila=1后再傳入,示例:https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1
    [player setUrlSource:urlSource];
    [player prepare];
    
    //列表播放器
    AliListPlayer *listPlayer = [[AliListPlayer alloc] init];
    [listPlayer addUrlSource:playURL uid:UUIDString];
    [listPlayer moveTo:@"uid"];
    
    //預(yù)加載
    AliMedialoader *mediaLoader = [AliMediaLoader shareInstance];
    [mediaLoader load:playURL duration:1000];

    私有加密播放-視頻點(diǎn)播VidAuth(HLS格式+MP4格式)

    經(jīng)過私有加密輸出的HLS格式或MP4格式視頻通過點(diǎn)播VidAuth方式播放時(shí),若當(dāng)前視頻存在其他非私有加密類型的加密流或普通轉(zhuǎn)碼流時(shí),可通過設(shè)置視頻加密類型為AliyunVoDEncryption來篩選私有加密流進(jìn)行播放

    AVPVidAuthSource *authSource = [[AVPVidAuthSource alloc] init];
    authSource.vid = @"Vid信息"; // 必選參數(shù),視頻ID(VideoId)。
    authSource.playAuth = @"<yourPlayAuth>"; // 必選參數(shù),播放憑證,需要調(diào)用點(diǎn)播服務(wù)的GetVideoPlayAuth接口生成。
    authSource.region = @"接入地域"; // 5.5.5.0及之后版本播放器SDK,本參數(shù)已棄用,無需設(shè)置region,播放器會(huì)自動(dòng)解析region;5.5.5.0之前版本播放器SDK,本參數(shù)必選,點(diǎn)播服務(wù)的接入地域,默認(rèn)為cn-shanghai。
    // authSource.authTimeout = 3600; // 可選參數(shù),播放地址的有效時(shí)長,單位:秒。該時(shí)長會(huì)覆蓋在視頻點(diǎn)播控制臺(tái)設(shè)置的URL鑒權(quán)的有效時(shí)長。如果不傳,則取默認(rèn)值3600。如需設(shè)置此參數(shù),請(qǐng)確保該時(shí)間大于視頻的實(shí)際時(shí)長,防止播放地址在播放完成前過期。
    
    //通過VidPlayerConfigGenerator構(gòu)建config
    VidPlayerConfigGenerator* config = [[VidPlayerConfigGenerator alloc]init];
    [config addVidPlayerConfigByStringValue:@"EncryptType" value:@"AliyunVoDEncryption"]; //可選參數(shù),設(shè)置加密類型為AliyunVoDEncryption時(shí),則只會(huì)返回經(jīng)過私有加密的視頻流。
    authSource.playConfig = [config generatePlayerConfig]; 
    [self.player setAuthSource:authSource];

    私有加密播放-視頻點(diǎn)播VidSts(HLS格式+MP4格式)

    經(jīng)過私有加密輸出的HLS格式或MP4格式視頻通過點(diǎn)播VidSts方式播放時(shí),若當(dāng)前視頻存在其他非私有加密類型的加密流或普通轉(zhuǎn)碼流時(shí),可通過設(shè)置視頻加密類型為AliyunVoDEncryption來篩選私有加密流進(jìn)行播放

    AVPVidStsSource *source = [[AVPVidStsSource alloc] init];
    source.region = @"接入地域"; // 必選參數(shù),點(diǎn)播服務(wù)的接入地域,默認(rèn)為cn-shanghai。
    source.vid = @"Vid信息"; // 必選參數(shù),視頻ID(VideoId)。
    source.securityToken = @"<yourSecurityToken>"; // 必選參數(shù),STS安全令牌,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
    source.accessKeySecret = @"<yourAccessKeySecret>"; // 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
    source.accessKeyId = @"<yourAccessKeyId>"; // 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰ID,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
    // source.authTimeout = 3600; // 可選參數(shù),播放地址的有效時(shí)長,單位:秒。該時(shí)長會(huì)覆蓋在視頻點(diǎn)播控制臺(tái)設(shè)置的URL鑒權(quán)的有效時(shí)長。如果不傳,則取默認(rèn)值3600。如需設(shè)置此參數(shù),請(qǐng)確保該時(shí)間大于視頻的實(shí)際時(shí)長,防止播放地址在播放完成前過期。
    
    //通過VidPlayerConfigGenerator構(gòu)建config
    VidPlayerConfigGenerator* config = [[VidPlayerConfigGenerator alloc]init];
    [config addVidPlayerConfigByStringValue:@"EncryptType" value:@"AliyunVoDEncryption"]; //可選參數(shù),設(shè)置加密類型為AliyunVoDEncryption時(shí),則只會(huì)返回經(jīng)過私有加密的視頻流。
    source.playConfig = [config generatePlayerConfig]; 
    
    //設(shè)置播放源
    [self.player setStsSource:source];

    私有加密播放-視頻直播LiveStsSource(HLS格式+FLV格式)

    經(jīng)過私有加密輸出的HLS格式或者FLV格式視頻通過直播LiveStsSource方式播放時(shí),需要傳入U(xiǎn)RL和STS憑證,并設(shè)置視頻加密類型為ENCRYPTION_TYPE_ALIVODENCRYPTION。示例代碼如下:

    1. 創(chuàng)建DataSource。

      需傳遞AVPLiveStsSource作為播放源。

      // 創(chuàng)建LiveSts,encryptionType需要設(shè)置為ENCRYPTION_TYPE_ALIVODENCRYPTION
      AVPLiveStsSource *liveStsSource = [[AVPLiveStsSource alloc] initWithUrl:@"加密直播url" 
                                                                  accessKeyId:@"臨時(shí)akId" 
                                                                  accessKeySecret:@"臨時(shí)akId" 
                                                                  securityToken:@"安全token" 
                                                                  region:@"region值" 
                                                                  domain:@"url播流域名" 
                                                                  app:@"播流應(yīng)用名" 
                                                                  stream:@"播流流名" 
                                                                  encryptionType:ENCRYPTION_TYPE_ALIVODENCRYPTION];// 必選參數(shù),設(shè)置加密類型為ENCRYPTION_TYPE_ALIVODENCRYPTION。
       // 設(shè)置播放源
       [self.aliPlayer setLiveStsSource:liveStsSource];
       ......
       // 準(zhǔn)備播放
       [self.aliPlayer prepare];
    2. 監(jiān)聽STS是否無效。

      加密直播播放過程中可能會(huì)有更換加密Key的過程,換Key時(shí)則會(huì)通過STS去請(qǐng)求到最新的Key。開發(fā)者需要監(jiān)聽STS是否有效。如果無效則會(huì)影響加密直播流的播放。

       __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成功之后,需要調(diào)用updateLiveStsInfo方法去更新STS。如果獲取失敗,則建議停止播放。如果不更新STS,超時(shí)之后播放器會(huì)繼續(xù)使用之前的STS去獲取Key。如果STS失效,則可能會(huì)出現(xiàn)花屏或者播放失敗。

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

播放私有加密視頻-Flutter端

使用限制

經(jīng)過阿里云視頻加密(私有加密)加密過的HLS格式、FLV格式和MP4格式視頻,現(xiàn)僅支持使用阿里云播放器播放。

操作步驟

用戶可以通過快速集成Flutter播放器到自己的應(yīng)用中并實(shí)現(xiàn)播放。步驟如下:

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

    Flutter播放器SDK的集成操作請(qǐng)參見快速集成

  2. 創(chuàng)建播放器(預(yù)加載)播放(加載)視頻。

    創(chuàng)建播放器的操作步驟請(qǐng)參見創(chuàng)建播放器。其中,步驟3.創(chuàng)建播放源的操作請(qǐng)根據(jù)實(shí)際需求選擇以下任一方式創(chuàng)建。

    私有加密播放-視頻點(diǎn)播UrlSource播放(HLS格式+MP4格式)

    說明

    僅6.8.0及以后版本的Flutter播放器SDK支持通過點(diǎn)播UrlSource方式播放MP4格式的私有加密視頻,6.17.0及以后版本支持HLS格式(單碼率、多碼率)的私有加密視頻。

    經(jīng)過私有加密輸出的HLS格式或MP4格式視頻通過點(diǎn)播UrlSource方式播放時(shí),可調(diào)用GetPlayInfo - 獲取音視頻播放地址接口獲取視頻的播放地址,獲取到的視頻URL(僅限MP4需此參數(shù),HLS不需要)需要您按協(xié)議在URL尾部自行拼接etavirp_nuyila=1后再傳入播放器進(jìn)行播放,播放器SDK的配置與播放普通視頻配置一致,無需額外設(shè)置參數(shù)。

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

    //播放地址
    String playURL = "https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1"
    
    //創(chuàng)建播放器實(shí)例
    FlutterAliplayer fAliplayer = FlutterAliPlayerFactory.createAliPlayer();
    fAliplayer.setUrl(playURL);
    fAliplayer.prepare();
    
    //列表播放器
    FlutterAliListPlayer fAliListPlayer = FlutterAliPlayerFactory.createAliListPlayer();
    fAliListPlayer.addUrlSource(playURL,uid);
    fAliListPlayer.moveTo("uid");
    
    //預(yù)加載
    FlutterAliPlayerMediaLoader fAliPlayerMediaLoader = FlutterAliPlayerMediaLoader();
    fAliPlayerMediaLoader.load(playURL,"duration");

    私有加密播放-視頻點(diǎn)播VidAuth(HLS格式+MP4格式)

    經(jīng)過私有加密輸出的HLS格式或MP4格式視頻通過點(diǎn)播VidAuth方式播放時(shí),若當(dāng)前視頻存在其他非私有加密類型的加密流或普通轉(zhuǎn)碼流時(shí),可通過設(shè)置視頻加密類型為AliyunVoDEncryption來篩選私有加密流進(jìn)行播放

    FlutterAliplayer.setEncryptType(EncryptType.AliyunVoDEncryption);// 可選參數(shù),設(shè)置加密類型為AliyunVoDEncryption時(shí),則只會(huì)返回經(jīng)過私有加密的視頻流。
    FlutterAliplayer.generatePlayerConfig().then((value) {
              this.fAliplayer.setVidAuth(
                  vid: "Vid信息",
                  region: "接入地域",// 必選參數(shù),點(diǎn)播服務(wù)的接入地域,默認(rèn)為cn-shanghai。
                  playAuth: "<yourPlayAuth>",// 必選參數(shù),播放憑證,需要調(diào)用點(diǎn)播服務(wù)的GetVideoPlayAuth接口生成。
                  playConfig: value);
    });

    私有加密播放-視頻點(diǎn)播VidSts(HLS格式+MP4格式)

    經(jīng)過私有加密輸出的HLS格式或MP4格式視頻通過點(diǎn)播VidSts方式播放時(shí),若當(dāng)前視頻存在其他非私有加密類型的加密流或普通轉(zhuǎn)碼流時(shí),可通過設(shè)置視頻加密類型為AliyunVoDEncryption來篩選私有加密流進(jìn)行播放

    FlutterAliplayer.setEncryptType(EncryptType.AliyunVoDEncryption);// 可選參數(shù),設(shè)置加密類型為AliyunVoDEncryption時(shí),則只會(huì)返回經(jīng)過私有加密的視頻流。
    FlutterAliplayer.generatePlayerConfig().then((value) {
              this.fAliplayer.setVidSts(
                  vid: "Vid信息",
                  region: "接入地域",
                  accessKeyId: "<yourAccessKeyId>",
                  accessKeySecret: "<yourAccessKeySecret>",
                  securityToken: "<yourSecurityToken>",
                  playConfig: value);
            });

HLS標(biāo)準(zhǔn)加密

簡介

HLS標(biāo)準(zhǔn)加密支持HTTP Live Streaming中規(guī)定的通用加密方案,使用AES-128對(duì)視頻內(nèi)容本身進(jìn)行加密,同時(shí)能支持所有的HLS播放器,您可選擇使用自研或開源的播放器。相比私有加密方案靈活性更好,但使用門檻更高、安全性更低。

有關(guān)HLS標(biāo)準(zhǔn)加密的加密機(jī)制及使用限制等更多內(nèi)容,請(qǐng)參見HLS標(biāo)準(zhǔn)加密

配置HLS標(biāo)準(zhǔn)加密

HLS標(biāo)準(zhǔn)加密的詳細(xì)流程及配置,請(qǐng)參見接入流程

播放HLS標(biāo)準(zhǔn)加密視頻-Web端

使用限制

HLS標(biāo)準(zhǔn)加密支持所有的HLS播放器,用戶可選擇使用自研或開源的播放器。本文以介紹如何使用阿里云播放器播放HLS標(biāo)準(zhǔn)加密視頻為例進(jìn)行說明。阿里云播放器支持用戶令牌傳遞,阿里云CDN服務(wù)會(huì)動(dòng)態(tài)修改M3U8文件中的解密URI,解密URI中會(huì)帶上用戶的令牌,業(yè)務(wù)方可以對(duì)令牌進(jìn)行驗(yàn)證。

操作步驟

用戶可以在自己的Web頁面中嵌入Web播放器并實(shí)現(xiàn)播放。

  1. 請(qǐng)先參考快速接入,將Web播放器SDK引入到自己的頁面中。

說明

使用阿里云Web播放器SDK之前,請(qǐng)先了解瀏覽器及HLS標(biāo)準(zhǔn)加密視頻播放功能的適配情況,具體如下:

  • H5模式支持桌面端和移動(dòng)端瀏覽器環(huán)境,具體的瀏覽器支持情況請(qǐng)參見H5功能適配說明

  • Flash模式僅支持桌面端瀏覽器環(huán)境,具體的瀏覽器支持情況請(qǐng)參見Flash瀏覽器適配說明

2.

HLS標(biāo)準(zhǔn)加密播放-視頻點(diǎn)播VidAuth播放

經(jīng)過HLS標(biāo)準(zhǔn)加密的視頻通過點(diǎn)播VidAuth方式播放時(shí),若當(dāng)前視頻存在其他非HLS標(biāo)準(zhǔn)加密類型的加密流或普通轉(zhuǎn)碼流時(shí),可通過設(shè)置視頻加密類型為HLSEncryption來篩選HLS標(biāo)準(zhǔn)加密流進(jìn)行播放,示例代碼如下:

let player = new Aliplayer({
   id:'J_prismPlayer',
   vid:'<your video ID>', // 必選參數(shù)。音視頻ID。示例:1e067a2831b641db90d570b6480f****。
   playauth:'<your PlayAuth>', // 必選參數(shù)。音視頻播放憑證。
   playConfig: { // 可選參數(shù)
     MtsHlsUriToken: '', // 可選參數(shù),如需校驗(yàn)MtsHlsUriToken(用戶令牌),可使用此參數(shù)傳遞。
     EncryptType: 'HLSEncryption', // 可選參數(shù),設(shè)置加密類型為HLSEncryption時(shí),則只會(huì)返回經(jīng)過HLS標(biāo)準(zhǔn)加密的視頻流。
   },
 });

HLS標(biāo)準(zhǔn)加密播放-視頻點(diǎn)播VidSts播放

經(jīng)過HLS標(biāo)準(zhǔn)加密的視頻通過點(diǎn)播VidSts方式播放時(shí),若當(dāng)前視頻存在其他非HLS標(biāo)準(zhǔn)加密類型的加密流或普通轉(zhuǎn)碼流時(shí),可通過設(shè)置視頻加密類型為HLSEncryption來篩選HLS標(biāo)準(zhǔn)加密流進(jìn)行播放,示例代碼如下:

let player = new Aliplayer({
   id: 'J_prismPlayer',
   vid : '<your video ID>', // 必選參數(shù)。音視頻ID可以在音視頻上傳完成后通過控制臺(tái)(路徑:媒資庫 > 音/視頻。)或服務(wù)端接口(SearchMedia )獲取。示例:1e067a2831b641db90d570b6480f****。
   accessKeyId: '<your AccessKey ID>', // 必選參數(shù)。STS臨時(shí)AK對(duì)的訪問密鑰ID,生成STS安全令牌時(shí)返回。
   securityToken: '<your STS token>', // 必選參數(shù)。STS安全令牌,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
   accessKeySecret: '<your AccessKey Secret>', // 必選參數(shù)。STS臨時(shí)AK對(duì)的訪問密鑰,生成STS安全令牌時(shí)返回。
   region: '<region of your video>', // 必選參數(shù)。媒體資源所在的地域標(biāo)識(shí)。如cn-shanghai、eu-central-1, ap-southeast-1等。
   playConfig: { // 可選參數(shù)
     MtsHlsUriToken: '', // 可選參數(shù),如需校驗(yàn)MtsHlsUriToken(用戶令牌),可使用此參數(shù)傳遞。
     EncryptType: 'HLSEncryption', // 可選參數(shù),設(shè)置加密類型為HLSEncryption時(shí),則只會(huì)返回經(jīng)過HLS標(biāo)準(zhǔn)加密的視頻流。
   },
 };

HLS標(biāo)準(zhǔn)加密播放-視頻直播UrlSource播放

經(jīng)過HLS標(biāo)準(zhǔn)加密的視頻通過直播UrlSource方式播放時(shí),與播放普通視頻一致,無需額外設(shè)置參數(shù)。

  let player = new Aliplayer({
    id:'J_prismPlayer',
    source:'<your play URL>', // 播放地址,可以是第三方直播地址,或阿里云直播服務(wù)中的拉流地址。
    isLive: true, // 是否為直播播放。
  });

播放HLS標(biāo)準(zhǔn)加密視頻-Android端

使用限制

HLS標(biāo)準(zhǔn)加密支持所有的HLS播放器,用戶可選擇使用自研或開源的播放器。本文以介紹如何使用阿里云播放器播放HLS標(biāo)準(zhǔn)加密視頻為例進(jìn)行說明。阿里云播放器支持用戶令牌傳遞,阿里云CDN服務(wù)會(huì)動(dòng)態(tài)修改M3U8文件中的解密URI,解密URI中會(huì)帶上用戶的令牌,業(yè)務(wù)方可以對(duì)令牌進(jìn)行驗(yàn)證。

操作步驟

用戶可以通過快速集成Android播放器到自己的應(yīng)用中并實(shí)現(xiàn)播放。步驟及示例代碼如下:

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

    Android播放器SDK的集成操作請(qǐng)參見快速集成

  2. 創(chuàng)建播放器播放視頻。

    創(chuàng)建播放器的操作請(qǐng)參見創(chuàng)建播放器。其中,步驟3.創(chuàng)建DataSource的操作請(qǐng)根據(jù)實(shí)際需求選擇以下任一方式創(chuàng)建。

    HLS標(biāo)準(zhǔn)加密播放-視頻點(diǎn)播VidAuth播放

    經(jīng)過HLS標(biāo)準(zhǔn)加密的視頻通過點(diǎn)播VidAuth方式播放時(shí),若當(dāng)前視頻存在其他非HLS標(biāo)準(zhǔn)加密類型的加密流或普通轉(zhuǎn)碼流時(shí),可通過設(shè)置視頻加密類型為HLSEncryption來篩選HLS標(biāo)準(zhǔn)加密流進(jìn)行播放,示例代碼如下:

    VidAuth vidAuth = new VidAuth();
    VidPlayerConfigGen playerConfig = new VidPlayerConfigGen();
    playerConfig.setEncryptType(VidPlayerConfigGen.EncryptType.HLSEncryption);// 可選參數(shù),設(shè)置加密類型為HLSEncryption時(shí),則只會(huì)返回經(jīng)過HLS標(biāo)準(zhǔn)加密的視頻流。
    playerConfig.setMtsHlsUriToken("用戶令牌");// 可選參數(shù),如需校驗(yàn)MtsHlsUriToken(用戶令牌),可使用此參數(shù)傳遞。
    vidAuth.setPlayConfig(playerConfig);
    vidAuth.setVid("Vid信息");// 必選參數(shù),視頻ID(VideoId)。
    vidAuth.setPlayAuth("<yourPlayAuth>");// 必選參數(shù),播放憑證,需要調(diào)用點(diǎn)播服務(wù)的GetVideoPlayAuth接口生成。
    vidAuth.setRegion("接入地域");// 5.5.5.0及之后版本播放器SDK,本參數(shù)已棄用,無需設(shè)置region,播放器會(huì)自動(dòng)解析region;5.5.5.0之前版本播放器SDK,本參數(shù)必選,點(diǎn)播服務(wù)的接入地域,默認(rèn)為cn-shanghai。
    // vidAuth.setAuthTimeout(3600);// 可選參數(shù),播放地址的有效時(shí)長,單位:秒。該時(shí)長會(huì)覆蓋在視頻點(diǎn)播控制臺(tái)設(shè)置的URL鑒權(quán)的有效時(shí)長。如果不傳,則取默認(rèn)值3600。如需設(shè)置此參數(shù),請(qǐng)確保該時(shí)間大于視頻的實(shí)際時(shí)長,防止播放地址在播放完成前過期。
    aliPlayer.setDataSource(vidAuth);

    HLS標(biāo)準(zhǔn)加密播放-視頻點(diǎn)播VidSts播放

    經(jīng)過HLS標(biāo)準(zhǔn)加密的視頻通過點(diǎn)播VidSts方式播放時(shí),若當(dāng)前視頻存在其他非HLS標(biāo)準(zhǔn)加密類型的加密流或普通轉(zhuǎn)碼流時(shí),可通過設(shè)置視頻加密類型為HLSEncryption來篩選HLS標(biāo)準(zhǔn)加密流進(jìn)行播放,示例代碼如下:

    VidSts vidSts = new VidSts();
    VidPlayerConfigGen playerConfig = new VidPlayerConfigGen();
    VidPlayerConfigGen.setEncryptType(VidPlayerConfigGen.EncryptType.HLSEncryption);//可選參數(shù),設(shè)置加密類型為HLSEncryption時(shí),則只會(huì)返回經(jīng)過HLS標(biāo)準(zhǔn)加密的視頻流。
    playerConfig.setMtsHlsUriToken("用戶令牌");// 可選參數(shù),如需校驗(yàn)MtsHlsUriToken(用戶令牌),可使用此參數(shù)傳遞。
    vidSts.setPlayConfig(playerConfig);
    vidSts.setVid("Vid信息");// 必選參數(shù),視頻ID(VideoId)。
    vidSts.setAccessKeyId("<yourAccessKeyId>");// 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰ID,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
    vidSts.setAccessKeySecret("<yourAccessKeySecret>");// 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
    vidSts.setSecurityToken("<yourSecurityToken>");// 必選參數(shù),STS安全令牌,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
    vidSts.setRegion("接入地域");// 必選參數(shù),點(diǎn)播服務(wù)的接入地域,默認(rèn)為cn-shanghai。
    // vidSts.setAuthTimeout(3600);// 可選參數(shù),播放地址的有效時(shí)長,單位:秒。該時(shí)長會(huì)覆蓋在視頻點(diǎn)播控制臺(tái)設(shè)置的URL鑒權(quán)的有效時(shí)長。如果不傳,則取默認(rèn)值3600。如需設(shè)置此參數(shù),請(qǐng)確保該時(shí)間大于視頻的實(shí)際時(shí)長,防止播放地址在播放完成前過期。
    aliPlayer.setDataSource(vidSts);

    HLS標(biāo)準(zhǔn)加密播放-視頻直播UrlSource播放

    經(jīng)過HLS標(biāo)準(zhǔn)加密的視頻通過直播UrlSource方式播放時(shí),與播放普通視頻一致,無需額外設(shè)置參數(shù)。

    UrlSource urlSource = new UrlSource();
            urlSource.setUri("播放地址");// 必選參數(shù),播放地址為經(jīng)過HLS標(biāo)準(zhǔn)加密的直播流地址。
            aliPlayer.setDataSource(urlSource);

播放HLS標(biāo)準(zhǔn)加密視頻-iOS端

使用限制

HLS標(biāo)準(zhǔn)加密支持所有的HLS播放器,用戶可選擇使用自研或開源的播放器。本文以介紹如何使用阿里云播放器播放HLS標(biāo)準(zhǔn)加密視頻為例進(jìn)行說明。阿里云播放器支持用戶令牌傳遞,阿里云CDN服務(wù)會(huì)動(dòng)態(tài)修改M3U8文件中的解密URI,解密URI中會(huì)帶上用戶的令牌,業(yè)務(wù)方可以對(duì)令牌進(jìn)行驗(yàn)證。

操作步驟

用戶可以通過快速集成iOS播放器到自己的應(yīng)用中并實(shí)現(xiàn)播放。步驟及示例代碼如下:

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

    iOS播放器SDK的集成操作請(qǐng)參見快速集成

  2. 創(chuàng)建播放器播放視頻。

    創(chuàng)建播放器的操作請(qǐng)參見創(chuàng)建播放器。其中,步驟3.創(chuàng)建DataSource的操作請(qǐng)根據(jù)實(shí)際需求選擇以下任一方式創(chuàng)建。

    HLS標(biāo)準(zhǔn)加密播放-視頻點(diǎn)播VidAuth播放

    經(jīng)過HLS標(biāo)準(zhǔn)加密的視頻通過點(diǎn)播VidAuth方式播放時(shí),若當(dāng)前視頻存在其他非HLS標(biāo)準(zhǔn)加密類型的加密流或普通轉(zhuǎn)碼流時(shí),可通過設(shè)置視頻加密類型為HLSEncryption來篩選HLS標(biāo)準(zhǔn)加密流進(jìn)行播放,示例代碼如下:

    AVPVidAuthSource *authSource = [[AVPVidAuthSource alloc] init];
    authSource.vid = @"Vid信息"; // 必選參數(shù),視頻ID(VideoId)。
    authSource.playAuth = @"<yourPlayAuth>"; // 必選參數(shù),播放憑證,需要調(diào)用點(diǎn)播服務(wù)的GetVideoPlayAuth接口生成。
    authSource.region = @"接入地域"; // 5.5.5.0及之后版本播放器SDK,本參數(shù)已棄用,無需設(shè)置region,播放器會(huì)自動(dòng)解析region;5.5.5.0之前版本播放器SDK,本參數(shù)必選,點(diǎn)播服務(wù)的接入地域,默認(rèn)為cn-shanghai。
    // authSource.authTimeout = 3600; // 可選參數(shù),播放地址的有效時(shí)長,單位:秒。該時(shí)長會(huì)覆蓋在視頻點(diǎn)播控制臺(tái)設(shè)置的URL鑒權(quán)的有效時(shí)長。如果不傳,則取默認(rèn)值3600。如需設(shè)置此參數(shù),請(qǐng)確保該時(shí)間大于視頻的實(shí)際時(shí)長,防止播放地址在播放完成前過期。
    
    //通過VidPlayerConfigGenerator構(gòu)建config
    VidPlayerConfigGenerator* config = [[VidPlayerConfigGenerator alloc]init];
    [config addVidPlayerConfigByStringValue:@"EncryptType" value:@"HLSEncryption"]; // 可選參數(shù),設(shè)置加密類型為HLSEncryption時(shí),則只會(huì)返回經(jīng)過HLS標(biāo)準(zhǔn)加密的視頻流。
    [config setHlsUriToken: @"xxxxxxx"]; // 可選參數(shù),如需校驗(yàn)MtsHlsUriToken(用戶令牌),可使用此參數(shù)傳遞。
    source.playConfig = [config generatePlayerConfig];
    
    //設(shè)置播放源
    [self.player setAuthSource:authSource];

    HLS標(biāo)準(zhǔn)加密播放-視頻點(diǎn)播VidSts播放

    經(jīng)過HLS標(biāo)準(zhǔn)加密的視頻通過點(diǎn)播VidSts方式播放時(shí),若當(dāng)前視頻存在其他非HLS標(biāo)準(zhǔn)加密類型的加密流或普通轉(zhuǎn)碼流時(shí),可通過設(shè)置視頻加密類型為HLSEncryption來篩選HLS標(biāo)準(zhǔn)加密流進(jìn)行播放,示例代碼如下:

    AVPVidStsSource *source = [[AVPVidStsSource alloc] init];
    source.vid = @"Vid信息"; // 必選參數(shù),視頻ID(VideoId)。
    source.region = @"接入地域"; // 必選參數(shù),點(diǎn)播服務(wù)的接入地域,默認(rèn)為cn-shanghai。
    source.securityToken = @"<yourSecurityToken>"; // 必選參數(shù),STS安全令牌,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
    source.accessKeySecret = @"<yourAccessKeySecret>"; // 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
    source.accessKeyId = @"<yourAccessKeyId>"; // 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰ID,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
    // source.authTimeout = 3600; // 可選參數(shù),播放地址的有效時(shí)長,單位:秒。該時(shí)長會(huì)覆蓋在視頻點(diǎn)播控制臺(tái)設(shè)置的URL鑒權(quán)的有效時(shí)長。如果不傳,則取默認(rèn)值3600。如需設(shè)置此參數(shù),請(qǐng)確保該時(shí)間大于視頻的實(shí)際時(shí)長,防止播放地址在播放完成前過期。
    
    //通過VidPlayerConfigGenerator構(gòu)建config
    VidPlayerConfigGenerator* config = [[VidPlayerConfigGenerator alloc]init];
    [config addVidPlayerConfigByStringValue:@"EncryptType" value:@"HLSEncryption"]; // 可選參數(shù),設(shè)置加密類型為HLSEncryption時(shí),則只會(huì)返回經(jīng)過HLS標(biāo)準(zhǔn)加密的視頻流。
    [config setHlsUriToken: @"xxxxxxx"]; // 可選參數(shù),如需校驗(yàn)MtsHlsUriToken(用戶令牌),可使用此參數(shù)傳遞。
    source.playConfig = [config generatePlayerConfig]; 
    
    // 設(shè)置播放源
    [self.player setStsSource:source];

    HLS標(biāo)準(zhǔn)加密播放-視頻直播UrlSource播放

    經(jīng)過HLS標(biāo)準(zhǔn)加密的視頻通過直播UrlSource方式播放時(shí),與播放普通視頻一致,無需額外設(shè)置參數(shù)。

    AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:url]; // 必選參數(shù),播放地址為經(jīng)過HLS標(biāo)準(zhǔn)加密的直播流地址。
    [self.player setUrlSource:urlSource];

播放HLS標(biāo)準(zhǔn)加密視頻-Flutter端

使用限制

HLS標(biāo)準(zhǔn)加密支持所有的HLS播放器,用戶可選擇使用自研或開源的播放器。本文以介紹如何使用阿里云播放器播放HLS標(biāo)準(zhǔn)加密視頻為例進(jìn)行說明。阿里云播放器支持用戶令牌傳遞,阿里云CDN服務(wù)會(huì)動(dòng)態(tài)修改M3U8文件中的解密URI,解密URI中會(huì)帶上用戶的令牌,業(yè)務(wù)方可以對(duì)令牌進(jìn)行驗(yàn)證。

操作步驟

用戶可以通過快速集成Flutter播放器到自己的應(yīng)用中并實(shí)現(xiàn)播放。步驟及示例代碼如下:

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

    Flutter播放器SDK的集成操作請(qǐng)參見快速集成

  2. 創(chuàng)建播放器播放視頻。

    創(chuàng)建播放器的操作步驟請(qǐng)參見創(chuàng)建播放器。其中,步驟3.創(chuàng)建播放源的操作請(qǐng)根據(jù)實(shí)際需求選擇以下任一方式創(chuàng)建。

    HLS標(biāo)準(zhǔn)加密播放-視頻點(diǎn)播VidAuth播放

    經(jīng)過HLS標(biāo)準(zhǔn)加密的視頻通過點(diǎn)播VidAuth方式播放時(shí),若當(dāng)前視頻存在其他非HLS標(biāo)準(zhǔn)加密類型的加密流或普通轉(zhuǎn)碼流時(shí),可通過設(shè)置視頻加密類型為HLSEncryption來篩選HLS標(biāo)準(zhǔn)加密流進(jìn)行播放,示例代碼如下:

    FlutterAliplayer.setEncryptType(EncryptType.HLSEncryption);// 可選參數(shù),設(shè)置加密類型為HLSEncryption時(shí),則只會(huì)返回經(jīng)過HLS標(biāo)準(zhǔn)加密的視頻流。
    FlutterAliplayer.setHlsUriToken("mtsHlsUriToken");// 可選參數(shù),如需校驗(yàn)MtsHlsUriToken(用戶令牌),可使用此參數(shù)傳遞
    FlutterAliplayer.generatePlayerConfig().then((value) {
              this.fAliplayer.setVidAuth(
                  vid: "Vid信息",
                  region: "接入地域",// 必選參數(shù),點(diǎn)播服務(wù)的接入地域,默認(rèn)為cn-shanghai。
                  playAuth: "<yourPlayAuth>",// 必選參數(shù),播放憑證,需要調(diào)用點(diǎn)播服務(wù)的GetVideoPlayAuth接口生成。
                  playConfig: value);
    });

    HLS標(biāo)準(zhǔn)加密播放-視頻點(diǎn)播VidSts播放

    經(jīng)過HLS標(biāo)準(zhǔn)加密的視頻通過點(diǎn)播VidSts方式播放時(shí),若當(dāng)前視頻存在其他非HLS標(biāo)準(zhǔn)加密類型的加密流或普通轉(zhuǎn)碼流時(shí),可通過設(shè)置視頻加密類型為HLSEncryption來篩選HLS標(biāo)準(zhǔn)加密流進(jìn)行播放,示例代碼如下:

    FlutterAliplayer.setEncryptType(EncryptType.HLSEncryption);// 可選參數(shù),設(shè)置加密類型為AliyunVoDEncryption時(shí),則只會(huì)返回經(jīng)過私有加密的視頻流。
    FlutterAliplayer.setHlsUriToken("mtsHlsUriToken");// 可選參數(shù),如需校驗(yàn)MtsHlsUriToken(用戶令牌),可使用此參數(shù)傳遞
    FlutterAliplayer.generatePlayerConfig().then((value) {
              this.fAliplayer.setVidSts(
                  vid: "Vid信息",
                  region: "接入地域",
                  accessKeyId: "<yourAccessKeyId>",
                  accessKeySecret: "<yourAccessKeySecret>",
                  securityToken: "<yourSecurityToken>",
                  playConfig: value);
            });

常見問題

使用HLS標(biāo)準(zhǔn)加密過程中的常見問題及解決方案,請(qǐng)參見視頻加密常見問題

DRM加密

簡介

阿里云視頻點(diǎn)播服務(wù)提供了行業(yè)通用的DRM(Digital Rights Management)加密方式,通過一站式添加和管理,輕松保護(hù)版權(quán)視頻內(nèi)容的安全。支持WideVine和Fairplay的DRM方案。

核心優(yōu)勢及架構(gòu)等更多內(nèi)容,請(qǐng)參見DRM加密概述

配置DRM加密

僅支持通過視頻點(diǎn)播控制臺(tái)開啟,詳細(xì)操作請(qǐng)參見配置DRM加密

播放DRM加密視頻-Web端

使用限制

經(jīng)過DRM加密的視頻,現(xiàn)僅支持通過阿里云播放器播放。

操作步驟

用戶可以在自己的Web頁面中嵌入Web播放器并實(shí)現(xiàn)播放。代碼示例如下:

說明

使用阿里云Web播放器SDK之前,請(qǐng)先了解瀏覽器及DRM加密視頻播放功能的適配情況,具體如下:

  • H5模式支持桌面端和移動(dòng)端瀏覽器環(huán)境,具體的瀏覽器支持情況請(qǐng)參見H5功能適配說明

  • Flash模式僅支持桌面端瀏覽器環(huán)境,具體的瀏覽器支持情況請(qǐng)參見Flash瀏覽器適配說明

DRM加密播放-視頻點(diǎn)播VidSts播放

經(jīng)過DRM加密的視頻通過點(diǎn)播VidSts方式播放,與播放普通視頻相比,需要額外傳入?yún)?shù)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>點(diǎn)播DRM加密測試用例</title>
      <link rel="stylesheet"  />
      <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>',// 必選參數(shù),可以通過點(diǎn)播控制臺(tái)(路徑:媒資庫>音/視頻)查詢。示例:1e067a2831b641db90d570b6480f****。
               accessKeyId: '<your AccessKey ID>',// 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰ID,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
               securityToken: '<your STS token>',// 必選參數(shù),STS安全令牌,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
               accessKeySecret: '<your AccessKey Secret>',// 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
               region: '<region of your video>', // 必選參數(shù),媒體資源所在的區(qū)域。如cn-shanghai、eu-central-1, ap-southeast-1等。
               certId: '<your certificate ID>', // 蘋果設(shè)備播放時(shí)此參數(shù)必選。用于請(qǐng)求蘋果證書,可根據(jù)DRM加密的實(shí)現(xiàn)到視頻點(diǎn)播或視頻直播控制臺(tái)獲取。
               // authTimeout: 7200, // 可選參數(shù),播放地址的有效時(shí)長,單位:秒。該時(shí)長會(huì)覆蓋在視頻點(diǎn)播控制臺(tái)設(shè)置的URL鑒權(quán)的有效時(shí)長。如果不傳,則取默認(rèn)值7200。如需設(shè)置此參數(shù),請(qǐng)確保該時(shí)間大于視頻的實(shí)際時(shí)長,防止播放地址在播放完成前過期。
             },function(player){
               console.log('The player is created.')
            });
         </script>
     </body>
 </html>

DRM加密播放-視頻直播LiveStsSource播放

經(jīng)過DRM加密的視頻通過直播LiveStsSource方式播放,需要傳入U(xiǎn)RL和STS臨時(shí)身份憑證等信息,STS臨時(shí)身份憑證的生成請(qǐng)參見使用STS臨時(shí)授權(quán)方案上傳視頻,示例代碼如下:

<!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"  />
      <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, // 直播設(shè)置為true。
               isDrm: true,
               source: '<your live stream url>',// 必選參數(shù),播放地址為經(jīng)過DRM加密的直播流地址。
               accessKeyId: '<your AccessKey ID>',// 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰ID,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
               securityToken: '<your STS token>',// 必選參數(shù),STS安全令牌,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
               accessKeySecret: '<your AccessKey Secret>',// 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
               region: '<region of your video>', // 必選參數(shù),媒體資源所在的服務(wù)地域。如cn-shanghai、eu-central-1, ap-southeast-1等。
               certId: '<your certificate ID>', // 蘋果設(shè)備播放時(shí)此參數(shù)必選,用于請(qǐng)求蘋果證書,可根據(jù)DRM加密的實(shí)現(xiàn)到視頻點(diǎn)播或視頻直播控制臺(tái)獲取。
             },function(player){
               console.log('The player is created.')
            });
         </script>
     </body>
 </html>

播放DRM加密視頻-Android端

使用限制

經(jīng)過DRM加密的視頻,現(xiàn)僅支持通過阿里云播放器播放。

操作步驟

用戶可以通過快速集成Android播放器到自己的應(yīng)用中并實(shí)現(xiàn)播放。步驟及示例代碼如下:

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

    Android播放器SDK的集成操作請(qǐng)參見快速集成

  2. 創(chuàng)建播放器播放視頻。

    創(chuàng)建播放器的操作請(qǐng)參見創(chuàng)建播放器。其中,步驟3.創(chuàng)建DataSource的操作請(qǐng)根據(jù)實(shí)際需求選擇以下任一方式創(chuàng)建。

    說明

    Android平臺(tái),為了保證高安全等級(jí)的視頻能正常播放,建議使用surfaceView進(jìn)行播放。

    DRM加密播放-視頻點(diǎn)播VidSts播放

    經(jīng)過DRM加密的視頻通過點(diǎn)播VidSts方式播放時(shí),與播放普通視頻配置一致,無需額外設(shè)置參數(shù)

    VidSts vidSts = new VidSts();
            vidSts.setVid("Vid信息");// 必選參數(shù),視頻ID(VideoId)。
            vidSts.setAccessKeyId("<yourAccessKeyId>");// 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰ID,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
            vidSts.setAccessKeySecret("<yourAccessKeySecret>");// 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
            vidSts.setSecurityToken("<yourSecurityToken>");// 必選參數(shù),STS安全令牌,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
            vidSts.setRegion("接入地域");// 必選參數(shù),點(diǎn)播服務(wù)的接入地域,默認(rèn)為cn-shanghai。
            // vidSts.setAuthTimeout(3600); // 可選參數(shù),播放地址的有效時(shí)長,單位:秒。該時(shí)長會(huì)覆蓋在視頻點(diǎn)播控制臺(tái)設(shè)置的URL鑒權(quán)的有效時(shí)長。如果不傳,則取默認(rèn)值3600。如需設(shè)置此參數(shù),請(qǐng)確保該時(shí)間大于視頻的實(shí)際時(shí)長,防止播放地址在播放完成前過期。
            aliPlayer.setDataSource(vidSts);

    DRM加密播放-視頻直播LiveStsSource播放

    經(jīng)過DRM加密的視頻通過直播LiveStsSource方式播放時(shí),需要傳入U(xiǎn)RL和STS憑證,并設(shè)置視頻加密類型為WideVine_FairPlay。示例代碼如下:

    1. 創(chuàng)建DataSource。

      需傳遞AVPLiveStsSource作為播放源。

      // 創(chuàng)建LiveSts,EncryptionType需要設(shè)置為WideVine_FairPlay
      LiveSts liveSts = new LiveSts();
      liveSts.setUrl("<your live stream url>");// 必選參數(shù),播放地址為經(jīng)過DRM加密的HLS直播流地址。
      liveSts.setAccessKeyId("<your AccessKey ID>");// 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰ID,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
      liveSts.setAccessKeySecret("<your AccessKey Secret>");// 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
      liveSts.setSecurityToken("<your STS token>");// 必選參數(shù),STS安全令牌,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
      liveSts.setDomain("<your Domain>");// 必選參數(shù),直播流的播流域名。
      liveSts.setApp("<your App Name>");// 必選參數(shù),直播流的AppNam。
      liveSts.setStream("<your Stream Name>");// 必選參數(shù),直播流的StreamName。
      liveSts.setEncryptionType(LiveSts.LiveEncryptionType.WideVine_FairPlay);// 必選參數(shù),設(shè)置加密類型為WideVine_FairPlay。 
      liveSts.setRegion("<region of your video>");// 必選參數(shù),服務(wù)地域。如cn-shanghai等。
      // 設(shè)置播放源
      aliPlayer.setDataSource(liveSts);
      // 準(zhǔn)備播放
      aliPlayer.prepare();
    2. 監(jiān)聽STS是否無效。

      加密直播播放過程中可能會(huì)有更換加密Key的過程,換Key時(shí)則會(huì)通過STS去請(qǐng)求到最新的Key。開發(fā)者需要監(jiān)聽STS是否有效。如果無效則會(huì)影響加密直播流的播放。

      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,那么建議停止播放。防止出現(xiàn)花屏。
              mAliyunVodPlayer.stop();
              return IPlayer.StsStatus.Invalid;
          }
      
          @Override
          public AliPlayer.Status onVerifyAuth(VidAuth auth) {
              return AliPlayer.Status.Valid;
          }
      });
      說明

      獲取STS成功之后,需要調(diào)用updateLiveStsInfo方法去更新STS。如果獲取失敗,則建議停止播放。如果不更新STS,超時(shí)之后播放器會(huì)繼續(xù)使用之前的STS去獲取Key。如果STS失效,則可能會(huì)出現(xiàn)花屏或者播放失敗。

      mAliyunVodPlayer.updateStsInfo(stsInfo);

播放DRM加密視頻-iOS端

使用限制

經(jīng)過DRM加密的視頻,現(xiàn)僅支持通過阿里云播放器播放。

操作步驟

用戶可以通過快速集成iOS播放器到自己的應(yīng)用中并實(shí)現(xiàn)播放。步驟及示例代碼如下:

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

    iOS播放器SDK的集成操作請(qǐng)參見快速集成

  2. 創(chuàng)建播放器播放視頻。

    創(chuàng)建播放器的操作請(qǐng)參見創(chuàng)建播放器。其中,步驟3.創(chuàng)建DataSource的操作請(qǐng)根據(jù)實(shí)際需求選擇以下任一方式創(chuàng)建。

    說明

    iOS平臺(tái),需要在[self.player prepare]之前全局調(diào)用一次AliPlayerGlobalSettings中的setFairPlayCertID方法來設(shè)置證書ID。證書ID可以在視頻點(diǎn)播控制臺(tái) > 配置管理 > 媒體處理配置 > DRM證書管理中獲取。

     [AliPlayerGlobalSettings setFairPlayCertID:@"控制臺(tái)獲取的證書ID"];

    DRM加密播放-視頻點(diǎn)播VidSts播放

    經(jīng)過DRM加密的視頻通過點(diǎn)播VidSts方式播放時(shí),與播放普通視頻配置一致,無需額外設(shè)置參數(shù)

    AVPVidStsSource *source = [[AVPVidStsSource alloc] init];
    source.region = @"接入地域"; // 必選參數(shù),點(diǎn)播服務(wù)的接入地域,默認(rèn)為cn-shanghai。
    source.vid = @"Vid信息"; // 必選參數(shù),視頻ID(VideoId)。
    source.securityToken = @"<yourSecurityToken>"; // 必選參數(shù),STS安全令牌,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
    source.accessKeySecret = @"<yourAccessKeySecret>"; // 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
    source.accessKeyId = @"<yourAccessKeyId>"; // 必選參數(shù),STS臨時(shí)AK對(duì)的訪問密鑰ID,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
    // source.authTimeout = 3600; // 可選參數(shù),播放地址的有效時(shí)長,單位:秒。該時(shí)長會(huì)覆蓋在視頻點(diǎn)播控制臺(tái)設(shè)置的URL鑒權(quán)的有效時(shí)長。如果不傳,則取默認(rèn)值3600。如需設(shè)置此參數(shù),請(qǐng)確保該時(shí)間大于視頻的實(shí)際時(shí)長,防止播放地址在播放完成前過期。
     //設(shè)置播放源
     [self.player setStsSource:source]

    DRM加密播放-視頻直播LiveStsSource播放

    經(jīng)過DRM加密的視頻通過直播LiveStsSource方式播放時(shí),需要傳入U(xiǎn)RL和STS憑證,并設(shè)置視頻加密類型為ENCRYPTION_TYPE_FAIRPLAY。示例代碼如下:

    1. 創(chuàng)建DataSource。

      需傳遞AVPLiveStsSource作為播放源。

      // 創(chuàng)建LiveSts,encryptionType需要設(shè)置為ENCRYPTION_TYPE_FAIRPLAY
      AVPLiveStsSource *liveStsSource = [[AVPLiveStsSource alloc] initWithUrl:@"加密直播url" 
                                                                  accessKeyId:@"臨時(shí)akId" 
                                                                  accessKeySecret:@"臨時(shí)akId" 
                                                                  securityToken:@"安全token" 
                                                                  region:@"region值" 
                                                                  domain:@"url播流域名" 
                                                                  app:@"播流應(yīng)用名" 
                                                                  stream:@"播流流名" 
                                                                  encryptionType:ENCRYPTION_TYPE_FAIRPLAY];// 必選參數(shù),設(shè)置加密類型為ENCRYPTION_TYPE_FAIRPLAY。
       // 設(shè)置播放源
       [self.aliPlayer setLiveStsSource:liveStsSource];
       ......
       // 準(zhǔn)備播放
       [self.aliPlayer prepare];

    2. 監(jiān)聽STS是否無效。

      加密直播播放過程中可能會(huì)有更換加密Key的過程,換Key時(shí)則會(huì)通過STS去請(qǐng)求到最新的Key。開發(fā)者需要監(jiān)聽STS是否有效。如果無效則會(huì)影響加密直播流的播放。

       __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成功之后,需要調(diào)用updateLiveStsInfo方法去更新STS。如果獲取失敗,則建議停止播放。如果不更新STS,超時(shí)之后播放器會(huì)繼續(xù)使用之前的STS去獲取Key。如果STS失效,則可能會(huì)出現(xiàn)花屏或者播放失敗。

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

相關(guān)文檔

播放加密視頻相關(guān)問題