ในส่วนนี้ เราจะกล่าวถึงกลยุทธ์ 2 รูปแบบในการเข้ารหัสสื่อของคุณ รวมถึงตัวอย่างการใช้งานจริงเกี่ยวกับวิธีใช้กลยุทธ์ดังกล่าวกับ FFmpeg และ Shaka Packager กลยุทธ์การเข้ารหัส 2 รูปแบบที่เราจะพูดถึงคือ Clear Key และการใช้บริการอย่าง Google Widevine ทั้ง 2 กลยุทธ์นี้เป็นรูปแบบการจัดการสิทธิ์ดิจิทัล (DRM) เพื่อควบคุมสิ่งที่ผู้ใช้จะทำกับสื่อของคุณได้ อย่างไรก็ตาม หลักการแรกจะมีความปลอดภัยน้อยกว่าอีกวิธีอยู่แล้ว เนื่องจากวิธีการส่งผ่านคีย์สำหรับการตรวจสอบสิทธิ์ และเป็นเหตุผลที่บริการ DRM อาจเหมาะสมกว่า
บริการ DRM หลักสำหรับเว็บคือ Google Widevine, Microsoft PlayReady และ Apple FairPlay แต่เราจะไม่กล่าวถึงบริการทั้งหมดในบทความนี้ อย่างไรก็ตาม หากคุณกําหนดเป้าหมายไปยังเบราว์เซอร์สมัยใหม่ทั้งหมด คุณมีแนวโน้มที่จะใช้บริการ DRM ทั้ง 3 รายการ
การแปลงและการเข้ารหัสนั้นทำได้ด้วยแอปพลิเคชันต่อไปนี้
การเข้ารหัสด้วยคีย์ที่ล้าง
ก่อนอื่น คุณควรทำความเข้าใจว่า Clear Key คืออะไรและไม่ใช่อะไรก่อนที่จะนำไปใช้ เมื่อคุณไม่ต้องการใช้บริการ DRM ที่มีอยู่และคิดว่าการเข้ารหัสสื่อขั้นพื้นฐานเป็นตัวเลือกที่เหมาะสม คุณควรใช้ Clear Key แต่โปรดทราบว่าการเข้ารหัสประเภทนี้ไม่ได้ให้ความปลอดภัยในระดับเดียวกับการใช้บริการ DRM อย่างใดอย่างหนึ่ง เนื่องจากคู่คีย์-ค่าไม่ได้เข้ารหัสภายใต้คีย์อื่น ต่างจากคีย์ที่เข้ารหัสซึ่งสร้างขึ้นโดยคีย์การถอดรหัสที่จัดเก็บไว้ในเซิร์ฟเวอร์ใบอนุญาต นอกจากนี้ Clear Key จะส่งคู่คีย์-ค่าเป็นข้อความธรรมดาด้วย ดังนั้นในขณะที่คุณเข้ารหัสสื่อ คีย์สำหรับการถอดรหัสจะไม่เป็นความลับ
สร้างคีย์
คุณใช้วิธีการเดียวกันนี้เพื่อสร้างคีย์สำหรับทั้ง DASH และ HLS ได้ โดยใช้ OpenSSL การดำเนินการต่อไปนี้จะสร้างคีย์การเข้ารหัสที่ประกอบด้วยค่าฐาน 16 16 ค่า
openssl rand -hex 16 > media.key
สร้าง IV
ต่อไปเราจะสร้างเวกเตอร์การเริ่มต้น (IV)
openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66
เข้ารหัสด้วยคีย์ที่ล้าง
ตัวอย่างต่อไปนี้ใช้ Shaka Packager กับคีย์ดิบ โดยมีการระบุ keys
และ
key_ids
ให้กับ Shaka Packager โดยตรง อ่านเอกสารประกอบเพื่อดูตัวอย่างเพิ่มเติม
สําหรับ Flag key
ให้ใช้คีย์ที่สร้างไว้ก่อนหน้านี้ ซึ่งจัดเก็บไว้ในไฟล์ media.key
อย่างไรก็ตาม เมื่อป้อนคำสั่งในบรรทัดคำสั่ง โปรดตรวจสอบว่าคุณได้ลบการเว้นวรรคออกแล้ว สําหรับ Flag 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
ตอนนี้คุณทราบแล้วว่าการเข้ารหัส Clear Key คืออะไรและควรใช้เมื่อใด แต่คุณควรใช้บริการ 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
คุณควรคัดลอกทุกอย่างในคำสั่งตัวแยกหลายรายการ (ตัวแยก) ยกเว้นชื่อไฟล์และ Flag --content-id
จากตัวอย่างทุกประการ --content-id
คือเลขฐาน 16 แบบสุ่ม 16 หรือ 32 หลัก ใช้คีย์ที่ระบุไว้ที่นี่แทนคีย์ของคุณเอง อ่านตัวอย่างเพิ่มเติมได้ในเอกสารประกอบของ Shaka Packager เกี่ยวกับการใช้ 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 หรือ 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
สร้างคีย์การเข้ารหัส Clear Key
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
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
แยกไฟล์ (แยก) เสียงและวิดีโอ เข้ารหัสไฟล์ใหม่ และส่งออกไฟล์คำอธิบายงานนำเสนอสื่อ (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
HLS/MP4
HLS รองรับเฉพาะ MP4 คุณจึงต้องแปลงเป็นคอนเทนเนอร์ MP4 และตัวแปลงรหัสที่รองรับก่อน
แปลงประเภทไฟล์ ตัวแปลงรหัสวิดีโอ และอัตราบิต
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 glocken.mp4
สร้างคีย์การเข้ารหัส Clear Key
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
ข้อมูลมีเยอะมาก แต่หวังว่าตอนนี้คุณจะเข้ารหัสสื่อได้อย่างมั่นใจแล้ว ต่อไป เราจะแสดงวิธีเพิ่มสื่อลงในเว็บไซต์