Cuando un cliente solicita un archivo M3U8, esta función agrega automáticamente los parámetros de autenticación de la solicitud a la URI de clave dentro de la etiqueta #EXT-X-KEY. Esto protege el acceso a sus claves de cifrado sin necesidad de modificar su servidor de origen y evita la reproducción no autorizada de video.
Casos de uso
En un flujo de trabajo de cifrado HLS estándar, la etiqueta #EXT-X-KEY especifica la URI para recuperar la clave de descifrado. Si esta URI es una dirección pública fija y desprotegida, cualquier persona que obtenga el archivo M3U8 puede descargar la clave y descifrar el contenido de video, lo que invalida el cifrado.
Esta función resuelve el problema al adjuntar un token de autenticación dinámico y verificable a cada solicitud de clave. Es ideal para escenarios que requieren control de acceso sobre las claves de cifrado HLS, tales como:
Video de pago y educación en línea: Para evitar que los usuarios compartan URL de M3U8 con personas que no han pagado, puede generar un parámetro de autenticación único para cada usuario que haya iniciado sesión. Esto garantiza que solo los usuarios autorizados puedan recuperar la clave de descifrado durante su periodo de validez.
Protección de derechos de autor en transmisiones en vivo: Para eventos deportivos importantes o transmisiones en directo, puede combinar parámetros de autenticación generados dinámicamente con la autenticación de URL de CDN. Esto permite un control de acceso detallado sobre la transmisión en vivo y previene eficazmente el hotlinking.
Funcionamiento
Un cliente envía una solicitud a su servidor de aplicaciones. Con base en su lógica de negocio, como el inicio de sesión de usuario, el servidor de aplicaciones genera un parámetro de autenticación con un periodo de validez y una firma (por ejemplo,
token=xxxx) y lo devuelve al cliente.El cliente agrega este parámetro de autenticación al final de la URL de solicitud del archivo M3U8 y envía una solicitud M3U8 a un punto de presencia (PoP) de CDN.
Antes de devolver el archivo M3U8, el PoP de CDN analiza su contenido, busca la etiqueta
#EXT-X-KEYy agrega el parámetro de autenticación de la URL de solicitud del cliente al final del atributoURIde la etiqueta.El cliente recibe el archivo M3U8 reescrito desde el CDN y envía una solicitud al servidor de claves mediante la nueva URI de clave, que ahora incluye el parámetro de autenticación.
El servidor de claves recibe la solicitud de clave, extrae el parámetro de autenticación de la URL y lo valida. Si la validación es correcta, devuelve la clave de descifrado. De lo contrario, deniega la solicitud.
Tras obtener la clave, el cliente descifra el flujo de video TS e inicia la reproducción.
Esta función no cifra el contenido de video. Antes de utilizar esta función, asegúrese de que los segmentos de video (archivos TS) en su servidor de origen estén cifrados según un estándar HLS, como AES-128. El archivo M3U8 original también debe contener la etiqueta #EXT-X-KEY correcta. Para obtener más información sobre el cifrado de video, consulte How to generate and encrypt an M3U8 file.
El servidor de aplicaciones y el servidor de claves se muestran aquí para ilustrar el flujo general. Debe implementarlos usted mismo para completar el proceso de autenticación de claves HLS.
La etiqueta
#EXT-X-KEYespecifica si el contenido está cifrado. Para obtener más información sobre las etiquetas de archivos M3U8, consulte What is in an HLS M3U8 file.
Procedimiento
Inicie sesión en la CDN console.
En el panel de navegación izquierdo, haga clic en Domain Names.
En la página Domain Names, busque el nombre de dominio objetivo y haga clic en Manage en la columna Actions.
En el panel de navegación del dominio, haga clic en Video.
-
En la sección M3U8 Encryption and Rewrite, active el interruptor M3U8 Encryption and Rewrite.
NotaDespués de habilitar M3U8 Encryption and Rewrite, el nombre del parámetro predeterminado es
MtsHlsUriToken. -
Opcional: Para modificar el nombre del parámetro y ajustarlo a su cliente, realice los siguientes pasos:
Haga clic en Modify junto a Custom Parameter Name.
-
En el cuadro de diálogo Custom Parameter Name, configure Parameter Name.
Si no especifica un valor, el nombre del parámetro será de forma predeterminada
MtsHlsUriToken.NotaLos nombres de parámetro distinguen entre mayúsculas y minúsculas. Asegúrese de que el nombre de parámetro que establezca coincida exactamente con el nombre de parámetro en las solicitudes del cliente. Por ejemplo, si la solicitud del cliente incluye el parámetro
MtsHlsUriTokeny usted configura el nombre de parámetro personalizado en la consola de CDN comomtshlsuritoken, la configuración no surtirá efecto. Haga clic en OK para completar la configuración.
Ejemplo
-
Acceda al archivo M3U8 acelerado por CDN en su navegador y agregue MtsHlsUriToken=tokenxxxxx al final de la solicitud. Ejemplo: http://<nombre de dominio acelerado por CDN>/video.m3u8?MtsHlsUriToken=tokenxxxxx
En las herramientas de desarrollador de su navegador, el panel Network muestra que la solicitud del archivo M3U8 incluye el parámetro personalizado, pero la solicitud de clave subsiguiente no lo incluye.
En la consola de CDN, habilite M3U8 Encryption and Rewrite. Si es necesario, puede establecer un nombre de parámetro personalizado (esta demostración utiliza el parámetro predeterminado
MtsHlsUriToken). En la consola de CDN, habilite la función M3U8 encryption and rewrite y configure Custom Parameter Name comoMtsHlsUriToken.-
Repita el paso 1. Acceda al archivo M3U8 acelerado por CDN en un navegador y agregue MtsHlsUriToken=tokenxxxxx al final de la solicitud.
En las herramientas de desarrollador de su navegador, en el panel Network, puede ver que la solicitud de la dirección de clave ahora incluye el parámetro personalizado.
La URL de solicitud del archivo de clave
encryption_key.keyincluye el parámetroMtsHlsUriToken=tokenxxxxx, y la respuesta tiene un código de estado 206 y un Content-Length de 16 bytes.
Preguntas frecuentes
¿Qué es el protocolo HLS?
HTTP Live Streaming (HLS) es un protocolo de medios de streaming basado en HTTP desarrollado por Apple. Divide un flujo de video en pequeños segmentos de Transport Stream (TS) y utiliza un archivo de texto con extensión M3U8 como lista de reproducción. Para iniciar la reproducción, un cliente primero descarga la lista de reproducción M3U8 y luego descarga cada segmento de medios en secuencia utilizando las URL que contiene.
¿Qué contiene un archivo M3U8 de HLS?
Etiquetas básicas de M3U8:
#EXTM3U: El encabezado del archivo. Debe ser la primera línea de la lista de reproducción.EXT-X-MEDIA-SEQUENCE: El número de secuencia del primer segmento TS. Normalmente es 0. En transmisiones en vivo, identifica el punto de inicio. Por ejemplo,#EXT-X-MEDIA-SEQUENCE:0.#EXT-X-TARGETDURATION: La duración máxima de un segmento de medios. Por ejemplo,#EXT-X-TARGETDURATION:10establece el máximo en 10 segundos.#EXT-X-ALLOW-CACHE: Indica si el cliente puede almacenar en caché los segmentos de medios. Valores válidos:#EXT-X-ALLOW-CACHE:YESy#EXT-X-ALLOW-CACHE:NO. Valor predeterminado: YES.#EXT-X-ENDLIST: Marca el final de la lista de reproducción.#EXTINF: Información adicional sobre un segmento de medios, como la duración y el ancho de banda. Formato:#EXTINF:<duration>,[<title>]. El valor antes de la coma es la duración del segmento, que no debe exceder el valor de#EXT-X-TARGETDURATION.#EXT-X-VERSION: El número de versión de la lista de reproducción M3U8.#EXT-X-DISCONTINUITY: Señala una interrupción entre los segmentos de medios anteriores y posteriores.#EXT-X-PLAYLIST-TYPE: Indica el tipo de flujo.#EXT-X-KEY: Especifica el método de descifrado para los segmentos de medios cifrados. Por ejemplo:#EXT-X-KEY:METHOD=AES-128,URI="https://example.com/video.key?token=xxx"utiliza cifrado AES-128. La clave se recupera desdehttps://example.com/video.key?token=xxx, se almacena localmente y se usa para descifrar los archivos TS subsiguientes.
¿Cómo generar y cifrar un archivo M3U8?
-
Genere una clave de cifrado.
Esta clave suele ser una cadena aleatoria de 16 bytes para el cifrado AES-128. Genere un archivo de clave con OpenSSL:
openssl rand 16 > encryption_key.key -
Prepare el archivo
key_info.txt. La herramienta de cifrado utiliza este archivo para cifrar archivos de video HLS.https://example.com/encryption_key.key /path/to/local/encryption_key.keyLa primera línea es la URL de la clave de cifrado generada en el paso 1. Se recomienda alojar el archivo en un servidor de origen OSS acelerado por CDN.
La segunda línea es la ruta absoluta del archivo de clave local.
-
Utilice
FFmpegpara generar y cifrar archivos de video HLS.ffmpeg -i input_video.mp4 -c:v copy -c:a copy -hls_time 10 -hls_key_info_file key_info.txt -hls_list_size 0 output_playlist.m3u8-i input_video.mp4: Especifica el archivo de video a convertir, como un video en formatoMP4.-c:v copy: Copia el flujo de video directamente sin recodificar.-c:a copy: Copia el flujo de audio directamente sin recodificar.-hls_time 10: Establece la duración de cada archivoTSen 10 segundos. Puede modificar esta configuración según la duración del video original.-hls_key_info_file key_info.txt: Especifica el archivo que contiene la información de la clave de cifrado.-hls_list_size 0: Establece el número de índices de archivosTSque se conservarán en el archivoM3U8. Un valor de0indica que se conservan todos los índices de archivos.ts.output_playlist.m3u8: El nombre del archivo de lista de reproducción HLS de salida (es decir, el nombre del archivoM3U8).
Guarde los archivos
TSyM3U8cifrados en un servidor, como un servidor de origen OSS acelerado por CDN. Luego, utilice un nombre de dominio acelerado por CDN en un navegador para acceder al archivoM3U8y habilitar la reproducción cifrada de videos que utilizan el protocoloHLS.