Hola a todos Todos los días se abren docenas de llamadas diferentes en nuestro soporte, desde preguntas simples “ayudan a configurar un clúster” hasta preguntas muy complejas “el flujo no funciona, el flujo a veces tartamudea”, pero hay preguntas de las cuales el ojo ya se contrae y cada empleado de la compañía puede responder en detalle.
Y dado que las preguntas no se detienen, lo que significa que puede responder aquí.
¿Por qué se retrasa el video?
Ya tenemos dos artículos en el blog (
uno ,
dos ) sobre este tema, léalos si está trabajando con un video, y aquí le daré una respuesta breve y completa:
La transmisión por Internet moderna es un
protocolo HLS . A veces DASH, pero esto no es importante, porque ambos están segmentados.
Como funciona La transmisión de video se "corta" en archivos pequeños (generalmente de 2 a 8 segundos, dependiendo de la dinámica del contenido), de 3 a 10 segmentos se acumulan y describen mediante una lista de reproducción especial, que se actualiza automáticamente cuando se elimina el segmento anterior y se agrega uno nuevo. Tan simple Más segmentos: mayor demora, mayor duración de cada segmento: mayor demora. 10-20 segundos es normal.
¿Por qué se necesita esto? ¿Por qué almacenar tantos videos en la memoria del servidor de video? La segmentación permite que el reproductor no reaccione a la inestabilidad de la conexión a Internet, no interrumpa el video al cambiar de una red Wi-Fi a una conexión móvil. Si el video no se hubiera preparado de antemano y empaquetado en archivos separados, entonces, a la menor falla o falta de ancho de banda, tendríamos artefactos de video en la pantalla, y la segmentación le da al jugador unos 4-20 segundos para restaurar la conexión del jugador y cargar nuevos datos.
¿Qué hacer si necesita un video sin demora? Elija un protocolo diferente si tiene la intención de organizar un chat web, controlar el helicóptero a través de Internet, mirar cámaras de video IP. Aquí hay ejemplos: WebRTC, MSE-LD, RTMP.
¿Cómo proteger el video? Pega solo en tu sitio
La tarea es muy simple: el video en el sitio debe protegerse para que no se inserte en otros sitios, nadie quiere pagar el tráfico de otra persona, el tráfico de video es costoso. Y el video puede ser privado y no debe ir más allá de su cuenta personal.
Siempre tengo una respuesta para todas esas solicitudes:
debe configurar Securelink en su sitio. La protección de contenido no es posible de manera unilateral: el sitio en sí debe generar enlaces, no puede simplemente tomar e insertar un enlace estático al sitio.
Securelink es una tecnología de protección de enlaces antigua y altamente efectiva. Muchos habruchitel conocen un módulo especial para Nginx: ngx_http_secure_link_module. No usamos Nginx, pero hay una implementación similar y no menos eficiente, la única diferencia está en el orden de los parámetros.
Como funciona El sitio genera un enlace
único de una sola vez basado en los datos del usuario. ¿Y qué sabe el servidor web sobre el cliente? Así es, esta es la dirección IP, User-Agent, Cookie, la URL solicitada. Si el cliente está autorizado, en las variables de sesión puede obtener otra información, por ejemplo, una ID de cliente única en la base de datos del servicio o, por ejemplo, el período de validez de la suscripción.
Recopilamos los parámetros en una línea y hash con su algoritmo favorito, por ejemplo, SHA1. Resulta un conjunto de personajes inútiles. Por ejemplo, el hash de la cadena "127.0.0.1Habr" sería: 70ebe94671dd21bd65f4a00dfd988adc83fe6bda.
Esta línea se transmitirá al transmisor de video y su tarea será verificar la validez del enlace, que fue generado por su sitio, no está "podrido" y no se pasa a terceros. No hay comentarios del sitio, por lo que el transmisor de video debe generar un hash utilizando los mismos datos que utilizó el sitio web. El transmisor de video también conoce la dirección IP del cliente, el contenido solicitado, pero de ninguna manera puede conocer la ID de usuario o la duración del enlace. Deberá transferir estos datos directamente al enlace y utilizar la clave secreta para que nadie pueda generar enlaces por sí mismo.
Tomamos la línea "127.0.0.1Habr1540327100SECRET" y obtenemos SHA1 99fe961672c52aa3033b98b545ec2cdec93bf515, y ahora formamos un enlace del formulario:
example.com/Habr/index.m3u8?token=99fe961672c52aa3033b98b545ec2cdec93bf515-1540327100example.com es su servidor de video, Habr es el video solicitado, index.m3u8 es el nombre estándar de la lista de reproducción HLS, el token de valor es la cadena del servidor web que generamos.
El video streamer extrae fácilmente de estos datos todo lo que se necesita para obtener el mismo hash: la dirección IP se lee desde la variable del servidor web, el contenido solicitado desde la URL, el tiempo de vida es del parámetro token, lo único que le falta es la clave secreta, tendrá que regístrese en el archivo de configuración y manténgalo en secreto.
No podrá enviar dicho enlace a un amigo ni abrirlo en otro navegador; hay una dirección IP en la fórmula de hash y no podrá reemplazar la vida útil, entonces el hash no coincidirá.
Trampas
Realmente quería describir en dos párrafos, pero en resumen no funcionó. Este es el primer problema: no todos están listos para profundizar en tales detalles, porque es mucho más fácil insertar un enlace estático. Tenemos
ejemplos listos en nuestro
sitio , por lo que no debería haber ningún problema.
A menudo sucede que el sitio y el servidor web determinan incorrectamente la dirección IP del cliente, esto es normal si se utilizan redes CDN, por ejemplo, CloudFlare. En este caso, debe tomar la dirección IP del encabezado correcto, es posible que necesite la ayuda del proveedor de CDN. Por ejemplo, CloudFlare tiene CF-Connecting-IP.
Tiempo equivocado El tiempo incorrecto en uno de los servidores, combinado con intentos de minimizar la vida útil del enlace, a menudo conduce a enlaces rotos. También sucede que el usuario deja la pestaña abierta durante varias horas y luego no puede reproducir el video debido a la corta vida útil.
Duración de enlace de 3 a 24 horas: esto es normal, están protegidos de todos modos y hay formas de limitar la cantidad de vistas simultáneas.
En lugar de un total
Cuéntanos en los comentarios cómo evitar este mecanismo de protección de enlaces.