本節說明兩種不同的加密策略 以及如何搭配 FFmpeg 和 FFmpeg 等多媒體 Shaka Packager我們探討了兩種加密策略:Clear Key,以及 使用 Google Widevine 等服務。這兩種策略都是透過 版權管理 (DRM) 來控管使用者能使用媒體的方式。不過 由於傳遞金鑰的特性,金鑰在本質上就低於另一部分 以及為什麼 DRM 服務比較適合使用。
網路主要的數位版權管理服務為 Google Widevine 和 Microsoft PlayReady 和 Apple FairPlay,但我們不會提及本文中所有的相關內容。 不過,如果指定所有新式瀏覽器 才能使用全部三項 DRM 服務
轉換和加密功能適用於下列應用程式:
清除金鑰加密
首先,你應該清楚瞭解 Clear Key 的功能與運作方式 利用 Vertex AI Workbench 使用者您「不想」使用現有的 DRM 服務及 建議您使用「清除金鑰」來為媒體進行基本加密。但是, 請注意,這類加密功能並未提供 安全性。這是因為鍵/值組合 與由其他金鑰產生的加密金鑰不同 儲存在授權伺服器上的解密金鑰。此外,Clear Key 會傳送 就變成純文字 因此當您透過加密媒體時 解密後並不是密鑰。
建立金鑰
您可以使用相同方法來建立 DASH 和 HTTP 即時串流的金鑰。使用以下應用程式: OpenSSL。下列指令會建立 16 個十六進位值的加密金鑰。
openssl rand -hex 16 > media.key
建立 IV
接下來,我們可以產生初始化向量 (IV)。
openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66
使用透明金鑰加密
以下範例使用具有原始金鑰的 Shaaka Packager,其中 keys
和
key_ids
會直接提供給 Shaka Packager。閱讀說明文件
範例。
針對 key
旗標,請使用先前建立的金鑰 (儲存在 media.key
中)
檔案。不過,在指令列中輸入指令時,請務必移除
空白字元。針對 key_id
標記,請重複使用 media.id
值或使用 IV 值
如上方所示。
packager \
input=glocken.mp4,stream=audio,output=glockena.m4a \
input=glocken.mp4,stream=video,output=glockenv.mp4 \
--enable_fixed_key_encryption \
--keys label=audio:key=INSERT_AUDIO_KEY_HERE:key_id=INSERT_AUDIO_KEY_ID_HERE,label=video:key=INSERT_VIDEO_KEY_HERE:key_id=INSERT_VIDEO_KEY_ID_HERE
建立重要資訊檔案
如要加密 HTTP 即時串流,除了金鑰檔案外,您還需要一個金鑰資訊檔案。A 罩杯
金鑰資訊檔案是文字檔,格式如下。其中應包含
擴充功能:.keyinfo
。例如:encrypt.keyinfo
。
key URI
key file path
private key
金鑰 URI 是 media.key
(在上述步驟建立的位置)
也就是伺服器中的 IP 位址金鑰檔案路徑是指金鑰與金鑰的相對位置
資訊檔最後,私密金鑰是 media.key
的內容
檔案本身或您之前建立的 IV。例如:
https://example.com/keys/media.key
/path/to/media.key
6143b5373a51cb46209cfed0d747da66
為 HTTP 即時串流加密
packager \
'input=input.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \
'input=input.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
--hls_master_playlist_output="master_playlist.m3u8" \
--hls_base_url="http://localhost:5000/"
這個指令可接受長度為 16 或 32 個字元的金鑰。
ffmpeg -i myvideo.mov -c:v libx264 -c:a aac -hls_key_info_file encrypt.keyinfo myvideo.m3u8
Widevine 加密
現在,您已瞭解「清除金鑰加密」的定義和使用時機。不過,何時該使用數位版權管理服務來加強安全防護?這就是 Widevine 或其他服務的位置 能安全加密及解密你的媒體。Widevine 支援 MPEG-DASH 和 HTTP 即時串流,以及 Google 的數位版權管理技術 (DRM)。Google Chrome 和 Firefox 網頁版使用 Widevine 瀏覽器、Android MediaDRM、Android TV 和其他採用 Encrypted Media Extensions 和 Media Source Extensions,Widevine 會將內容解密。
透過 Widevine 加密
本文中大部分的範例都使用透明金鑰加密。不過,對於 Widevine 會取代下列選項
--enable_fixed_key_encryption \
--enable_fixed_key_decryption \
--keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE
「demultiplexer (demux)」指令中的所有項目,除了您的檔案名稱和
--content-id
旗標應與範例完全相同,--content-id
為 16
或 32 個隨機十六進位數字。請使用此處提供的金鑰,而非您自己的金鑰。閱讀夏卡
使用 Widevine Key Server 的套件說明文件,取得更多範例。
解譯音訊和視訊、將新檔案加密,然後輸出 媒體呈現的說明 (MPD) 檔案。
packager \ input=tmp_glocken.mp4,stream=video,output=glocken_video.mp4 \ input=tmp_glocken.mp4,stream=audio,output=glocken_audio.m4a \ --enable_widevine_encryption \ --key_server_url "https://license.uat.widevine.com/cenc/getcontentkey/widevine_test" \ --content_id "fd385d9f9a14bb09" \ --signer "widevine_test" \ --aes_signing_key "1ae8ccd0e7985cc0b6203a55855a1034afc252980e970ca90e5202689f947ab9" \ --aes_signing_iv "d58ce954203b7c9a9a9d467f59839249"
混合 (合併) 音訊和視訊串流。如果你使用影片 您可能不需要這麼做
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocke.mp4
媒體轉換序列
這個部分會顯示從原始 .mov
檔案前往
為 DASH 或 HTTP 即時串流封裝的加密資產。為了達到目標
立即說明,我們正在將來源檔案轉換為 8 MB 的解析度,且解析度達 8 MB
(1920 x 1080)。視需求調整這些值。
DASH/WebM
轉換檔案類型和轉碼器。
針對這項指令,您可以使用
liborbis
或libopus
做為音訊轉碼器。ffmpeg -i glocken.mov -c:v libvpx-vp9 -c:a libvorbis -b:v 8M -vf setsar=1:1 -f webm tmp_glocken.webm
建立清除金鑰加密金鑰。
openssl rand -hex 16 > media.key
解譯音訊和視訊、將新檔案加密,然後輸出 媒體呈現的說明 (MPD) 檔案。
packager \ input=tmp_glocken.webm,stream=video,output=glocken_video.webm \ input=tmp_glocken.webm,stream=audio,output=glocken_audio.webm \ --enable_fixed_key_encryption \ --enable_fixed_key_decryption \ --keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE \ --mpd_output glocken_webm_vod.mpd
混合 (合併) 音訊和視訊串流。如果你使用影片 您可能不需要這麼做
ffmpeg -i glocken_video.webm -i glocken_audio.webm -c copy glocken.webm
DASH/MP4
轉換檔案類型、視訊轉碼器和位元率。
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 tmp_glocken.mp4
建立清除金鑰加密金鑰。
openssl rand -hex 16 > media.key
解譯音訊和視訊、將新檔案加密,然後輸出 媒體呈現的說明 (MPD) 檔案。
packager \ input=tmp_glocken.mp4,stream=video,output=glocken_video.mp4 \ input=tmp_glocken.mp4,stream=audio,output=glocken_audio.m4a \ --enable_fixed_key_encryption \ --enable_fixed_key_decryption \ --keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE \ --mpd_output glocken_mp4_vod.mpd
混合 (合併) 音訊和視訊串流。如果你使用影片 您可能不需要這麼做
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocken.mp4
HTTP 即時串流/MP4
HTTP 即時串流僅支援 MP4,因此您必須先將容器轉換為 MP4 容器, 支援的轉碼器。
轉換檔案類型、視訊轉碼器和位元率。
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 glocken.mp4
建立清除金鑰加密金鑰。
openssl rand -hex 16 > media.key
建立重要資訊檔案
packager \ 'input=glocken.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \ 'input=glocken.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \ --hls_master_playlist_output="master_playlist.m3u8" \ --hls_base_url="http://localhost:5000/" \ --enable_fixed_key_encryption \ --enable_fixed_key_decryption \ --keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE
摘要好多了,但我們希望您已經能加密自己的媒體檔案了。 值得信賴接下來,我們將說明如何新增媒體 你的網站