Tecnología de transmisión progresiva, o cómo ver video 4k a través de la red, sin frisos



Hoy en día, no se puede sorprender a nadie con la velocidad de Internet de 100 Mbit / s, pero hay un problema sobre cómo usarlo. Todas las operaciones básicas no cargan completamente la red. Al mismo tiempo, los formatos pesados ​​de audio y video 4k-8k que desea ver en línea son más populares. Y mirando la alta velocidad de Internet, surge una pregunta lógica: ¿por qué no? ¿Cómo dominar la velocidad máxima proporcionada por el proveedor? Tanto del lado del cliente como del lado del servicio. Considere todos estos problemas en el artículo.

Hice un producto de software realmente bueno y quiero contar con más detalle cómo se organiza todo allí. Hay muchas nuevas tecnologías. Quizás porque nadie ha inventado nada en esta industria durante mucho tiempo, y ha llegado el momento. Este artículo no es solo para desarrolladores, sino también para personas comunes. Traté de explicar todo lo más simple posible.

1. Comencemos con los fundamentos básicos de las tecnologías actuales de transferencia de datos.
Existe una gran brecha en el conocimiento de muchas personas sobre algoritmos de transferencia de datos de alta velocidad: más de 10 Mbit / s ... Vamos a llenar estos vacíos:

Espacio # 1. El problema es que la totalidad de las tecnologías de transmisión de radio ahora se centra en la transmisión continua de datos, como el mejor escenario.

Todo lo que se transmite a través de wi-fi \ 3G \ 4G e incluso por cable se transmitirá más rápidamente si la transmisión es constante, incluso a una velocidad menor que la máxima. Esto será mucho más rápido que transmitir de forma intermitente, pero a la velocidad máxima.

Razones:

  • para reanudar la comunicación, se agrega más información de servicio al tráfico;
  • Al reanudar la comunicación, el servidor puede reducir la calificación del cliente y proporcionar datos a una velocidad menor (posiblemente debido a la aparición de otros clientes), o no hacerlo en absoluto. Incluso en una red wifi doméstica, el enrutador puede reducir la clasificación, por ejemplo, debido a una aspiradora wi-fi. Es decir Esto se aplica a todas las redes donde hay más de 2 clientes. En general, casi para todos :-)

Espacio # 2. Al copiar datos, cualquier programa utiliza un tipo de "depósito" que extrae datos del origen y los transfiere al destino. Por lo tanto, este segmento, dependiendo de la velocidad de transferencia de datos, debe ser de diferentes tamaños . Es fácil de entender: si saca un cubo de agua con una cucharadita, tomará mucho más tiempo que sacar una taza.

Espacio # 3. Para aumentar la velocidad de descarga de datos a través de la red, se debe usar RAM. Los milisegundos más pequeños de retraso al registrar los datos entrantes se vierten en segundos, minutos y horas. Para evitar que esto suceda, primero debe escribir datos en la RAM y luego en un "depósito" más voluminoso en un medio permanente (disco duro). De lo contrario, la velocidad de transferencia de datos disminuirá drásticamente.

Esto es suficiente para copiar el archivo.

2. Estas brechas son solo la punta del iceberg. Con la transferencia normal de archivos esto es suficiente, pero ¿qué pasa si nuestro archivo es multimedia y debemos comenzar a reproducirlo en línea? Un archivo multimedia moderno no puede caber completamente en la RAM, por lo que debe considerar guardarlo en el disco.

La mejor estrategia se construye a partir de lo anterior sobre espacios:

  • la carga de datos debe ocurrir independientemente de la reproducción, continuamente;
  • Para garantizar el rebobinado, es necesario crear otra secuencia de carga de datos;
  • Para superar el friso al inicio, debido a la recepción de datos técnicos (códecs, etc.), es necesaria la precarga. Empíricamente, encontré la fórmula: el tamaño de todo el archivo es * 0.002 o 0.2%.

Esto es suficiente para reproducir archivos Flac.

3. Resulta que para la transmisión en línea, que utilizará racional y completamente nuestro canal de comunicación, necesita RAM y espacio en disco. Sin esto, el canal no se utilizará por completo.

