In diesem Abschnitt geht es um zwei verschiedene Strategien zum Verschlüsseln von Medien sowie um einige praktische Beispiele für deren Verwendung mit FFmpeg und Shaka Packager. Wir besprechen die beiden Verschlüsselungsstrategien, die wir besprechen werden, Clear Key und die Verwendung eines Dienstes wie Google Widevine. Beide Strategien sind eine Form der digitalen Rechteverwaltung (Digital Rights Management, DRM), mit der sich steuern lässt, was Nutzer mit Ihren Medien tun dürfen. Ein DRM-Dienst ist jedoch an sich weniger sicher als der andere, da die Schlüssel zur Authentifizierung so weitergegeben werden, dass ein DRM-Dienst sinnvoller sein kann.
Die primären Dienste zur digitalen Rechteverwaltung im Web sind Google Widevine, Microsoft PlayReady und Apple FairPlay. In diesem Artikel werden wir sie jedoch nicht auf alle behandeln. Wenn Ihre Anzeigen jedoch auf alle modernen Browser ausgerichtet sind, werden Sie wahrscheinlich alle drei Dienste für die digitale Rechteverwaltung nutzen.
Die Konvertierung und Verschlüsselung erfolgt mit den folgenden Anwendungen:
Schlüsselverschlüsselung löschen
Zuerst sollten Sie wissen, was ein Löschschlüssel ist und was nicht, bevor Sie ihn verwenden. Wenn Sie keinen vorhandenen DRM-Dienst verwenden möchten und der Meinung sind, dass die grundlegende Verschlüsselung Ihrer Medien eine praktikable Option ist, verwenden Sie die Funktion „Schlüssel löschen“. Beachten Sie jedoch, dass diese Art der Verschlüsselung nicht dasselbe Maß an Sicherheit bietet wie die Verwendung eines der DRM-Dienste. Dies liegt daran, dass das Schlüssel/Wert-Paar nicht unter einem anderen Schlüssel verschlüsselt wird, im Gegensatz zu verschlüsselten Schlüsseln, die von einem Entschlüsselungsschlüssel generiert werden, der auf einem Lizenzserver gespeichert ist. Darüber hinaus sendet die Funktion „Clear Key“ das Schlüssel/Wert-Paar als Nur-Text. Das heißt, während Sie Ihr Medium verschlüsseln, ist der Schlüssel zum Entschlüsseln kein Geheimnis.
Schlüssel erstellen
Sie können mit derselben Methode einen Schlüssel für DASH und HLS erstellen. Dazu verwenden Sie OpenSSL. Mit dem folgenden Befehl wird ein Verschlüsselungsschlüssel aus 16 Hexadezimalwerten erstellt.
openssl rand -hex 16 > media.key
IV erstellen
Als Nächstes können wir einen Initialisierungsvektor (IV) generieren.
openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66
Mit „Clear Key“ verschlüsseln
Im folgenden Beispiel wird Shaka Packager mit Rohschlüsseln verwendet. Dabei werden keys
und key_ids
direkt für Shaka Packager bereitgestellt. Weitere Beispiele finden Sie in der Dokumentation.
Verwenden Sie für das Flag key
den zuvor erstellten Schlüssel, der in der Datei media.key
gespeichert ist. Achten Sie jedoch bei der Eingabe in die Befehlszeile darauf, dass Sie den Leerraum entfernt haben. Wiederholen Sie für das Flag key_id
den Wert media.id
oder verwenden Sie den oben generierten IV-Wert.
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
Datei mit Schlüsselinformationen erstellen
Für die Verschlüsselung für HLS benötigst du zusätzlich zu einer Schlüsseldatei eine Datei mit Schlüsselinformationen. Eine Datei mit Schlüsselinformationen ist eine Textdatei im folgenden Format. Sie sollte die Erweiterung .keyinfo
haben. Beispiel: encrypt.keyinfo
key URI
key file path
private key
Im Schlüssel-URI befindet sich die media.key
(oben erstellt) auf Ihrem Server. Der Pfad der Schlüsseldatei ist der Speicherort in der Datei mit den Schlüsselinformationen. Schließlich ist der private Schlüssel der Inhalt der media.key
-Datei selbst oder der zuvor erstellte IV. Beispiel:
https://example.com/keys/media.key
/path/to/media.key
6143b5373a51cb46209cfed0d747da66
Für HLS verschlüsseln
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/"
Dieser Befehl akzeptiert einen Schlüssel mit 16 oder 32 Zeichen.
ffmpeg -i myvideo.mov -c:v libx264 -c:a aac -hls_key_info_file encrypt.keyinfo myvideo.m3u8
Widevine-Verschlüsselung
Jetzt wissen Sie, was die Clear-Key-Verschlüsselung ist und wann sie verwendet wird. Aber wann sollten Sie einen Dienst zur digitalen Rechteverwaltung nutzen, um die Sicherheit zu erhöhen? Hier wird Widevine oder ein anderer Dienst verwendet, um Ihre Medien sicher zu verschlüsseln und zu entschlüsseln. Widevine unterstützt MPEG-DASH und HLS und ist eine digitale Rechteverwaltung von Google. Widevine wird von den Webbrowsern Google Chrome und Firefox, Android MediaDRM, Android TV und anderen Geräten der Unterhaltungselektronik verwendet, die verschlüsselte Medienerweiterungen und Media Source Extensions nutzen, wo Widevine Inhalte entschlüsselt.
Mit Widevine verschlüsseln
Bei den meisten Beispielen in diesem Artikel wurde die Clear-Key-Verschlüsselung verwendet. Für Widevine müssen Sie die folgenden Optionen ersetzen.
--enable_fixed_key_encryption \
--enable_fixed_key_decryption \
--keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE
Alles im Demultiplexer-Befehl (Demux) mit Ausnahme des Namens der Dateien und des Flags --content-id
sollte genau aus dem Beispiel kopiert werden. --content-id
besteht aus 16 oder 32 zufälligen Hexadezimalziffern. Verwenden Sie anstelle Ihrer eigenen Schlüssel die hier bereitgestellten Schlüssel. Weitere Beispiele finden Sie in der Shaka Packager-Dokumentation zur Verwendung des Widevine-Schlüsselservers.
Demux (getrennt) die Audio- und Videoinhalte, verschlüsseln Sie die neuen Dateien und geben eine MPD-Datei (Media Presentation Description) aus.
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"
Die Audio- und Videostreams neu mux (kombinieren) Wenn Sie ein Video-Framework verwenden, müssen Sie das möglicherweise nicht tun.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocke.mp4
Media-Conversion-Sequenz
In diesem Abschnitt werden die Befehle aufgelistet, die erforderlich sind, um von einer RAW-.mov
-Datei in verschlüsselte Assets zu gelangen, die für DASH oder HLS verpackt wurden. Zur Veranschaulichung wandeln wir eine Quelldatei in eine Bitrate von 8 MB/s bei einer Auflösung von 1080p (1920 x 1080) um. Passen Sie diese Werte nach Bedarf an.
DASH/WebM
Konvertieren Sie den Dateityp und den Codec.
Für diesen Befehl kannst du entweder
liborbis
oderlibopus
als Audio-Codec verwenden.ffmpeg -i glocken.mov -c:v libvpx-vp9 -c:a libvorbis -b:v 8M -vf setsar=1:1 -f webm tmp_glocken.webm
Erstellen Sie einen Clear-Key-Verschlüsselungsschlüssel.
openssl rand -hex 16 > media.key
Demux (getrennt) die Audio- und Videoinhalte, verschlüsseln Sie die neuen Dateien und geben eine MPD-Datei (Media Presentation Description) aus.
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
Die Audio- und Videostreams neu mux (kombinieren) Wenn Sie ein Video-Framework verwenden, müssen Sie das möglicherweise nicht tun.
ffmpeg -i glocken_video.webm -i glocken_audio.webm -c copy glocken.webm
DASH/MP4
Konvertiere Dateityp, Video-Codec und Bitrate.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 tmp_glocken.mp4
Erstellen Sie einen Clear-Key-Verschlüsselungsschlüssel.
openssl rand -hex 16 > media.key
Demux (getrennt) die Audio- und Videoinhalte, verschlüsseln Sie die neuen Dateien und geben eine MPD-Datei (Media Presentation Description) aus.
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
Die Audio- und Videostreams neu mux (kombinieren) Wenn Sie ein Video-Framework verwenden, müssen Sie das möglicherweise nicht tun.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocken.mp4
HLS/MP4
HLS unterstützt nur MP4. Daher musst du zuerst in den MP4-Container und unterstützte Codecs konvertieren.
Konvertiere den Dateityp, den Video-Codec und die Bitrate.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 glocken.mp4
Erstellen Sie einen Clear-Key-Verschlüsselungsschlüssel.
openssl rand -hex 16 > media.key
Datei mit Schlüsselinformationen erstellen
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
Das war sehr aufwendig, aber hoffentlich können Sie Ihre Medien jetzt zuverlässig verschlüsseln. Als Nächstes zeigen wir dir, wie du deiner Website Medien hinzufügst.