Cómo servir transmisiones HLS desde S3 de forma segura (autorizada y autenticada)

Problema:

Estoy almacenando el número deHLS corrientes enS3 con estructura de archivo dada:

Video1
  ├──hls3
      ├──hlsv3-master.m3u8
      ├──media-1
      ├──media-2
      ├──media-3
      ├──media-4
      ├──media-5
  ├──hls4
      ├──hlsv4-master.m3u8
      ├──media-1
      ├──media-2
      ├──media-3
      ├──media-4
      ├──media-5

En mi usuarioAPI Sé exactamente qué usuario tiene acceso a qué contenido de video, pero también necesito asegurarme de que los enlaces de video no sean compartibles y solo accesibles para los usuarios con los permisos adecuados.

Soluciones:

1) Usar firmado / tempS3 urls para privadoS3 contenido. Cada vez que el cliente quiere reproducir un video específico, envía una solicitud a miAPI. Si el usuario tiene los permisos correctos, elAPI está generando una URL firmada y la devuelve al cliente que la está pasando al jugador.

El problema que veo aquí es que el contenido de video real se almacena en docenas de archivos de segmentos enmedios de comunicación-* directorios y realmente no veo cómo puedo protegerlos a todos: ¿tendría que firmar cada una de las URL de archivo de segmento por separado?

2)S3 El contenido es privado. Las solicitudes de transmisión de video realizadas por los jugadores pasan por miAPI o por separadoproxy inverso. Entonces, cada vez que el cliente decide reproducir un video específico,API / proxy inverso está recibiendo la solicitud, autenticando y autorizando y pasando el contenido correcto (archivos y segmentos de la lista de reproducción maestra).

En este caso todavía necesito hacerS3 contenido privado y accesible solo para miAPI / proxy inverso. ¿Cuál debería ser la forma recomendada aquí?Autenticación de descanso S3 a través de tokens?

3) Use encriptación con clave protegida. En este caso, todos los segmentos de video están encriptados y disponibles públicamente. La clave también se almacena enS3 pero no está disponible públicamente Cada solicitud de clave realizada por el jugador está autenticada y autorizada por miAPI / proxy inverso.

Estas son 3 soluciones que tengo en mente en este momento. No estoy convencido de todos ellos. Estoy buscando algo simple y seguro a prueba de balas. ¿Alguna recomendación / sugerencia?

Tecnología utilizada:

ffmpeg para codificación de video a diferentes velocidades de bits

bento4 para segmentación de video

Respuestas a la pregunta(1)

Su respuesta a la pregunta