Medya şifrelemesi

Derek Herman
Derek Herman
Joe Medley
Joe Medley

Bu bölümde, şifreleme ve veri şifreleme için iki farklı stratejiyi ve bunların FFmpeg ve Shaka Packager. Ele alacağımız iki şifreleme stratejisi, Anahtarı Temizle ve Google Widevine gibi bir hizmet kullanarak. Her iki strateji de bir tür dijital hak yönetimi (DRM) ile uyumludur. Ancak, Biri doğası gereği diğerinden daha az güvenlidir. Bunun nedeni, anahtarların Bu nedenle bir DRM hizmeti daha mantıklı olabilir.

Web'deki birincil DRM hizmetleri Google Widevine, Microsoft PlayReady'dir. ve Apple FairPlay'de mevcut. Ancak bu makalede, bunların tümüne değinmeyeceğiz. Ancak, tüm modern tarayıcıları hedefliyorsanız üç DRM hizmetini de kullanıyor olmaları gerekir.

Dönüştürme ve şifreleme işlemi şu uygulamalarda yapılır:

Anahtar şifrelemeyi temizle

Öncelikle, Anahtarları Temizle özelliğinin ne olduğunu ve olmadığını iyice kavrayacaksınız. anlamaktır. Mevcut bir DRM hizmetini kullanmak istemiyorsanız temel şifreleme uygun bir seçenektir. Anahtarı Temizle'yi kullanırsınız. Ancak, bu şifreleme türünün, aynı düzeyde şifreleme DRM hizmetleri için güvenli değildir. Bunun nedeni, anahtar/değer çiftinin bir başka anahtar tarafından oluşturulan şifrelenmiş anahtarların aksine, bir lisans sunucusunda depolanan şifre çözme anahtarı bulunur. Buna ek olarak, Anahtarları Temizle özelliği, anahtar/değer çiftini düz metin olarak işaretler. Böylece, medya anahtarınızı şifrelerken şifresini çözemez.

Anahtar oluştur

Hem DASH hem HLS için anahtar oluşturmak üzere aynı yöntemi kullanabilirsiniz. Bunu şunu kullanarak yap: OpenSSL'yi tıklayın. Aşağıda, 16 onaltılık değerden oluşan bir şifreleme anahtarı oluşturulur.

openssl rand -hex 16 > media.key

IV oluşturun

Ardından bir başlatma vektörü (IV) oluşturabiliriz.

openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66

Anahtarı Temizle ile Şifreleme

Aşağıdaki örnekte ham anahtarlarla Shaaka Packager kullanılmıştır. keys ve key_ids doğrudan Shaka Packager'a sağlanır. Dokümanları okuyun daha fazla örnek.

key işareti için media.key içinde depolanan, daha önce oluşturulan anahtarı kullanın dosyası olarak kaydedebilirsiniz. Ancak, bunu komut satırına girerken, kullanabilirsiniz. key_id işareti için media.id değerini tekrarlayın veya IV değerini kullanın oluşturabilirsiniz.

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

Önemli bilgiler dosyası oluşturma

HLS için şifrelemek istiyorsanız anahtar dosyasına ek olarak bir anahtar bilgi dosyasına da ihtiyacınız vardır. CEVAP temel bilgileri dosyası, aşağıdaki biçimde bir metin dosyasıdır. Etiketin uzantı: .keyinfo. Örnek: encrypt.keyinfo.

key URI
key file path
private key

Anahtar URI, media.key öğesinin (yukarıda oluşturulan) olacağı yerdir bulunacaktır. Anahtar dosyası yolu, anahtara göre konumudur bilgi dosyası olarak. Son olarak, özel anahtar media.key öğesinin içeriğidir dosyanın kendisi veya daha önce oluşturduğunuz IV. Örneğin:

https://example.com/keys/media.key
/path/to/media.key
6143b5373a51cb46209cfed0d747da66

HLS için şifreleme

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/"

Bu komut, 16 veya 32 karakterli bir anahtarı kabul eder.

ffmpeg -i myvideo.mov -c:v libx264 -c:a aac -hls_key_info_file encrypt.keyinfo myvideo.m3u8

Widevine şifrelemesi

