全部產品
Search
文件中心

CDN:配置M3U8標準加密改寫

更新時間:Dec 06, 2025

當用戶端請求 M3U8 檔案時,系統會將其攜帶的鑒權參數自動追加到 #EXT-X-KEY 標籤中的密鑰 URI 後。無需來源站點改造,即可實現密鑰訪問的安全控制,有效防止視頻內容被盜播。

適用情境

在標準的 HLS 加密流程中,#EXT-X-KEY 標籤指明了擷取解密密鑰的 URI。如果此 URI 是一個固定的、無保護的公開地址,任何擷取到 M3U8 檔案的人都可以下載密鑰,從而解密視頻內容,導致視頻加密失效。

為解決此問題,此功能為每次密鑰請求附加一個動態、可驗證的鑒權憑證,適用於需要對 HLS 加密視頻的密鑰進行存取控制的情境,例如:

  • 付費視頻/線上教育:為防止學員將 M3U8 地址分享給非付費使用者,通過為每個登入使用者產生唯一的鑒權參數,確保只有合法使用者才能在有效期間內擷取到解密密鑰。

  • 直播著作權保護:在大型體育賽事或活動直播中,通過動態產生的鑒權參數與 CDN 的 URL 鑒權功能結合,實現對直播流的精細化存取控制,有效防止盜鏈。

技術原理

  1. 用戶端請求商務服務器商務服務器根據商務邏輯(如使用者登入)產生一個帶有時效性和簽名的鑒權參數(例如 token=xxxx),並將其返回給用戶端。

  2. 用戶端使用這個鑒權參數,將其拼接在請求M3U8檔案的URL末尾,然後向 CDN 節點發起 M3U8 檔案請求。

  3. CDN 節點在向用戶端返回 M3U8 檔案前,解析 M3U8 檔案內容,找到 #EXT-X-KEY 標籤,並將用戶端請求 URL 中的鑒權參數追加到其 URI 屬性的末尾。

  4. 用戶端擷取 CDN 返回的、已被改寫的 M3U8 檔案,並根據其中新的密鑰 URI(已包含鑒權參數)向密鑰伺服器發起請求。

  5. 密鑰伺服器收到密鑰請求,提取並校正 URL 中的鑒權參數。校正通過後,返回解密密鑰;校正失敗,則拒絕請求。

  6. 用戶端擷取密鑰後,解密 TS 視頻流並播放。

重要
  • 此功能不負責對視頻內容進行加密。使用此功能前,必須在來源站點確保視頻切片(TS 檔案)已完成 HLS 標準加密(如 AES-128),且原始 M3U8 檔案中已包含正確的 #EXT-X-KEY 標籤。視頻加密請參考如何產生M3U8檔案並加密

  • 引入商務服務器和密鑰伺服器是為了更好的介紹M3U8標準加密改寫的作用,此功能不負責商務服務器和密鑰伺服器的實現。您需要自己實現商務服務器和密鑰伺服器的功能,以便完成整個HLS密鑰鑒權的流程。

  • #EXT-X-KEY標籤的作用是聲明是否加密。更多關於M3U8檔案標籤的介紹請參見M3U8標籤簡介

操作步驟

  1. 登入CDN控制台

  2. 在左側導覽列,單擊域名管理

  3. 域名管理頁面,找到目標網域名稱,單擊操作列的管理

  4. 在指定網域名稱的左側導覽列,單擊视频相关

  5. M3U8標準加密改寫地區,開啟M3U8標準加密改寫開關。

    開啟M3U8標準加密改寫

    說明

    開啟M3U8標準加密改寫功能後,預設的參數名為MtsHlsUriToken

  6. 可選:如果您需要配合您的用戶端修改參數名,請執行以下操作步驟。

    1. 單擊自訂參數名對應的修改

    2. 自訂參數名對話方塊,設定參數名

      設定參數名

      說明

      參數名大小寫敏感,請確保設定的參數名和用戶端請求攜帶的參數名完全一致。例如用戶端請求攜帶MtsHlsUriToken參數,如果在CDN控制台設定自訂參數名為mtshlsuritoken將不生效。

    3. 單擊確定,完成配置。

示範樣本

  1. 在瀏覽器中訪問經過CDN加速的M3U8檔案,並在請求最後加上MtsHlsUriToken=tokenxxxxx。例如:http://<CDN 加速網域名稱>/video.m3u8?MtsHlsUriToken=tokenxxxxx

    通過Chrome瀏覽器開發人員工具,在Network(網路)面板,可以看到請求M3U8檔案是帶上了自訂參數,但是請求密鑰地址時沒有攜帶該參數。

    image

  2. 在CDN控制台開啟M3U8標準加密改寫,如果需要,可以設定自訂參數名,如下圖所示(本次示範中使用預設參數MtsHlsUriToken)。樣本1

  3. 重複步驟1,在瀏覽器中訪問經過CDN加速的M3U8檔案,並在請求最後加上MtsHlsUriToken=tokenxxxxx

    通過瀏覽器開發人員工具,在Network(網路)面板,可以看到在請求密鑰地址時,帶上了自訂的參數。

    image

