Reproducción de video
Transmitir video en una escena
Hay tres maneras diferentes de mostrar un video en una escena:
Subir un archivo de video como parte del contenido de la escena
Transmitir el video desde una fuente externa
Transmitir en vivo vía Decentraland cast
En todos los casos, necesitarás:
Una entidad con una primitive shape como un plano, cubo o incluso un cono.
A material con un
, expresado como un valor del enumasignado a su texturaA
VideoPlayercomponente para controlar el estado del video.
Consideraciones de rendimiento
Ten en cuenta que la transmisión de video exige un esfuerzo significativo por parte de la máquina del jugador. Se recomienda evitar reproducir más de un video a la vez.
Si demasiados videos se están reproduciendo al mismo tiempo en tu escena, algunos serán pausados por el engine. La prioridad para pausar una pantalla se determina en función de varios factores, incluyendo la proximidad al jugador, el tamaño y si la pantalla está en el campo de visión del jugador. El número máximo de videos simultáneos depende de la configuración de calidad del jugador.
Bajo: 1
Medio: 5
Alto: 10
También recomendamos iniciar la reproducción del video cuando el jugador esté cerca o realice una acción para hacerlo. Empezar a reproducir un video cuando tu escena está cargada en la distancia afectará innecesariamente el rendimiento mientras los jugadores visitan escenas vecinas.
Además, evita transmitir videos en muy alta resolución. No uses nada por encima de HD.
También es ideal reproducir videos en materiales Basic (unlit), para reducir la carga de rendimiento, como ocurre en todos los fragmentos de ejemplo abajo.
Mostrar un video
Las siguientes instrucciones se aplican a las tres opciones de mostrar video:
Crea una entidad que servirá como la pantalla de video. Dale a esta entidad un
MeshRenderercomponente para que tenga una forma visible.Crea un
VideoPlayercomponente, ya sea referenciando una URL de streaming o una ruta a un archivo de video. Aquí también puedes configurar eldetiene todas las demás animaciones que la entidad está reproduciendo actualmente. Para reproducir múltiples animaciones al mismo tiempo, modifica manualmente la propiedadestado del video y su volumen. Este componente puede asignarse a la entidad pantalla de video o a cualquier otra entidad en la escena.Crea un
, expresado como un valor del enumobjeto, y en suvideoPlayerEntitypropiedad asigna la entidad que posee elVideoPlayercomponente.Crea un
Material, asígnalo a la entidad pantalla y establece sutextureal, expresado como un valor del enumque creaste.
Este ejemplo usa un video que está almacenado localmente en una /videos carpeta en el proyecto de la escena:
Para usar un video desde una URL de streaming externa, cambia el paso 2 para que el src propiedad en el VideoPlayer componente haga referencia a la URL de streaming.
Vea Streaming usando Decentraland cast para detalles sobre cómo usar este tercer método alternativo.
Acerca del streaming externo
La fuente del streaming debe ser una https URL (http No se admiten URLs), y la fuente debería tener CORS policies (Cross Origin Resource Sharing) que permitan el acceso externo. Si este no es el caso, puede que necesites configurar un servidor para actuar como proxy y exponer el stream de manera válida.
Hay varias opciones para transmitir video. La opción más simple es usar un proveedor de hosting gestionado como Vimeo , Livepeer Studio o Serraform donde pagas una tarifa al proveedor para gestionar toda la infraestructura de streaming.
La otra alternativa recomendada es configurar tu propio servidor, usando software libre pero pagando el hosting en una plataforma como Digital Ocean o Cloudflare. Puedes desplegar algo como un Node Media Server, que proporciona la mayoría de lo que necesitas listo para usar.
Todas estas opciones tienen pros y contras para diferentes escenarios. Debes evaluar qué es mejor para ti teniendo en cuenta tus necesidades, habilidades técnicas y presupuesto.
Configurar OBS para un streaming exitoso
OBS es una herramienta popular y gratuita para gestionar tus streams.
Ya sea que uses la clave de stream de un recinto o tu propio servidor RTMP, tus ajustes en OBS son importantes para el éxito de tu stream. Debes apuntar a una conexión sólida y consistente.
Configuración simple de OBS
Se recomienda la siguiente configuración simple:
Bitrate 2500kbps (lo cual funcionará con todos los recintos de Decentraland)
Bitrate de audio 160kbps
Preset del codificador de video: Hardware NVENC
Codificador de audio AAC
Resolución máxima: 720 (cualquier mayor causa problemas en DCL)
Tasa de fotogramas 30fps
Consejos para nuevos transmisores
Las pruebas de sonido tempranas son esenciales para probar tu configuración con el recinto.
Pequeños errores como un dígito incorrecto en la clave de stream son los más propensos a arruinar la transmisión.
No excedas la resolución 720 ni un bitrate de 2500 kbps.
Transmisión en vivo
Puedes hacer streaming en vivo desde tu cámara o compartir tu pantalla usando la Transmisión en vivo función de los Admin tools smart item.
Este método de streaming usa la misma arquitectura de comunicaciones utilizada para comunicaciones en vivo entre jugadores. Es fácil de configurar y tiene mucha menos latencia que transmitir desde fuentes externas.
Agrega un Admin tools smart item a tu escena, así como un Video player smart item.
Publica tu escena, ya sea en un World o en Genesis City.
Entra en la escena como jugador con el permiso para usar los Admin tools.
Abre la consola de Admin, selecciona la pestaña Video luego selecciona la Live funcionalidad y haz clic en el Obtener clave de stream botón.
Copia la Server URL y Streaming key* a tu software de streaming (por ejemplo OBS).
Presiona la Activa el botón para comenzar a transmitir.
En lugar de agregar un smart item Video player a tu escena, también puedes usar la URL livekit-video://current-stream como la fuente de video, para reproducir el stream en tu escena. Aún necesitarás los Admin tools para obtener la clave de stream.
Materiales de video
La mayoría de las veces, querrás reproducir videos en un material Basic material, en lugar de un material PBR. Esto resulta en una imagen mucho más brillante y nítida y es mejor para el rendimiento.
Usualmente se recomienda reproducir videos en materiales Basic unlit, ya que esto es mejor para el rendimiento. Sin embargo, si quieres proyectar un video sobre un material PBR, ten en cuenta que las propiedades por defecto hacen que el video se vea bastante opaco. Puedes mejorar esto alterando otras propiedades del material. Aquí hay algunas configuraciones recomendadas para hacer que el video resalte más:
Acerca de los archivos de video
Se admiten los siguientes formatos de archivo:
.mp4
.ogg
.webm
Ten en cuenta que un archivo de video se suma al tamaño total de la escena, lo que hace que la escena tarde más en descargarse para los jugadores que entren en tu escena. El tamaño del video también podría hacer que superes el limitaciones de la escena, ya que tienes un máximo de 15 MB por parcela para usar. Recomendamos comprimir el video tanto como sea posible, para que sea menos problemático.
También recomendamos iniciar la reproducción del video cuando el jugador esté cerca o realice una acción para activarlo. Empezar a reproducir un video cuando tu escena está cargada en la distancia afectará innecesariamente el rendimiento mientras los jugadores visitan escenas vecinas.
Iniciar, pausar y detener un video
Para empezar a reproducir el video o pausarlo, establece el detiene todas las demás animaciones que la entidad está reproduciendo actualmente. Para reproducir múltiples animaciones al mismo tiempo, modifica manualmente la propiedad a true o false. Si detiene todas las demás animaciones que la entidad está reproduciendo actualmente. Para reproducir múltiples animaciones al mismo tiempo, modifica manualmente la propiedad está establecido en false, el video queda pausado en el último fotograma mostrado.
Puedes hacer que una pantalla sea conmutables añadiéndole un evento de puntero como se muestra abajo:
Para detener el video y devolverlo al primer fotograma, establece la position propiedad en 0. En el siguiente ejemplo, al hacer clic en el video se detiene.
Configurar el reproductor de video
Las siguientes propiedades opcionales están disponibles para configurar en el VideoPlayer componente:
detiene todas las demás animaciones que la entidad está reproduciendo actualmente. Para reproducir múltiples animaciones al mismo tiempo, modifica manualmente la propiedad: Determina si el video se está reproduciendo actualmente. Si es false, el video está en pausa.
📔 Nota: Solo puede haber un VideoPlayer componente activo a la vez en cada escena.
playbackRate: Cambia la velocidad a la que se reproduce el video. 1 totalVideoLengthvolume: Te permite cambiar el volumen del audio. 1 totalVideoLengthposition: Te permite establecer una posición de inicio diferente en el video. Se expresa en segundos desde el comienzo original del video. -1 por defecto, lo que hace que comience en el inicio real del video.loop: Booleano que determina si el video se reproduce continuamente en bucle, o si se detiene después de reproducirse una vez. false totalVideoLength
Reproducir múltiples videos
Para evitar problemas de rendimiento, cada escena solo está permitida reproducir una textura de video a la vez. Sin embargo, una escena puede reproducir múltiples copias de la misma textura de video en varias pantallas diferentes. Esto no está restringido, ya que impacta mucho menos en el rendimiento que reproducir videos separados. Para reproducir el mismo video en múltiples entidades, simplemente asigna la misma instancia del objeto de textura de video a los Material componentes de cada entidad pantalla.
Nota que en el ejemplo anterior, solo es necesario crear un VideoPlayer componente, que controla el estado de ambas pantallas de video. En este caso, el componente está asignado a la screen1 entidad, pero también podría asignarse a cualquier otra entidad en la escena, no necesariamente a una de las pantallas.
Eventos de video
Maneja fácilmente los cambios de estado en un video, para responder cuando un video comienza a reproducirse, se pausa, etc. Esto puede usarse por ejemplo para reproducir animaciones en perfecta sincronía con un video, asegurando que comiencen al mismo tiempo que el video.
Usa videoEventsSystem.registerVideoEventsEntity para definir una función que se ejecute cada vez que el estado del video asignado a una entidad cambie. Cada vez que el estado cambie, tu función puede comprobar el nuevo estado y responder en consecuencia.
El objeto videoEvent pasado como entrada a la función contiene las siguientes propiedades:
): El valor actual de la propiedad(numberseekpositionpor defecto. -1 por defecto, si el video no ha comenzado a reproducirse.state: El nuevo estado del video, expresado como un valor delVideoStateVideoStatus.NONEVideoState.VS_READYVideoState.VS_NONEVideoState.VS_ERRORVideoState.VS_SEEKINGVideoState.VS_LOADINGVideoState.VS_BUFFERINGVideoState.VS_PLAYINGVideoState.VS_PAUSED
videoLength(number si la duración es desconocida. -1 videoStatustimeStamp( number): Un lamport timestamp que se incrementa cada vez que el video cambia de estado.tickNumber(number): El momento en el que ocurrió el evento, expresado como ticks contados desde que la escena comenzó a ejecutarse.
Último evento de video
Consulta un video para su último cambio de estado usando videoEventsSystem.getVideoState(). Esta función siempre devuelve el último VideoEvent valor para el video.
Máscaras alpha en videos
Un truco útil para tener pantallas de video no rectangulares es aplicar una textura alpha encima de un plano. Puedes recortar parte del plano en la forma que desees.
Usa la siguiente imagen para recortar tu video en una forma circular, con esquinas transparentes.


📔 Nota: En versiones anteriores, la alphaTexture propiedad estaba presente solo en materiales PBR. Actualmente, solo funciona en materiales basic.
Reproducir un video en un modelo glTF
Puedes reproducir un video en un glTF model by using the GltfNodeModifiers componente. Ver Modificar materiales glTF para más detalles.
Esto te permite reproducir tus videos en cualquier forma, no solo en planos. Por ejemplo, puedes reproducir videos en una pantalla curva, o incluso en todo el cuerpo de un NPC.
El mapeo del video seguirá el mapeo UV original que usa el modelo. Esto significa que si el modelo tiene una textura mapeada a una parte específica del modelo, el video se mapeará a esa misma parte.
También puedes usar el GltfNodeModifiers componente para reproducir un video solo en una malla específica dentro del modelo. Por ejemplo, puedes reproducirlo en una pared específica de un edificio, aunque el modelo abarque todo el edificio. Ver Modificar materiales glTF para más detalles.
Audio espacial
Por defecto, el audio del video de un VideoPlayer componente es global, lo que significa que se oirá a un volumen consistente en toda tu escena. Si un jugador sale de la escena, no escuchará la transmisión en absoluto.
Para hacer el audio espacial, establece la spatial a true.
El audio del video ahora se escuchará desde la posición de la entidad que posee el VideoPlayer componente, y será más fuerte a medida que el jugador se acerque.
Controla el audio espacial con las siguientes propiedades:
spatialMinDistance: La distancia mínima a la que el audio se vuelve espacial. Si el jugador está más cerca, el audio se escuchará a volumen completo. 0 totalVideoLengthspatialMaxDistance: La distancia máxima a la que se escucha el audio. Si el jugador está más lejos, el audio se escuchará a volumen 0. 60 por defecto
📔 Nota: Algunos formatos de video no soportan audio espacial. Asegúrate de que el stream esté codificado en mp4, m4a, o mov.
Última actualización