En esta sección, veremos dos estrategias diferentes para encriptar tu contenido multimedia y algunos ejemplos prácticos sobre cómo usarlos con FFmpeg y Shaka Packager. Las dos estrategias de encriptación que analizaremos son Clear Key y con un servicio como Google Widevine. Ambas estrategias son una forma de administración de derechos (DRM) para controlar lo que los usuarios pueden hacer con tu contenido multimedia. Sin embargo, uno es intrínsecamente menos seguro que el otro debido a la forma en que se pasan las claves para autenticación y es la razón por la que un servicio DRM podría tener más sentido.
Los principales servicios de DRM para la Web son Google Widevine y Microsoft PlayReady. y Apple FairPlay, pero no los abordaremos a todos en este artículo. Sin embargo, si orienta sus anuncios a todos los navegadores modernos, es probable que usen los tres servicios de DRM.
La conversión y la encriptación se realizan con estas aplicaciones:
Borrar encriptación de claves
En primer lugar, debes comprender bien qué es y qué no es Clear Key y la usan. Cuando no quieras usar un servicio de DRM existente y crees la encriptación básica de tus medios es una opción viable, podrías usar Clear Key. Sin embargo, recuerda que este tipo de encriptación no proporciona el mismo nivel de seguridad como si usara uno de los servicios de DRM. Esto se debe a que el par clave-valor es no están encriptadas con otra clave, a diferencia de las claves que generan de desencriptación de Google que se almacena en un servidor de licencias. Además, Clear Key envía el par clave-valor como texto sin formato. Así, mientras encripta su contenido multimedia, la clave no es un secreto.
Crear una clave
Puedes usar el mismo método a fin de crear una clave para DASH y HLS. Para hacerlo, usa OpenSSL. Lo siguiente creará una clave de encriptación de 16 valores hexadecimales.
openssl rand -hex 16 > media.key
Crea un IV
A continuación, podemos generar un vector de inicialización (IV).
openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66
Encriptar con clave clara
En el siguiente ejemplo, se usa Shaka Packager con claves sin procesar, en la que keys
y
Los key_ids
se proporcionan directamente a Shaka Packager. Lee la documentación para
más ejemplos.
Para la marca key
, usa la clave creada anteriormente, que se almacena en el media.key
. Sin embargo, cuando la ingreses en la línea de comandos, asegúrate de haber
espacio en blanco. Para la marca key_id
, repite el valor media.id
o usa el valor IV
generado anteriormente.
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 archivo de información clave
Para encriptar en HLS, necesitas un archivo de información de claves, además de un archivo de claves. R
El archivo de información clave es un archivo de texto con el siguiente formato. Debe tener la
extensión .keyinfo
. Por ejemplo: encrypt.keyinfo
.
key URI
key file path
private key
El URI de la clave es donde se ubicará el elemento media.key
(creado anteriormente).
ubicado en tu servidor. La ruta del archivo de claves es su ubicación en relación con la clave
en un archivo de información específica. Por último, la clave privada es el contenido de media.key
.
o el IV que creaste antes. Por ejemplo:
https://example.com/keys/media.key
/path/to/media.key
6143b5373a51cb46209cfed0d747da66
Encripta para 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/"
Este comando aceptará una clave de 16 o 32 caracteres.
ffmpeg -i myvideo.mov -c:v libx264 -c:a aac -hls_key_info_file encrypt.keyinfo myvideo.m3u8
Encriptación Widevine
Ahora sabes qué es la encriptación de claves clara y cuándo usarla. Pero ¿cuándo deberías usar un servicio de DRM para obtener seguridad adicional? Aquí es donde Widevine u otro servicio para encriptar y desencriptar contenido multimedia de forma segura. Widevine admite MPEG-DASH y HLS y es una DRM de Google. Google Chrome y Firefox web usan Widevine navegadores, Android MediaDRM, Android TV y otros dispositivos electrónicos de consumo que usen Extensiones de medios encriptados y extensiones de fuentes de medios, donde Widevine desencripta el contenido
Encriptar con Widevine
En la mayoría de los ejemplos de este artículo se usó encriptación de claves claras. Sin embargo, para Widevine debe reemplazar las siguientes opciones.
--enable_fixed_key_encryption \
--enable_fixed_key_decryption \
--keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE
Todo en el comando demultiplexer (demux), excepto el nombre de tus archivos y el
La marca --content-id
debe copiarse con exactitud del ejemplo. La --content-id
es 16.
o 32 dígitos hexadecimales aleatorios. Usa las claves que se proporcionan aquí en lugar de las tuyas. Lee el Shaka
Documentación de empaquetador sobre el uso de Widevine Key Server para obtener más ejemplos.
Demux (separar) el audio y el video, encriptar los archivos nuevos y generar un archivo de descripción de presentación multimedia (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"
Remux (combinar) las transmisiones de audio y video Si utilizas un video de la aplicación, es posible que no necesites hacerlo.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocke.mp4
Secuencia de conversión de medios
En esta sección, se muestra el orden de los comandos necesarios para pasar de un archivo .mov
sin procesar a
y encriptados empaquetados para DASH o HLS. Para tener el objetivo de
Por ejemplo, convertiremos un archivo de origen a una tasa de bits de 8 Mbs con una resolución.
una resolución de 1080p (1920 x 1080). Ajusta estos valores según tus necesidades.
DASH/WebM
Convierte el tipo de archivo y el códec.
En este comando, puedes usar
liborbis
olibopus
para el códec de audio.ffmpeg -i glocken.mov -c:v libvpx-vp9 -c:a libvorbis -b:v 8M -vf setsar=1:1 -f webm tmp_glocken.webm
Crear una clave de encriptación de clave clara
openssl rand -hex 16 > media.key
Demux (separar) el audio y el video, encriptar los archivos nuevos y generar un archivo de descripción de presentación multimedia (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
Remux (combinar) las transmisiones de audio y video Si utilizas un video de la aplicación, es posible que no necesites hacerlo.
ffmpeg -i glocken_video.webm -i glocken_audio.webm -c copy glocken.webm
DASH/MP4
Convierte el tipo de archivo, el códec de video y la tasa de bits.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 tmp_glocken.mp4
Crear una clave de encriptación de clave clara
openssl rand -hex 16 > media.key
Demux (separar) el audio y el video, encriptar los archivos nuevos y generar un archivo de descripción de presentación multimedia (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
Remux (combinar) las transmisiones de audio y video Si utilizas un video de la aplicación, es posible que no necesites hacerlo.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocken.mp4
HLS o MP4
HLS solo admite MP4, así que primero deberás convertir al contenedor de MP4 códecs compatibles.
Convierte el tipo de archivo, el códec de video y la tasa de bits.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 glocken.mp4
Crear una clave de encriptación de clave clara
openssl rand -hex 16 > media.key
Crea un archivo de información clave
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
Eso fue una gran cantidad de digerir, pero esperamos que ahora puedas encriptar tus datos con confianza. A continuación, te mostraremos cómo agregar contenido multimedia para tu sitio.