Pada 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 enkripsi yang akan kita bahas adalah Clear Key dan menggunakan layanan seperti Google Widevine. Kedua strategi tersebut merupakan manajemen hak (DRM) untuk mengontrol tindakan yang dapat dilakukan pengguna terhadap media Anda. Namun, yang satu secara inheren kurang aman dibandingkan yang lain karena cara penerusan kunci untuk otentikasi dan mengapa layanan DRM mungkin lebih masuk akal.
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, Anda mungkin akan untuk menggunakan ketiga layanan DRM.
Konversi dan enkripsi dilakukan dengan aplikasi berikut:
Hapus enkripsi Kunci
Pertama, Anda harus memiliki pemahaman yang baik tentang {i>Clear Key<i} dan yang tidak sebelum menggunakannya. Jika Anda tidak ingin menggunakan layanan DRM yang ada dan enkripsi dasar media adalah pilihan yang layak, Anda akan menggunakan Clear Key. Namun demikian, perlu diingat bahwa jenis enkripsi ini tidak memberikan tingkat keamanan seperti saat menggunakan salah satu layanan DRM. Hal ini karena pasangan nilai kunci tidak dienkripsi dengan kunci lain, tidak seperti kunci terenkripsi yang dihasilkan oleh dekripsi yang disimpan di server lisensi. Selain itu, Clear Key mengirim pasangan nilai kunci tersebut sebagai teks biasa, jadi saat Anda mengenkripsi media, kunci untuk membongkar enkripsinya bukanlah rahasia.
Buat kunci
Anda dapat menggunakan metode yang sama untuk membuat kunci DASH dan HLS. Lakukan ini dengan OpenSSL. Berikut ini akan membuat kunci enkripsi yang terbuat dari 16 nilai hex.
openssl rand -hex 16 > media.key
Buat IV
Selanjutnya, kita dapat membuat initialization vector (IV).
openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66
Enkripsi dengan Hapus Kunci
Contoh berikut menggunakan Shaka Packager dengan kunci mentah, dengan keys
dan
key_ids
diberikan secara langsung kepada Shaka Packager. Baca dokumentasi untuk
contoh lainnya.
Untuk flag key
, gunakan kunci yang dibuat sebelumnya, yang disimpan di media.key
. Namun, ketika memasukkannya pada baris perintah, pastikan Anda telah menghapus
spasi kosong. Untuk flag key_id
, ulangi nilai media.id
atau gunakan nilai IV
yang dibuat 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 utama selain file kunci. J
file informasi kunci adalah file teks dengan format di bawah. Class ini 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 menjadi
yang berada di server Anda. Jalur file kunci adalah lokasinya relatif terhadap kunci
informasi file. Terakhir, kunci pribadi adalah konten dari media.key
file 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 Clear Key dan kapan menggunakannya. Namun, kapan sebaiknya Anda menggunakan layanan DRM untuk keamanan tambahan? Di sinilah Widevine, atau layanan lain, akan digunakan untuk mengenkripsi dan mendekripsi media Anda dengan aman. Widevine mendukung MPEG-DASH dan HLS dan merupakan DRM dari Google. Widevine digunakan oleh web Google Chrome dan Firefox browser, 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 Clear Key. Namun, untuk Widevine Anda akan mengganti opsi berikut.
--enable_fixed_key_encryption \
--enable_fixed_key_decryption \
--keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE
Semua yang ada di perintah {i>demultiplexer<i} (demux) kecuali nama file 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 Shaka
Dokumentasi Packager tentang penggunaan Widevine Key Server untuk contoh lainnya.
Melakukan demux (memisahkan) audio dan video, mengenkripsi file baru, dan membuat output 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 (gabungkan) streaming audio dan video. Jika Anda menggunakan video Anda mungkin tidak perlu melakukan ini.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocke.mp4
Urutan konversi media
Bagian ini menunjukkan urutan perintah yang diperlukan untuk berpindah dari file .mov
mentah ke
aset terenkripsi yang dikemas untuk DASH atau HLS. Demi memiliki
tujuan untuk
menggambarkan, kita mengonversi file sumber
ke kecepatan 8Mbs pada resolusi
berukuran 1080p (1920 x 1080). Sesuaikan nilai-nilai ini sesuai kebutuhan Anda.
DASH/WebM
Konversikan 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
Membuat kunci enkripsi Clear Key.
openssl rand -hex 16 > media.key
Melakukan demux (memisahkan) audio dan video, mengenkripsi file baru, dan membuat output 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 (gabungkan) streaming audio dan video. Jika Anda menggunakan video Anda mungkin tidak perlu melakukan ini.
ffmpeg -i glocken_video.webm -i glocken_audio.webm -c copy glocken.webm
DASH/MP4
Konversikan 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
Membuat kunci enkripsi Clear Key.
openssl rand -hex 16 > media.key
Melakukan demux (memisahkan) audio dan video, mengenkripsi file baru, dan membuat output 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 (gabungkan) streaming audio dan video. Jika Anda menggunakan video Anda mungkin tidak perlu melakukan ini.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocken.mp4
HLS/MP4
HLS hanya mendukung MP4, jadi pertama-tama Anda harus mengonversi ke kontainer MP4 dan codec yang didukung.
Konversikan jenis file, codec video, dan kecepatan bit.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 glocken.mp4
Membuat 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
Prosesnya sangat panjang, tetapi mudah-mudahan Anda sekarang dapat mengenkripsi dengan percaya diri. Selanjutnya, kami akan menunjukkan cara menambahkan media ke di situs Anda.