¡Y aquí comienza la ramificación de los algoritmos de carga de datos! Sin detalles técnicos, los daré en un volumen aproximado:

  • Para que los datos no se descarguen dos veces, es necesario hacer una colisión de las transmisiones. Es decir Si comenzamos la pista y rebobinamos rápidamente hacia el medio, entonces la primera secuencia, que llega al medio, debería interrumpir su trabajo.
  • para que los datos no se descarguen dos veces, no se debe crear una secuencia si los datos ya están cargados.
  • Para una reproducción normal, es necesaria una lógica compleja de interacción entre la transmisión del reproductor y las transmisiones que descargan datos.

Hice todo esto y un poco más. Resultó absolutamente fabuloso. Los datos vuelan y la reproducción no se interrumpe. Los archivos Flac se descargaron completamente a 1-3 segundos de reproducción. Y eso fue suficiente para reproducir video Full HD.

4. El problema es que nuestros archivos multimedia son muy diferentes en tamaño. Y con las películas 4K Blu-ray, que pesan entre 80 y 120 GB, nada funcionó. El jugador creó 15 hilos al principio, y todos compartieron la velocidad, que, por supuesto, no era suficiente para el hilo principal, que el jugador estaba esperando. Los datos se cargaron a la velocidad máxima, sí ... descargaron el canal completo, pero el video 4K se colgó y se reprodujo más lento que la presentación de diapositivas. Resulta que muchas transmisiones son dañinas para el video 4k, pero ¿dónde está el borde después del cual los beneficios en Full HD se convirtieron en daños en 4k?

Como resultado, todo descansaba en la velocidad del canal. Para optimizar los hilos, necesita saber dos cosas:

a) La velocidad requerida para la reproducción, que se calcula: (tamaño / duración del archivo en segundos) * 8.

b) La velocidad de carga de datos por la transmisión principal con la que el jugador está trabajando actualmente.

Si gestionamos la carga de datos, definitivamente tenemos la oportunidad de medir la velocidad de descarga. Ahora cada hilo conocía su velocidad (en Mbps) y esto no impone costos adicionales en el rendimiento. Asegúrese de identificar en qué transmisión está trabajando actualmente el reproductor. Todo comienza en el modo habitual de subprocesos múltiples. Pero tan pronto como el reproductor calcula la duración del archivo multimedia en segundos y transmite estos datos, todas las transmisiones obtienen una velocidad fija y necesaria para la reproducción. Inmediatamente después de esto, todos los flujos (excepto el principal) comparan la velocidad necesaria con la velocidad de la corriente principal y si su velocidad es menor, se detienen. Además, el hilo principal aumenta lentamente su velocidad, y tan pronto como excede la velocidad necesaria dos veces (como lo hice), detiene todos los flujos secundarios desde la pausa.

Según las observaciones, luego, después de un tiempo, la velocidad de la transmisión principal vuelve a caer y todas las transmisiones secundarias entran en pausa nuevamente, y así hasta que se descargan los datos o se completa la reproducción. Una estrategia tan flexible, cuando la carga de datos es paralela y, si es necesario, comprimida en un flujo, descarga completamente el canal de comunicación y al mismo tiempo asegura la descarga más rápida posible de los datos necesarios para la reproducción de datos. Esta estrategia funciona igualmente bien en archivos de 10 MB y 100 GB. Para jugar en la red sin pérdida, es imposible encontrar algo mejor. Si tiene alguna sugerencia, me complacerá analizarla en los comentarios.

Adecuado para reproducir archivos multimedia de cualquier volumen 4k-8k.

La transmisión progresiva es el tipo más rápido de transmisión cuando se transmiten datos en su calidad original. Para aumentar la velocidad de transferencia de datos, utiliza RAM y subprocesos múltiples. Los datos se cargan de forma asíncrona en el flujo de reproducción, pero con una interacción activa con ellos. Durante la reproducción, se mide la velocidad de adquisición de datos y el número de transmisiones activas se adapta al canal de datos disponible.
En este momento en el mundo hay una gran tendencia a aumentar la cantidad de videos de alta resolución, y la popularidad de los dispositivos para reproducirlos está creciendo.


Fuente www.vox.com

El video de velocidad de bits 4k es grande, pero no demasiado alto. El códec VP9 más eficiente de hoy comprime video 4k a 15 Mbps. con audio sale aproximadamente 15.5. Una película de Blu-ray de 100 GB tiene una tasa de bits de aproximadamente 60 Mb / s ... Cualquiera en el mundo que quiera ver videos en 4K tiene estas velocidades de Internet. ¡Esto significa que ahora se pueden ver 4k videos en línea!

