Medienverschlüsselung

Derek Herman
Derek Herman
Joe Medley
Joe Medley

In diesem Abschnitt befassen wir uns mit zwei verschiedenen Strategien für die Verschlüsselung Ihre Medien und einige praktische Beispiele zur Verwendung mit FFmpeg und Shaka Packager. Die beiden Verschlüsselungsstrategien, die wir besprechen werden, sind Schlüssel löschen und mit einem Dienst wie Google Widevine. Beide Strategien sind eine Form der digitalen DRM, um festzulegen, was Nutzer mit Ihren Medien tun dürfen. Sie können jedoch das eine weniger sicher ist als das andere, da die Schlüssel für Authentifizierung. Daher ist ein DRM-Dienst möglicherweise sinnvoller.

Die primären DRM-Dienste für das Web sind Google Widevine, Microsoft PlayReady. und Apple FairPlay. Wir werden jedoch nicht alle in diesem Artikel behandeln. Bei einer Ausrichtung auf alle modernen Browser werden Sie wahrscheinlich drei DRM-Dienste nutzen.

Die Konvertierung und Verschlüsselung erfolgt mit folgenden Anwendungen:

Schlüsselverschlüsselung löschen

Zunächst sollten Sie genau wissen, was Klarheitsschlüssel ist und was nicht, verwenden. Wenn Sie einen bestehenden DRM-Dienst nicht nutzen möchten und ist die grundlegende Verschlüsselung Ihrer Medien eine praktikable Option. Aber Beachten Sie, dass diese Art der Verschlüsselung nicht das gleiche Maß an Daten bietet, wie die Nutzung eines DRM-Dienstes. Das liegt daran, dass das Schlüssel/Wert-Paar im Gegensatz zu verschlüsselten Schlüsseln, die von einem Entschlüsselungsschlüssel, der auf einem Lizenzserver gespeichert ist. Außerdem sendet „Schlüssel löschen“ das Schlüssel/Wert-Paar als Nur-Text. Der Schlüssel wird während der Verschlüsselung Ihrer Medien zu entschlüsseln, ist kein Geheimnis.

Schlüssel erstellen

Sie können dieselbe Methode verwenden, um einen Schlüssel für DASH und HLS zu erstellen. Verwenden Sie dazu 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 Klarschlüssel verschlüsseln

Im folgenden Beispiel wird Shaka Packager mit Rohschlüsseln verwendet, wobei keys und key_ids werden Shaka Packager direkt zur Verfügung gestellt. Lesen Sie die Dokumentation zu weitere Beispiele.

Verwenden Sie für das Flag key den zuvor erstellten Schlüssel, der im media.key gespeichert ist. -Datei. Achten Sie bei der Eingabe in die Befehlszeile darauf, die zugehörigen Leerzeichen. Wiederholen Sie für das Flag key_id den Wert media.id oder verwenden Sie den Wert IV die oben generiert wurden.

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

Zum Verschlüsseln für HLS benötigen Sie zusätzlich zur Schlüsseldatei eine Schlüsselinformationsdatei. A Datei mit den Schlüsselinformationen ist eine Textdatei im folgenden Format. Es sollte die Erweiterung .keyinfo. Beispiel: encrypt.keyinfo

key URI
key file path
private key

Im Schlüssel-URI befindet sich der oben erstellte media.key die sich auf Ihrem Server befindet. Der Pfad der Schlüsseldatei gibt den Speicherort in Relation zum Schlüssel an. Informationsdatei. Der private Schlüssel ist schließlich der Inhalt von media.key. oder der zuvor erstellten IV-Datei. 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 Klarschlüsselverschlüsselung ist und wann Sie sie verwenden sollten. Aber wann sollten Sie einen DRM-Dienst für zusätzliche Sicherheit nutzen? Hier wird Widevine oder ein anderer Dienst werden dazu verwendet, Ihre Medien sicher zu verschlüsseln und zu entschlüsseln. Widevine unterstützt MPEG-DASH und HLS und ist ein DRM von Google. Widevine wird in der Webversion von Google Chrome und Firefox verwendet Browser, Android MediaDRM, Android TV und andere Geräte der Unterhaltungselektronik, die Encrypted Media Extensions und Media Source Extensions, mit denen Widevine Inhalte entschlüsselt

Mit Widevine verschlüsseln

In den meisten Beispielen in diesem Artikel wurde die Klarschlüsselverschlüsselung verwendet. Für Widevine 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 der Namen Ihrer Dateien und des Das Flag --content-id sollte genau aus dem Beispiel kopiert werden. --content-id ist 16 oder 32 zufällige Hexadezimalziffern. Verwenden Sie anstelle Ihrer eigenen Schlüssel die hier bereitgestellten Schlüssel. Shaka lesen Weitere Beispiele finden Sie in der Packager-Dokumentation zur Verwendung des Widevine Key Servers.

  1. Demux (trennen) die Audio- und Videoinhalte, verschlüsseln die neuen Dateien und geben eine MPD-Datei (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"
    
  2. Remux (kombiniere) die Audio- und Videostreams. Wenn Sie ein Video verwenden ist dies möglicherweise nicht nötig.

    ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocke.mp4
    

Media-Conversion-Sequenz

In diesem Abschnitt werden die Befehle aufgeführt, die erforderlich sind, um von einer .mov-Rohdatei in verschlüsselte Assets, die für DASH oder HLS verpackt sind. Um das Ziel zu haben, Wir konvertieren eine Quelldatei in eine Bitrate von 8 MB und 1080p (1920 x 1080) hoch. Passen Sie diese Werte nach Bedarf an.

DASH/WebM

  1. Konvertiere den Dateityp und den Codec.

    Für diesen Befehl können Sie als Audio-Codec entweder liborbis oder libopus verwenden.

    ffmpeg -i glocken.mov -c:v libvpx-vp9 -c:a libvorbis -b:v 8M -vf setsar=1:1 -f webm tmp_glocken.webm
    
  2. Erstellen Sie einen Klaren Schlüsselverschlüsselungsschlüssel.

    openssl rand -hex 16 > media.key
    
  3. Demux (trennen) die Audio- und Videoinhalte, verschlüsseln die neuen Dateien und geben eine MPD-Datei (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
    
  4. Remux (kombiniere) die Audio- und Videostreams. Wenn Sie ein Video verwenden ist dies möglicherweise nicht nötig.

    ffmpeg -i glocken_video.webm -i glocken_audio.webm -c copy glocken.webm
    

DASH/MP4

  1. Konvertiere den Dateityp, den Video-Codec und die Bitrate.

    ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 tmp_glocken.mp4
    
  2. Erstellen Sie einen Klaren Schlüsselverschlüsselungsschlüssel.

    openssl rand -hex 16 > media.key
    
  3. Demux (trennen) die Audio- und Videoinhalte, verschlüsseln die neuen Dateien und geben eine MPD-Datei (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
    
  4. Remux (kombiniere) die Audio- und Videostreams. Wenn Sie ein Video verwenden ist dies möglicherweise nicht nötig.

    ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocken.mp4
    

HLS/MP4

HLS unterstützt nur MP4. Daher müssen Sie zuerst einen MP4-Container konvertieren und unterstützten Codecs.

  1. 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
    
  2. Erstellen Sie einen Klaren Schlüsselverschlüsselungsschlüssel.

    openssl rand -hex 16 > media.key
    
  3. 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 eine Menge zu verdauen, aber Hoffentlich kannst du jetzt deine Medien verschlüsseln. mit Selbstvertrauen. Als Nächstes zeigen wir Ihnen, wie Sie Medien hinzufügen für Ihre Website.