常見問題

什麼是HLS協議?

HLS(HTTP Live Streaming的縮寫)是一個由蘋果公司提出的基於HTTP的流媒體網路傳輸協議。HLS協議基於HTTP協議,用戶端按照順序使用HTTP協議下載儲存在伺服器上的檔案。HLS協議規定,視頻的封裝格式是TS(Transport Stream),除了TS視頻檔案本身,還定義了用來控制播放的M3U8檔案(文字檔)。HLS協議的工作原理是把整個視頻流分割成一個個小的TS格式視頻檔案來傳輸,在開始一個流媒體會話時,用戶端會先下載一個包含TS檔案URL地址的M3U8檔案(相當於一個播放清單),給用戶端用於下載TS檔案。

HLS協議的M3U8檔案裡都有什嗎?

M3U8檔案的基本欄位:

  • #EXTM3U:M3U8檔案頭,必須放在第一行。

  • EXT-X-MEDIA-SEQUENCE :第一個TS分區的序號,一般情況下是0,但是在直播情境下,這個序號標識直播段的起始位置; #EXT-X-MEDIA-SEQUENCE:0

  • #EXT-X-TARGETDURATION:每個分區TS的最大的時間長度; #EXT-X-TARGETDURATION:10 ,表示每個分區的最大時間長度是10秒。

  • #EXT-X-ALLOW-CACHE:是否允許cache,#EXT-X-ALLOW-CACHE:YES#EXT-X-ALLOW-CACHE:NO,預設情況下是YES。

  • #EXT-X-ENDLIST:M3U8檔案結束符。

  • #EXTINF:extra info,分區TS的資訊,如時間長度,頻寬等;一般情況下是 #EXTINF:<duration>,[<title>] 後面可以跟其他的資訊,逗號之前是當前分區的TS時間長度。分區時間長度要小於 #EXT-X-TARGETDURATION 定義的值。

  • #EXT-X-VERSION:M3U8版本號碼。

  • #EXT-X-DISCONTINUITY:該標籤表明其前一個切片與下一個切片之間存在中斷。

  • #EXT-X-PLAYLIST-TYPE :表明流媒體類型。

  • #EXT-X-KEY:是否加密解析。例如:#EXT-X-KEY:METHOD=AES-128,URI="https://example.com/video.key?token=xxx" 密碼編譯演算法是AES-128,密鑰通過請求 https://example.com/video.key?token=xxx 來擷取,密鑰請求回來以後儲存在本地,並用於解密後續下載的TS視頻檔案。

如何產生M3U8檔案並加密?

  1. 產生加密金鑰。

    這個密鑰通常是一個16位元組的隨機字串(對於AES-128加密)。可以使用 OpenSSL 工具用以下命令來產生包含16個隨機位元組的密鑰。

    openssl rand 16 > encryption_key.key
  2. 準備加密使用的key_info.txt檔案,加密工具會根據該檔案對HLS協議的視頻檔案進行加密。

    https://example.com/encryption_key.key
    /path/to/local/encryption_key.key
    • 第一行是步驟1產生的加密金鑰的URL。推薦將該檔案放置在CDN加速的OSS來源站點中,然後使用CDN加速網域名稱來訪問該檔案。

    • 第二行是本地密鑰檔案的絕對路徑。

  3. 使用FFmpeg工具產生並加密HLS協議的視頻檔案。

    ffmpeg -i input_video.mp4 -c:v copy -c:a copy -hls_time 10 -hls_key_info_file key_info.txt -hls_list_size 0 output_playlist.m3u8
    • -i input_video.mp4:指定需要轉換的視頻檔案,例如,MP4格式視頻。

    • -c:v copy: 視頻流不重新編碼,直接複製。

    • -c:a copy: 音頻流不重新編碼,直接複製。

    • -hls_time 10: 每個TS檔案的時間長度為 10 秒,可以根據原始視頻時間長度修改該設定。

    • -hls_key_info_file key_info.txt: 指定包含加密金鑰資訊的檔案。

    • -hls_list_size 0:設定M3U8檔案中保留的TS檔案索引數量,0表示保留所有.ts檔案索引。

    • output_playlist.m3u8: 輸出的 HLS 播放清單檔案名稱(即M3U8檔案名稱)。

  4. 將加密後的TS檔案和M3U8檔案儲存到伺服器中(推薦使用CDN加速的OSS來源站點)。然後在瀏覽器中使用CDN加速網域名稱訪問M3U8檔案,即可實現加密播放HLS協議的視頻。