A pesar de la simplicidad del algoritmo descrito anteriormente, la implementación parece muy complicada. Las tecnologías de transmisión con deterioro en la calidad del video y el audio se ven obligadas a estropear el contenido debido a la falta de implementación del algoritmo de transferencia de datos correcto. Supongo que muchas personas y empresas tienen (arriba) lagunas de conocimiento y, por supuesto, dificultades para implementar este algoritmo. Por lo tanto, escribió un artículo para simplificar la comprensión de este método de transmisión.

Será un poco más difícil hacer este algoritmo con derechos de autor, pero en general también es posible. Al guardar en el disco y leer, es necesario cifrar los datos. Parece una acción enemiga contra el usuario, pero qué hacer. Algunas compañías están haciendo esto.

Ahora veamos las desventajas de la transmisión convencional, en comparación con la progresiva:

  • es imposible precargar el siguiente archivo \ para predecir y preparar la siguiente acción;
  • incluso con una desconexión temporal de Internet / interrupciones en la velocidad, aparecerá un friso notable de sonido / imagen;
  • el canal de comunicación no se utiliza por completo y la mitad del tiempo de reproducción está inactivo, en un momento en que todavía hay muchos datos para cargar;
  • la imposibilidad de reproducir video 4k-8k, incluso a través de wi-fi sin frisos. Las ráfagas constantes de comunicación y los saltos de velocidad al máximo no pueden soportarlo, incluso el wifi doméstico en toda la película es de 2 horas o más;
  • esto impone una carga aún mayor cuando se reproduce contenido de 4k, ya que el reproductor necesita mantener en RAM de 200-300 MB de datos de video (a la velocidad requerida de 60 Mbps). Cuando se reproduce a través de un algoritmo de transmisión progresiva, esto ya no es necesario, ya que la reproducción es desde un disco, no a través de una red.

Según estos puntos, está claro qué transmitir, como antes, ya no es posible. Por supuesto, puede aumentar la velocidad \ memoria \ caché diez veces, pero por qué, si las velocidades de hoy ya son suficientes y el problema radica en los algoritmos. Los malos algoritmos, tarde o temprano, se paralizan. Hoy en día, la transmisión progresiva es la única tecnología que le permite ver de manera estable y cómoda películas de 4k 100 Gigabytes en línea.

Como ejemplo de cómo funciona la tecnología, escribí una aplicación multimedia: el reproductor de la Biblioteca de Medios . Es compatible con todos los formatos. Para demostrar las capacidades que necesita para ejecutarlo. Abra el sitio de demostración y vaya al árbol de directorios "Películas (TOP) / 4k películas". Allí puede seleccionar cualquier película y verla. Para admitir todos los formatos, debe cambiar el módulo del reproductor de ExoPlayer a VlcPlayer.
En este escenario, se utilizarán todos los algoritmos de adquisición de datos anteriores. Mi aplicación admite los siguientes protocolos: nmdc \ http \ ftp \ samba, así como la nube Mega.nz.

Los archivos de video de 4K con un peso de 100 GB se reproducen con retrasos mínimos y se descargan a la memoria a la velocidad más alta posible. Puede precargar más datos simplemente haciendo una pausa, pero esto generalmente no es necesario. La reproducción siempre es estable, si no es estable, la velocidad del canal está cerca de la velocidad necesaria para la reproducción.

Debido a las brechas descritas anteriormente, las políticas de las empresas más grandes no se están desarrollando de la manera correcta, lo que ralentiza el progreso y, a menudo, impide el uso completo de los dispositivos y canales de comunicación disponibles.

La aplicación permite guardar el caché en medios externos, pero debido a la extraña complicación del acceso a medios externos desde Google, actualmente es compatible principalmente con dispositivos Samsung y Android versión 5.0+. En el futuro, aparecerá soporte completo para medios usb externos.

En general, el algoritmo mejora significativamente la calidad y la velocidad de descarga de datos cuando se transmite, tanto archivos pequeños de 30-50 MB como grandes de 50-120 GB.

En perspectiva se puede usar:

  • para reproducción de alta calidad de contenido multimedia 4k-8k en teléfonos móviles, televisores y otros dispositivos;
  • en realidad virtual para mostrar escenas volumétricas en alta resolución;
  • en combinación con protocolos peer-to-peer parecidos a torrent ;
  • para reproducción de música de alta calidad en alta resolución en cualquier dispositivo. Las pruebas experimentales mostraron que 2 Mbps de un canal de comunicación inestable es suficiente para esto.

Source: https://habr.com/ru/post/452766/


All Articles