In questa sezione tratteremo due diverse strategie di crittografia i tuoi contenuti multimediali e alcuni esempi pratici su come utilizzarli con FFmpeg Shaka Packager. Le due strategie per la crittografia di cui parleremo sono Clear Key e utilizzando un servizio come Google Widevine. Entrambe le strategie sono una sorta di la gestione dei diritti (DRM) per controllare cosa possono fare gli utenti con i tuoi contenuti multimediali. Tuttavia, una è intrinsecamente meno sicura dell'altra, a causa del modo in cui le chiavi vengono passate autenticazione ed è per questo che un servizio DRM potrebbe avere più senso.
I servizi DRM principali per il web sono Google Widevine e Microsoft PlayReady e Apple FairPlay, ma in questo articolo non li tratteremo tutti. Tuttavia, se hai scelto come target tutti i browser moderni, utilizzare tutti e tre i servizi DRM.
La conversione e la crittografia vengono eseguite con queste applicazioni:
Cancella crittografia chiave
Innanzitutto, dovresti avere una buona comprensione di cosa sia Clear Key e cosa non lo sia prima utilizzandolo. Quando non vuoi utilizzare un servizio DRM esistente e ritieni che la crittografia di base dei tuoi contenuti multimediali è un'opzione valida, dovresti usare Clear Key. Ma tieni presente che questo tipo di crittografia non fornisce lo stesso livello sicurezza come l'utilizzo di uno dei servizi DRM. Questo perché la coppia chiave-valore non criptate in un'altra chiave, a differenza delle chiavi criptate generate da un di decriptazione archiviata su un server di licenza. Inoltre, Clear Key invia la coppia chiave-valore come testo normale. Quindi, mentre cripti il contenuto multimediale, la chiave non è un secret.
Crea una chiave
Puoi utilizzare lo stesso metodo per creare una chiave sia per DASH che per HLS. Esegui questa operazione utilizzando OpenSSL. Di seguito verrà creata una chiave di crittografia composta da 16 valori esadecimali.
openssl rand -hex 16 > media.key
Crea un IV
Ora possiamo generare un vettore di inizializzazione (IV).
openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66
Cripta con Cancella chiave
L'esempio seguente utilizza Shaka Packager con chiavi non elaborate, dove keys
e
I key_ids
vengono forniti direttamente a Shaka Packager. Leggi la documentazione per
altri esempi.
Per il flag key
, utilizza la chiave creata in precedenza, che è archiviata in media.key
. Tuttavia, quando lo inserisci dalla riga di comando, assicurati di aver rimosso
uno spazio vuoto. Per il flag key_id
, ripeti il valore media.id
o utilizza il valore IV
generati sopra.
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
Crea un file di informazioni chiave
Per criptare gli oggetti HLS, hai bisogno di un file con le informazioni sulle chiavi oltre a un file della chiave. R
il file di informazioni chiave è un file di testo nel seguente formato. Dovrebbe avere
estensione .keyinfo
. Ad esempio: encrypt.keyinfo
.
key URI
key file path
private key
L'URI della chiave è il punto in cui verrà inserito media.key
(creato sopra)
situata sul tuo server. Il percorso del file della chiave è la sua posizione rispetto alla chiave.
delle informazioni. Infine, la chiave privata è il contenuto dell'elemento media.key
o l'IV che hai creato prima. Ad esempio:
https://example.com/keys/media.key
/path/to/media.key
6143b5373a51cb46209cfed0d747da66
Crittografia per 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/"
Questo comando accetta una chiave di 16 o 32 caratteri.
ffmpeg -i myvideo.mov -c:v libx264 -c:a aac -hls_key_info_file encrypt.keyinfo myvideo.m3u8
Crittografia Widevine
Ora sai cos'è la crittografia Clear Key e quando utilizzarla. Ma quando è consigliabile utilizzare un servizio DRM per una maggiore sicurezza? È qui che Widevine o un altro servizio verranno utilizzate per criptare e decriptare in modo sicuro i tuoi contenuti multimediali. Widevine supporta MPEG-DASH e HLS ed è un DRM di Google. Widevine è utilizzato da Google Chrome e Firefox sul web browser, Android MediaDRM, Android TV e altri dispositivi elettronici di consumo che utilizzano Encrypted Media Extensions e Media Source Extensions, dove Widevine decripta i contenuti.
Cripta con Widevine
La maggior parte degli esempi in questo articolo utilizzava la crittografia Clear Key. Tuttavia, per Widevine le opzioni seguenti verranno sostituite.
--enable_fixed_key_encryption \
--enable_fixed_key_decryption \
--keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE
Tutto ciò che è presente nel comando demultiplexer (demux), tranne il nome dei file e
Il flag --content-id
deve essere copiato esattamente dall'esempio. --content-id
compie 16 anni
o 32 cifre esadecimali casuali. Utilizza le chiavi fornite qui anziché le tue. Leggi lo Shaka
Documentazione dello strumento di creazione pacchetti sull'utilizzo di Widevine Key Server per altri esempi.
Demux (separa) audio e video, cripta i nuovi file e come output file MPD (Media Presentation Description).
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 (combinare) gli stream audio e video. Se è in uso un video potrebbe non essere necessario eseguire questa operazione.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocke.mp4
Sequenza di conversione multimediale
Questa sezione mostra i comandi in ordine necessari per ottenere da un file .mov
non elaborato a
asset criptati in pacchetti per DASH o HLS. Per il gusto di avere un obiettivo
Stiamo convertendo un file sorgente a una velocità in bit di 8 Mbs e a una risoluzione
di 1080p (1920 x 1080). Modifica questi valori in base alle tue esigenze.
DASH/WebM
Converti il tipo di file e il codec.
Per questo comando puoi utilizzare
liborbis
olibopus
come 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
Crea una chiave di crittografia Clear Key.
openssl rand -hex 16 > media.key
Demux (separa) audio e video, cripta i nuovi file e come output file MPD (Media Presentation Description).
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 (combinare) gli stream audio e video. Se è in uso un video potrebbe non essere necessario eseguire questa operazione.
ffmpeg -i glocken_video.webm -i glocken_audio.webm -c copy glocken.webm
DASH/MP4
Converti il tipo di file, il codec video e la velocità in bit.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 tmp_glocken.mp4
Crea una chiave di crittografia Clear Key.
openssl rand -hex 16 > media.key
Demux (separa) audio e video, cripta i nuovi file e come output file MPD (Media Presentation Description).
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 (combinare) gli stream audio e video. Se è in uso un video potrebbe non essere necessario eseguire questa operazione.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocken.mp4
HLS/MP4
HLS supporta solo MP4, quindi prima dovrai convertirlo nel container MP4 e codec supportati.
Converti il tipo di file, il codec video e la velocità in bit.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 glocken.mp4
Crea una chiave di crittografia Clear Key.
openssl rand -hex 16 > media.key
Crea un file di informazioni chiave
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
I dati erano tanti, ma spero che ora tu sia in grado di criptare i tuoi contenuti multimediali in tutta sicurezza. Ora ti mostreremo come aggiungere contenuti multimediali alla nel tuo sito.