Di bagian ini, kita akan membahas dua strategi berbeda untuk mengenkripsi media Anda, dan beberapa contoh praktis tentang cara menggunakannya dengan FFmpeg dan Shaka Packager. Dua strategi untuk enkripsi yang akan kita bahas adalah Kunci Hapus dan menggunakan layanan seperti Google Widevine. Kedua strategi tersebut merupakan bentuk manajemen hak digital (DRM) untuk mengontrol tindakan yang dapat dilakukan pengguna dengan media Anda. Namun, salah satunya kurang aman dibandingkan yang lain karena cara kunci diteruskan untuk autentikasi dan itulah alasan layanan DRM mungkin lebih tepat.
Layanan DRM utama untuk web adalah Google Widevine, Microsoft PlayReady dan Apple FairPlay, tetapi kami tidak akan membahas semuanya dalam artikel ini. Namun, jika Anda menargetkan semua browser modern, kemungkinan Anda akan menggunakan ketiga layanan DRM tersebut.
Konversi dan enkripsi dilakukan dengan aplikasi berikut:
Enkripsi Hapus Kunci
Pertama, Anda harus memiliki pemahaman yang baik tentang apa itu Clear Key dan tidak sebelum menggunakannya. Jika Anda tidak ingin menggunakan layanan DRM yang ada dan merasa enkripsi dasar media Anda adalah opsi yang tepat, sebaiknya gunakan Kunci Hapus. Namun, perlu diperhatikan bahwa jenis enkripsi ini tidak memberikan tingkat keamanan yang sama dengan penggunaan salah satu layanan DRM. Hal ini karena pasangan nilai kunci tidak dienkripsi dengan kunci lain, tidak seperti kunci terenkripsi yang dihasilkan oleh kunci dekripsi yang disimpan di server lisensi. Selain itu, Clear Key mengirimkan pasangan nilai kunci sebagai teks biasa. Jadi, saat Anda mengenkripsi media, kunci untuk mendekripsinya bukan merupakan rahasia.
Buat kunci
Anda dapat menggunakan metode yang sama untuk membuat kunci DASH dan HLS. Lakukan hal ini menggunakan OpenSSL. Perintah berikut akan membuat kunci enkripsi yang terdiri dari 16 nilai hex.
openssl rand -hex 16 > media.key
Membuat IV
Selanjutnya kita dapat membuat vektor inisialisasi (IV).
openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66
Enkripsikan dengan Clear Key
Contoh berikut menggunakan Shaka Packager dengan kunci mentah, dengan keys
dan
key_ids
disediakan ke Shaka Packager secara langsung. Baca dokumentasi untuk
mengetahui contoh lainnya.
Untuk flag key
, gunakan kunci yang dibuat sebelumnya, yang disimpan dalam file
media.key
. Namun, saat memasukkannya pada command line, pastikan Anda telah menghapus
spasi kosongnya. Untuk tanda key_id
, ulangi nilai media.id
atau gunakan nilai IV
yang dihasilkan di atas.
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
Membuat file informasi kunci
Untuk mengenkripsi HLS, Anda memerlukan file informasi kunci selain file kunci. File
informasi kunci adalah file teks dengan format di bawah ini. Class tersebut harus memiliki ekstensi .keyinfo
. Contoh: encrypt.keyinfo
.
key URI
key file path
private key
URI kunci adalah tempat media.key
(yang dibuat di atas akan
berada di server Anda. Jalur file kunci adalah lokasinya relatif terhadap file
informasi kunci. Terakhir, kunci pribadi adalah isi file media.key
itu sendiri, atau IV yang Anda buat sebelumnya. Contoh:
https://example.com/keys/media.key
/path/to/media.key
6143b5373a51cb46209cfed0d747da66
Enkripsi untuk 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/"
Perintah ini akan menerima kunci dengan 16 atau 32 karakter.
ffmpeg -i myvideo.mov -c:v libx264 -c:a aac -hls_key_info_file encrypt.keyinfo myvideo.m3u8
Enkripsi Widevine
Sekarang Anda tahu apa itu enkripsi {i>Clear Key<i} dan kapan menggunakannya. Namun, kapan sebaiknya Anda menggunakan layanan DRM untuk keamanan tambahan? Di sinilah Widevine, atau layanan lainnya, akan digunakan untuk mengenkripsi dan mendekripsi media dengan aman. Widevine mendukung MPEG-DASH dan HLS, serta merupakan DRM dari Google. Widevine digunakan oleh browser web Google Chrome dan Firefox, Android MediaDRM, Android TV, dan perangkat elektronik konsumen lainnya yang menggunakan Ekstensi Media Terenkripsi dan Ekstensi Sumber Media, tempat Widevine mendekripsi konten.
Enkripsi dengan Widevine
Sebagian besar contoh dalam artikel ini menggunakan enkripsi {i>Clear Key<i}. Namun, untuk Widevine, sebaiknya ganti opsi berikut ini.
--enable_fixed_key_encryption \
--enable_fixed_key_decryption \
--keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE
Semua yang ada dalam perintah demultiplexer (demux), kecuali nama file Anda dan flag --content-id
harus disalin persis dari contoh. --content-id
adalah 16
atau 32 digit heksadesimal acak. Gunakan kunci yang disediakan di sini, bukan kunci Anda sendiri. Baca dokumentasi
Shka Packager tentang penggunaan Widevine Key Server untuk contoh lainnya.
Demux (memisahkan) audio dan video, mengenkripsi file baru, dan menghasilkan file deskripsi presentasi media (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 (menggabungkan) streaming audio dan video. Jika menggunakan kerangka kerja video, Anda mungkin tidak perlu melakukannya.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocke.mp4
Urutan konversi media
Bagian ini menunjukkan urutan perintah yang diperlukan untuk beralih dari file .mov
mentah ke
aset terenkripsi yang dikemas untuk DASH atau HLS. Agar mudah untuk
menggambarkan, kita mengonversi file sumber ke kecepatan bit 8 Mbs pada resolusi
1080p (1920 x 1080). Sesuaikan nilai ini sesuai kebutuhan Anda.
DASH/WebM
Mengonversi jenis file dan codec.
Untuk perintah ini, Anda dapat menggunakan
liborbis
ataulibopus
untuk codec audio.ffmpeg -i glocken.mov -c:v libvpx-vp9 -c:a libvorbis -b:v 8M -vf setsar=1:1 -f webm tmp_glocken.webm
Buat kunci enkripsi Clear Key.
openssl rand -hex 16 > media.key
Demux (memisahkan) audio dan video, mengenkripsi file baru, dan menghasilkan file deskripsi presentasi media (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 (menggabungkan) streaming audio dan video. Jika menggunakan kerangka kerja video, Anda mungkin tidak perlu melakukannya.
ffmpeg -i glocken_video.webm -i glocken_audio.webm -c copy glocken.webm
DASH/MP4
Mengonversi jenis file, codec video, dan kecepatan bit.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 tmp_glocken.mp4
Buat kunci enkripsi Clear Key.
openssl rand -hex 16 > media.key
Demux (memisahkan) audio dan video, mengenkripsi file baru, dan menghasilkan file deskripsi presentasi media (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 (menggabungkan) streaming audio dan video. Jika menggunakan kerangka kerja video, Anda mungkin tidak perlu melakukannya.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocken.mp4
HLS/MP4
HLS hanya mendukung MP4, jadi Anda harus terlebih dahulu mengonversinya ke penampung MP4 dan codec yang didukung.
Mengonversi jenis file, codec video, dan kecepatan bit.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 glocken.mp4
Buat kunci enkripsi Clear Key.
openssl rand -hex 16 > media.key
Membuat file informasi kunci
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
Pembahasan itu rumit sekali, tetapi semoga Anda sekarang dapat mengenkripsi media dengan percaya diri. Berikutnya, kita akan menunjukkan cara menambahkan media ke situs Anda.