Artık Net Anahtar şifrelemesinin ne olduğunu ve ne zaman kullanılacağını biliyorsunuz. Peki, ek güvenlik için ne zaman DRM hizmetini kullanmalısınız? Widevine veya diğer bir hizmet, medyanızı güvenli bir şekilde şifrelemek ve şifresini çözmek için kullanılır. Widevine, MPEG-DASH ve HLS'dir ve Google tarafından sunulan bir DRM'dir. Widevine, Google Chrome ve Firefox web'de kullanılır kullanan tarayıcılar, Android MediaDRM, Android TV ve Widevine'ın içeriğin şifresini çözdüğü Şifrelenmiş Medya Uzantıları ve Medya Kaynağı Uzantıları.

Widevine ile şifreleme

Bu makaledeki örneklerin çoğunda Anahtar Şifrelemeyi Temizle kullanılmıştır. Ancak Widevine için , aşağıdaki seçenekleri değiştirmek isteyecektir.

--enable_fixed_key_encryption \
--enable_fixed_key_decryption \
--keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE

Dosyalarınızın adları ve --content-id işareti tam olarak örnekten kopyalanmalıdır. --content-id 16 yaşında veya 32 rastgele onaltılık basamaktan oluşur. Kendi anahtarları yerine burada sağlanan anahtarları kullanın. Shaka'yı okuyun Daha fazla örnek için Widevine Anahtar Sunucusu'nun kullanımıyla ilgili paketleyici dokümanlarına göz atın.

  1. Ses ve görüntü için demux (ayrı) yapın, yeni dosyaları şifreleyin ve medya sunusu açıklama (MPD) dosyası.

    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. Ses ve video akışlarını Remux (bir araya getirir). Video kullanıyorsanız bunu yapmanız gerekmeyebilir.

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

Medya dönüşüm dizisi

Bu bölümde, ham bir .mov dosyasından DASH veya HLS için paketlenmiş şifrelenmiş öğeler. Belirli bir hedefe yönelik gibi, bir kaynak dosyayı çözünürlükte 8Mbs bit hızına dönüştürüyoruz. (1080p (1920 x 1080).) Bu değerleri ihtiyaçlarınıza göre ayarlayın.

DASH/WebM

  1. Dosya türünü ve codec'i dönüştürün.

    Bu komutta, ses codec'i için liborbis veya libopus kullanabilirsiniz.

    ffmpeg -i glocken.mov -c:v libvpx-vp9 -c:a libvorbis -b:v 8M -vf setsar=1:1 -f webm tmp_glocken.webm
    
  2. Net bir anahtar şifreleme anahtarı oluşturun.

    openssl rand -hex 16 > media.key
    
  3. Ses ve görüntü için demux (ayrı) yapın, yeni dosyaları şifreleyin ve medya sunusu açıklama (MPD) dosyası.

    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. Ses ve video akışlarını Remux (bir araya getirir). Video kullanıyorsanız bunu yapmanız gerekmeyebilir.

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

DASH/MP4

  1. Dosya türünü, video codec'ini ve bit hızını dönüştürün.

    ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 tmp_glocken.mp4
    
  2. Net bir anahtar şifreleme anahtarı oluşturun.

    openssl rand -hex 16 > media.key
    
  3. Ses ve görüntü için demux (ayrı) yapın, yeni dosyaları şifreleyin ve medya sunusu açıklama (MPD) dosyası.

    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. Ses ve video akışlarını Remux (bir araya getirir). Video kullanıyorsanız bunu yapmanız gerekmeyebilir.

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

HLS/MP4

HLS yalnızca MP4'ü destekler, bu nedenle önce MP4 kapsayıcıya dönüştürmeniz ve destekler.

  1. Dosya türünü, video codec'ini ve bit hızını dönüştürün.

    ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 glocken.mp4
    
  2. Net bir anahtar şifreleme anahtarı oluşturun.

    openssl rand -hex 16 > media.key
    
  3. Önemli bilgiler dosyası oluşturma

    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
    

Özetleyecek çok fazla şey vardı ama artık medya verilerinizi şifrelemeyi ortaya çıkarmanıza yardımcı olabilir. Şimdi Google Haberler'e nasıl medya ekleyeceğinizi sitenizi ziyaret edin.