ในส่วนนี้ เราจะพูดถึงกลยุทธ์ 2 อย่างในการเข้ารหัสสื่อ และตัวอย่างที่นำไปปฏิบัติได้จริงเกี่ยวกับวิธีใช้กับ FFmpeg และ Shaka Packager กลยุทธ์ 2 ข้อสำหรับการเข้ารหัสที่เราจะพูดถึงคือ Clear Key และการใช้บริการ เช่น Google Widevine ทั้ง 2 กลยุทธ์เป็นรูปแบบหนึ่งของการจัดการสิทธิ์ดิจิทัล (DRM) เพื่อควบคุมสิ่งที่ผู้ใช้ดำเนินการกับสื่อของคุณได้ อย่างไรก็ตาม หลักการหนึ่งมีความปลอดภัยน้อยกว่าอีกวิธีอยู่แล้ว เนื่องจากวิธีการส่งผ่านคีย์สำหรับการตรวจสอบสิทธิ์และเป็นเหตุผลที่บริการ DRM อาจเหมาะสมกว่า
บริการ DRM หลักสำหรับเว็บคือ Google Widevine, Microsoft Play Ready และ Apple FairPlay แต่จะไม่กล่าวถึงบริการทั้งหมดในบทความนี้ อย่างไรก็ตาม หากคุณกำหนดเป้าหมายไปที่เบราว์เซอร์สมัยใหม่ทั้งหมด คุณน่าจะได้ใช้บริการ DRM ทั้งสามอย่าง
การแปลงและการเข้ารหัสนั้นทำได้ด้วยแอปพลิเคชันต่อไปนี้
ล้างการเข้ารหัสคีย์
ก่อนอื่นคุณควรเข้าใจเป็นอย่างดีว่าClear Key คืออะไรและไม่ได้ใช้ก่อนใช้ เมื่อคุณไม่ต้องการใช้บริการ DRM ที่มีอยู่และรู้สึกว่าการเข้ารหัสสื่อเบื้องต้นเป็นตัวเลือกที่ใช้งานได้ คุณควรใช้คีย์ล้าง แต่โปรดทราบว่าการเข้ารหัสประเภทนี้ไม่ได้ให้ความปลอดภัยในระดับเดียวกับการใช้บริการ DRM อย่างใดอย่างหนึ่ง เนื่องจากคู่คีย์-ค่าไม่ได้เข้ารหัสภายใต้คีย์อื่น ซึ่งต่างจากคีย์ที่เข้ารหัสซึ่งสร้างขึ้นโดยคีย์ถอดรหัสที่เก็บไว้บนเซิร์ฟเวอร์ใบอนุญาต นอกจากนี้ คีย์ล้างจะส่งคู่คีย์-ค่าในรูปแบบข้อความธรรมดา ดังนั้นขณะที่คุณเข้ารหัสสื่อ คีย์ที่จะถอดรหัสก็ไม่ได้เป็นความลับ
สร้างคีย์
คุณใช้วิธีการเดียวกันในการสร้างคีย์สำหรับทั้ง DASH และ HLS ได้ โดยใช้ OpenSSL รายการต่อไปนี้จะสร้างคีย์การเข้ารหัสที่มีค่าฐานสิบหก 16 ค่า
openssl rand -hex 16 > media.key
สร้าง IV
ต่อไปเราจะสร้างเวกเตอร์การเริ่มต้น (IV) ได้
openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66
เข้ารหัสด้วยล้างคีย์
ตัวอย่างต่อไปนี้ใช้ Shaka 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
สร้างไฟล์ข้อมูลสำคัญ
หากต้องการเข้ารหัสสำหรับ HLS คุณต้องมีไฟล์ข้อมูลคีย์นอกเหนือจากไฟล์คีย์ ไฟล์ข้อมูลสําคัญคือไฟล์ข้อความในรูปแบบตามด้านล่าง ซึ่งควรมีส่วนขยาย .keyinfo
เช่น encrypt.keyinfo
key URI
key file path
private key
URI ของคีย์คือตำแหน่งที่ media.key
(สร้างด้านบนจะอยู่ในเซิร์ฟเวอร์ของคุณ เส้นทางไฟล์คีย์คือตำแหน่งที่สัมพันธ์กับไฟล์ข้อมูลคีย์ สุดท้าย คีย์ส่วนตัวคือเนื้อหาของไฟล์ media.key
หรือ IV ที่คุณสร้างไว้ก่อนหน้านี้ เช่น
https://example.com/keys/media.key
/path/to/media.key
6143b5373a51cb46209cfed0d747da66
เข้ารหัสสำหรับ HLS
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
ตอนนี้คุณรู้แล้วว่าการเข้ารหัสล้างคีย์คืออะไรและควรใช้เมื่อใด แต่เมื่อใดที่คุณควรใช้บริการ DRM เพื่อเพิ่มความปลอดภัย เนื่องจากจะมีการใช้ Widevine หรือบริการอื่นเพื่อเข้ารหัสและถอดรหัสสื่ออย่างปลอดภัย Widevine รองรับ MPEG-DASH และ HLS และเป็น DRM จาก Google เว็บเบราว์เซอร์ Google Chrome และ Firefox, Android MediaDRM, Android TV และอุปกรณ์อิเล็กทรอนิกส์อื่นๆ สำหรับผู้บริโภคที่ใช้ส่วนขยายสื่อที่เข้ารหัสและส่วนขยายแหล่งที่มาของสื่อใช้ Widevine เป็นเว็บเบราว์เซอร์ของ Google Chrome และ Firefox ซึ่งใช้ในการถอดรหัสเนื้อหา
เข้ารหัสด้วย 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 หลัก โปรดใช้คีย์ที่ให้มาที่นี่แทนการใช้คีย์ของคุณเอง อ่านเอกสารประกอบของ Shaka
Packager เกี่ยวกับการใช้ Widevine Key Server เพื่อดูตัวอย่างเพิ่มเติม
Demux (แยก) เสียงและวิดีโอ เข้ารหัสไฟล์ใหม่ และแสดงผลไฟล์คำอธิบายการนำเสนอสื่อ (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"
Remux (รวม) สตรีมเสียงและวิดีโอ หากคุณใช้เฟรมเวิร์กวิดีโอ คุณอาจไม่ต้องทำเช่นนี้
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocke.mp4
ลำดับ Conversion สื่อ
ส่วนนี้จะแสดงคำสั่งที่ต้องใช้ในการส่งจากไฟล์ดิบ .mov
ไปยังเนื้อหาที่เข้ารหัสซึ่งจัดแพ็กเกจสำหรับ DASH หรือ HLS เพื่อให้เห็นภาพชัดเจน เราจึงแปลงไฟล์ต้นฉบับเป็นอัตราบิต 8Mbs ที่ความละเอียด 1080p (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
Demux (แยก) เสียงและวิดีโอ เข้ารหัสไฟล์ใหม่ และแสดงผลไฟล์คำอธิบายการนำเสนอสื่อ (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
Remux (รวม) สตรีมเสียงและวิดีโอ หากคุณใช้เฟรมเวิร์กวิดีโอ คุณอาจไม่ต้องทำเช่นนี้
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
Demux (แยก) เสียงและวิดีโอ เข้ารหัสไฟล์ใหม่ และแสดงผลไฟล์คำอธิบายการนำเสนอสื่อ (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
Remux (รวม) สตรีมเสียงและวิดีโอ หากคุณใช้เฟรมเวิร์กวิดีโอ คุณอาจไม่ต้องทำเช่นนี้
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocken.mp4
HLS/MP4
HLS รองรับเฉพาะ 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
ข้อมูลเหล่านี้มีรายละเอียดเยอะมาก แต่หวังว่าตอนนี้คุณจะสามารถเข้ารหัสสื่อ ได้อย่างมั่นใจ ต่อไปเราจะแสดงวิธีเพิ่มสื่อลงในเว็บไซต์