Skip to content

NeawStreamV-player

Choose a tag to compare

@WykosVx WykosVx released this 22 Jun 15:03
9cfd1a7

Magnifying Glass Tilted Left Optimizaciones Técnicas: Estabilización de Streaming

Durante el desarrollo de Neaw Stream, nos enfrentamos a dos desafíos críticos que afectaban la fluidez: el tearing (desgarro de imagen) y una gestión incorrecta del búfer inicial que causaba saltos de tiempo (reproducción fuera del segundo 00:00).

Compass 1. El Bug del Minutero: Inicio Forzado en 00:00

El problema: Al abrir un stream, el reproductor comenzaba a "contar" tiempo mientras la pantalla de carga (Gato) estaba activa. Cuando el Gato desaparecía, el vídeo intentaba saltar (seek) al tiempo real del stream, provocando un retraso, distorsión de audio y una carga inestable.

La solución:
Implementamos una lógica de "Inicio en Pausa":

Forzamos al reproductor a abrir el stream con pause: yes y start: 0.

Solo cuando el Future.delayed de 10 segundos termina, ejecutamos _player!.seek(Duration.zero) seguido de un platform.setProperty('pause', 'no').

Esto garantiza que, independientemente de la velocidad de conexión, el usuario siempre comience a ver el contenido desde el frame inicial.

Firecracker 2. Eliminación de Tearing (Desgarro de Pantalla)

El problema: El tearing ocurría porque el procesador de la TV Box intentaba sincronizar el vídeo basándose en el audio de forma muy agresiva, generando conflictos con el refresco de pantalla del televisor.

La solución:
Optamos por una configuración de sincronización "suave":

video-sync: audio-adrop: En lugar de forzar el tiempo, esta opción permite al reproductor descartar frames (adrop) si la sincronización se pierde, protegiendo la integridad del audio y evitando el desgarro.

interpolation: no: Desactivamos la interpolación de cuadros. Aunque suena bien en teoría, en TV Boxes de gama media/baja, intentar "inventar" cuadros en tiempo real es la causa número uno de cortes horizontales (tearing).

framedrop: decoder: Dejamos que el decodificador de hardware gestione qué frames mostrar, liberando al procesador de la tarea de renderizado forzado.

High Voltage 3. Configuración de Buffer "Agresivo pero Estable"

Para asegurar que el "Gato" realmente cumpliera su función de estabilizador, configuramos el buffer para que sea un almacén de seguridad:

Aumentamos cache-initial a 5000 (5 segundos) para asegurar un piso mínimo de datos.

Utilizamos cache-pause-initial: yes, lo que impide que el vídeo intente arrancar hasta que tengamos los 5 segundos de datos sólidos en memoria.

En la actualización mas reciente e añadido una animación.