W tej sekcji omówimy 2 strategie szyfrowania multimediów oraz kilka praktycznych przykładów korzystania z nich w programach FFmpeg i Shaka Packager. 2 strategie szyfrowania, które omówimy, to Clear Key i korzystanie z usługi takiej jak Google Widevine. Obie strategie stanowią formę zarządzania prawami cyfrowymi (DRM), która pozwala kontrolować, co użytkownicy mogą robić z Twoimi multimediami. Jednak jeden z nich jest mniej bezpieczny od drugiego ze względu na sposób przekazywania kluczy na potrzeby uwierzytelniania i dlatego usługa DRM może być lepszym rozwiązaniem.
Podstawowe usługi DRM w internecie to Google Widevine, Microsoft PlayReady i Apple FairPlay, ale w tym artykule nie omówimy wszystkich. Jeśli jednak kierujesz kampanię na wszystkie nowoczesne przeglądarki, prawdopodobnie będziesz korzystać ze wszystkich 3 usług DRM.
Konwersja i szyfrowanie są wykonywane za pomocą tych aplikacji:
Wyczyść szyfrowanie klucza
Przed użyciem funkcji Clear Key warto wiedzieć, czym jest funkcja Clear Key. Jeśli nie chcesz korzystać z dotychczasowej usługi DRM i uważasz, że podstawowe szyfrowanie multimediów to dostępna opcja, użyj Clear Key. Pamiętaj jednak, że ten typ szyfrowania nie zapewnia takiego samego poziomu bezpieczeństwa jak korzystanie z jednej z usług DRM. Dzieje się tak, ponieważ para klucz-wartość nie jest szyfrowana za pomocą innego klucza w przeciwieństwie do zaszyfrowanych kluczy generowanych przez klucz odszyfrowywania przechowywany na serwerze licencji. Dodatkowo Clear Key wysyła parę wartości klucza w postaci zwykłego tekstu, więc podczas szyfrowania multimediów klucz do odszyfrowania nie jest tajny.
Utwórz klucz
Aby utworzyć klucz na potrzeby zarówno DASH, jak i HLS, możesz użyć tej samej metody. Zrób to za pomocą OpenSSL. W ten sposób utworzysz klucz szyfrowania składający się z 16 wartości szesnastkowych.
openssl rand -hex 16 > media.key
Tworzenie kroplówki
Następnie możemy wygenerować wektor inicjujący (IV).
openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66
Zaszyfruj z użyciem klucza czyszczenia
W przykładzie poniżej użyto narzędzia Shaka Packager z nieprzetworzonymi kluczami, gdzie keys
i key_ids
są przekazywane bezpośrednio do narzędzia Shaka Packager. Więcej przykładów
znajdziesz w dokumentacji.
W przypadku flagi key
użyj utworzonego wcześniej klucza, który jest przechowywany w pliku media.key
. Jednak wprowadzając go w wierszu poleceń, pamiętaj o usunięciu odstępu. W przypadku flagi key_id
powtórz wartość media.id
lub użyj wartości IV wygenerowanej powyżej.
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
Tworzenie pliku z kluczowymi informacjami
Aby zaszyfrować dane na potrzeby HLS, oprócz pliku z kluczem potrzebujesz pliku z informacjami o kluczu. Plik z informacjami o kluczu to plik tekstowy w formacie opisanym poniżej. Powinien mieć rozszerzenie .keyinfo
. Na przykład: encrypt.keyinfo
.
key URI
key file path
private key
Identyfikator URI klucza to miejsce, w którym znajduje się media.key
(utworzony powyżej) na Twoim serwerze. Ścieżka pliku klucza to jego lokalizacja względem pliku z informacjami o kluczach. Klucz prywatny to zawartość samego pliku media.key
lub utworzonego wcześniej pliku IV. Na przykład:
https://example.com/keys/media.key
/path/to/media.key
6143b5373a51cb46209cfed0d747da66
Szyfrowanie na potrzeby 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/"
To polecenie obsługuje klucz o długości 16 lub 32 znaków.
ffmpeg -i myvideo.mov -c:v libx264 -c:a aac -hls_key_info_file encrypt.keyinfo myvideo.m3u8
Szyfrowanie Widevine
Teraz już wiesz, czym jest szyfrowanie za pomocą klucza czyszczenia i kiedy go używać. Kiedy jednak warto korzystać z usługi DRM, by zwiększyć bezpieczeństwo? Dzięki temu możesz je bezpiecznie szyfrować i odszyfrowywać za pomocą Widevine lub innej usługi. Widevine obsługuje pliki MPEG-DASH i HLS. Jest to system DRM Google. Z Widevine korzystają przeglądarki internetowe Google Chrome i Firefox, Android MediaDRM, Android TV oraz inne urządzenia elektroniczne korzystające z rozszerzeń zaszyfrowanych multimediów i rozszerzeń Media Source, gdzie Widevine odszyfrowuje treści.
Szyfrowanie za pomocą Widevine
W większości przykładów w tym artykule użyto szyfrowania z czystym kluczem. W przypadku Widevine trzeba jednak zastąpić poniższe opcje.
--enable_fixed_key_encryption \
--enable_fixed_key_decryption \
--keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE
Wszystkie elementy w poleceniu demultipleksera (demux) oprócz nazw plików i flagi --content-id
powinny zostać skopiowane dokładnie z przykładu. --content-id
składa się z 16 lub 32 losowych cyfr szesnastkowych. Użyj podanych tutaj kluczy zamiast własnych. Więcej przykładów znajdziesz w dokumentacji Shaka Packager dotyczącej używania serwera kluczy Widevine.
Demuksuj (rozdzielaj) dźwięk i obraz, zaszyfruj nowe pliki i wygeneruj plik z opisem prezentacji multimedialnej (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"
Remusuj (łącz) strumienie audio i wideo. Jeśli korzystasz z ramki wideo, nie musisz tego robić.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocke.mp4
Sekwencja konwersji multimediów
W tej sekcji zobaczysz polecenia w kolejności potrzebne do przejścia z nieprzetworzonego pliku .mov
do zaszyfrowanych zasobów spakowanych na potrzeby DASH lub HLS. Aby zilustrować ten cel, konwertujemy plik źródłowy na szybkość transmisji bitów 8 MB w rozdzielczości 1080p (1920 x 1080). Dostosuj te wartości do swoich potrzeb.
DASH/WebM
Przekonwertuj typ pliku i kodek.
W tym poleceniu możesz użyć kodeka audio
liborbis
lublibopus
.ffmpeg -i glocken.mov -c:v libvpx-vp9 -c:a libvorbis -b:v 8M -vf setsar=1:1 -f webm tmp_glocken.webm
Utwórz klucz szyfrowania Clear Key.
openssl rand -hex 16 > media.key
Demuksuj (rozdzielaj) dźwięk i obraz, zaszyfruj nowe pliki i wygeneruj plik z opisem prezentacji multimedialnej (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
Remusuj (łącz) strumienie audio i wideo. Jeśli korzystasz z ramki wideo, nie musisz tego robić.
ffmpeg -i glocken_video.webm -i glocken_audio.webm -c copy glocken.webm
DASH/MP4
Skonwertuj typ pliku, kodek wideo i szybkość transmisji bitów.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 tmp_glocken.mp4
Utwórz klucz szyfrowania Clear Key.
openssl rand -hex 16 > media.key
Demuksuj (rozdzielaj) dźwięk i obraz, zaszyfruj nowe pliki i wygeneruj plik z opisem prezentacji multimedialnej (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
Remusuj (łącz) strumienie audio i wideo. Jeśli korzystasz z ramki wideo, nie musisz tego robić.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocken.mp4
HLS/MP4
HLS obsługuje tylko MP4, więc najpierw musisz przekonwertować treści na kontener MP4 i obsługiwane kodeki.
Skonwertuj typ pliku, kodek wideo i szybkość transmisji bitów.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 glocken.mp4
Utwórz klucz szyfrowania Clear Key.
openssl rand -hex 16 > media.key
Tworzenie pliku z kluczowymi informacjami
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
Trochę to trudne, ale mam nadzieję, że teraz będziesz pewnie szyfrować multimedia. Następnie pokażemy Ci, jak dodać multimedia do witryny.