Reprodução de Vídeo

Transmitir vídeo em uma cena

Existem três maneiras diferentes de mostrar um vídeo em uma cena:

  • Enviar um arquivo de vídeo como parte do conteúdo da cena

  • Transmitir o vídeo a partir de uma fonte externa

  • Transmitir ao vivo via Decentraland cast

circle-info

💡 Tip: No Scene Editor in Creator Hubarrow-up-right, você pode usar um Video Player Smart Itemarrow-up-right para uma maneira sem código de conseguir isso.

Em todos os casos, você precisará:

Considerações de desempenho

Tenha em mente que transmitir vídeo exige um esforço significativo da máquina do jogador. Recomenda-se evitar reproduzir mais de um vídeo por vez.

Se muitos vídeos estiverem sendo reproduzidos ao mesmo tempo na sua cena, alguns serão pausados pelo engine. A prioridade para pausar uma tela é determinada com base em vários fatores, incluindo proximidade ao jogador, tamanho e se a tela está no campo de visão do jogador. O número máximo de vídeos simultâneos depende das configurações de qualidade do jogador.

  • Baixa: 1

  • Média: 5

  • Alta: 10

Também recomendamos começar a reproduzir o vídeo quando o jogador estiver próximo ou executar uma ação para isso. Começar a reproduzir um vídeo quando sua cena é carregada à distância afetará desnecessariamente o desempenho enquanto jogadores visitam cenas vizinhas.

Também evite transmitir vídeos em resolução muito alta. Não use nada acima de HD.

Também é ideal reproduzir vídeos em materiais Basic (sem iluminação), para reduzir a carga de desempenho, como é o caso em todos os trechos de exemplo abaixo.

Mostrar um vídeo

As instruções a seguir se aplicam às três opções de exibição de vídeo:

  1. Crie uma entidade para servir como tela de vídeo. Dê a essa entidade um MeshRenderer componente para que ela tenha uma forma visível.

  2. Criar um VideoPlayer componente, referenciando uma URL de streaming ou um caminho para um arquivo de vídeo. Aqui você também pode definir o playing estado do vídeo e seu volume. Esse componente pode ser atribuído à entidade da tela de vídeo ou a qualquer outra entidade na cena.

  3. Criar um VideoTexture objeto, e em seu videoPlayerEntity propriedade atribua a entidade que possui o VideoPlayer component.

  4. Criar um Material, atribua-o à entidade da tela e defina seu textura até VideoTexture que você criou.

Este exemplo usa um vídeo que está armazenado localmente em uma pasta /videos no projeto da cena:

Para usar um vídeo de uma URL de streaming externa, altere o passo 2 para que o src propriedade no VideoPlayer componente referencie a URL de streaming.

Veja Streaming usando Decentraland cast para detalhes sobre como usar este terceiro método alternativo.

Sobre Streaming Externo

A fonte da transmissão deve ser uma https URL (http URLs não são suportadas), e a fonte deve ter políticas CORS (Cross Origin Resource Sharing)arrow-up-right que permitam acesso externo. Se este não for o caso, pode ser necessário configurar um servidor para agir como proxy e expor a transmissão de forma válida.

Existem várias opções para transmitir vídeo. A opção mais simples é usar um provedor de hospedagem gerenciado como Vimeoarrow-up-right , Livepeer Studioarrow-up-right ou Serraformarrow-up-right onde você paga uma taxa ao provedor para gerenciar toda a infraestrutura de streaming.

A outra alternativa recomendada é configurar seu próprio servidor, usando software gratuito mas pagando pela hospedagem em uma plataforma como Digital Oceanarrow-up-right ou Cloudflarearrow-up-right. Você pode implantar algo como um Node Media Serverarrow-up-right, que fornece a maioria do que você precisa pronto para uso.

Todas essas opções têm prós e contras para diferentes cenários. Você deve avaliar o que é melhor para você levando em conta suas necessidades, habilidades técnicas e orçamento.

Configurando o OBS para streaming bem-sucedido

OBSarrow-up-right é uma ferramenta popular e gratuita para gerenciar suas transmissões.

Quer você esteja usando a chave de stream de um local ou seu próprio servidor RTMP, suas configurações no OBS são importantes para o sucesso da sua transmissão. Você deve buscar uma conexão sólida e consistente.

Configuração simples do OBS

A seguinte configuração simples é recomendada:

  • Taxa de bits 2500kbps (o que funcionará com todos os locais do Decentraland)

  • Taxa de bits de áudio 160kbps

  • Preset do codificador de vídeo: Hardware NVENC

  • Codificador de áudio AAC

  • Resolução máxima: 720 (qualquer valor maior causa problemas no DCL)

  • Taxa de quadros 30fps

circle-exclamation

Conselhos para novos streamers

  • Checagens de som antecipadas são essenciais para testar sua configuração com o local.

  • Pequenos erros como um dígito errado na chave de transmissão são os mais prováveis de arruinar a transmissão.

  • Não ultrapasse a resolução 720 ou uma taxa de bits de 2500 kbps.

Transmissão ao vivo

Você pode transmitir ao vivo da sua câmera ou compartilhar sua tela usando o recurso Transmissão ao vivoarrow-up-right do Admin toolsarrow-up-right Reproduza um stream de áudio a partir de uma URL, usando o

Este método de transmissão usa a mesma arquitetura de comunicações usada para comunicações ao vivo entre jogadores. É fácil de configurar e tem muito menos atraso do que transmitir a partir de fontes externas.

  1. Adicione um Admin toolsarrow-up-right smart item à sua cena, assim como um Video playerarrow-up-right Reproduza um stream de áudio a partir de uma URL, usando o

  2. Publique sua cena, seja em um World ou em Genesis City.

  3. Entre na cena como jogador com permissão para usar os Admin tools.

  4. Abra o console Admin, selecione a aba Video , então selecione a funcionalidade Live e clique no Get Stream Key botão.

  5. Copie o Server URL e Streaming key* para o seu software de streaming (por exemplo OBS).

  6. Pressione a Activate botão para começar a transmitir.

Em vez de adicionar um smart item Video player à sua cena, você também pode usar a URL livekit-video://current-stream como a fonte de vídeo, para reproduzir a transmissão em sua cena. Você ainda precisará dos Admin tools para obter a chave de transmissão.

Materiais de Vídeo

Na maioria das vezes, você vai querer reproduzir vídeos em um material sem iluminação Basic materialarrow-up-right, em vez de um material PBR. Isso resulta em uma imagem muito mais brilhante e nítida e é melhor para desempenho.

Geralmente é recomendado reproduzir vídeos em materiais Basic sem iluminação, pois isso é melhor para o desempenho. No entanto, se você quiser projetar um vídeo em um material PBR, tenha em mente que as propriedades padrão fazem o vídeo parecer bastante opaco. Você pode melhorar isso alterando outras propriedades do material. Aqui estão algumas configurações recomendadas para fazer o vídeo se destacar mais:

circle-info

💡 Tip: Como o vídeo é uma textura adicionada a um material, você também pode experimentar outras propriedades dos materiais, como tingi-lo com uma cor ou adicionar outras camadas de textura, por exemplo para produzir um efeito de tela suja.

Veja materialsarrow-up-right para mais detalhes.

Sobre Arquivos de Vídeo

Os seguintes formatos de arquivo são suportados:

  • .mp4

  • .ogg

  • .webm

Tenha em mente que um arquivo de vídeo aumenta o tamanho total da cena, o que faz a cena demorar mais para ser baixada pelos jogadores que entram na sua cena. O tamanho do vídeo também pode fazer você ultrapassar o limite de limitações da cenaarrow-up-right, pois você tem um máximo de 15 MB por parcela para usar. Recomendamos comprimir o vídeo o máximo possível, para que seja menos problemático.

Também recomendamos começar a reproduzir o vídeo quando o jogador estiver por perto ou executar uma ação para dispará-lo. Começar a reproduzir um vídeo quando sua cena é carregada à distância afetará desnecessariamente o desempenho enquanto jogadores visitam cenas vizinhas.

Iniciar, pausar e parar um vídeo

Para começar a reproduzir o vídeo ou pausá-lo, defina o playing propriedade para true ou false. Se playing estiver definido como false, o vídeo fica pausado no último quadro exibido.

Você pode tornar uma tela alternável adicionando a ela um evento de ponteiro conforme mostrado abaixo:

Para parar o vídeo e retorná-lo ao primeiro quadro, defina a propriedade position para 0. No exemplo a seguir, clicar no vídeo o para.

Configurar o video player

As seguintes propriedades opcionais estão disponíveis para definir no VideoPlayer componente:

  • playing: Determina se o vídeo está atualmente sendo reproduzido. Se false, o vídeo está pausado.

circle-exclamation
  • playbackRate: Altera a velocidade com que o vídeo é reproduzido. 1 por padrão.

  • volume: Permite alterar o volume do áudio. 1 por padrão.

  • position: Permite definir uma posição inicial diferente no vídeo. É expresso em segundos a partir do início original do vídeo. -1 por padrão, o que faz começar no início real do vídeo.

  • loop: Booleano que determina se o vídeo é reproduzido continuamente em loop ou se para após ser reproduzido uma vez. false por padrão.

Reproduzir múltiplos vídeos

Para evitar problemas de desempenho, cada cena só tem permissão para reproduzir uma textura de vídeo por vez. No entanto, uma cena pode reproduzir várias cópias da mesma textura de vídeo em várias telas diferentes. Isso não é restrito, pois impacta o desempenho consideravelmente menos do que reproduzir vídeos distintos. Para reproduzir o mesmo vídeo em múltiplas entidades, simplesmente atribua a mesma instância do objeto de textura de vídeo aos componentes Material de cada entidade tela.

Observe que no exemplo acima, é necessário criar apenas um componente VideoPlayer que controla o estado de ambas as telas de vídeo. Nesse caso, o componente é atribuído à screen1 entidade, mas também poderia ser atribuído a qualquer outra entidade na cena, não necessariamente uma das telas.

Eventos de vídeo

Trate facilmente mudanças de estado em um vídeo, para responder quando um vídeo começa a reproduzir, é pausado, etc. Isso pode ser usado por exemplo para reproduzir animações em perfeita sincronia com um vídeo, garantindo que comecem ao mesmo tempo que o vídeo.

Use videoEventsSystem.registerVideoEventsEntity para definir uma função que é executada toda vez que o estado do vídeo atribuído a uma entidade muda. Toda vez que o estado muda, sua função pode verificar o novo estado e responder de acordo.

O objeto videoEvent passado como entrada para a função contém as seguintes propriedades:

  • currentOffset (maxDistance): O valor atual da propriedade position . Esta propriedade mostra segundos após o começo original do vídeo. -1 por padrão, se o vídeo ainda não começou a reproduzir.

  • state: O novo status do vídeo, expresso como um valor do VideoState . Este enum pode conter os seguintes valores possíveis:

    • VideoState.VS_READY

    • VideoState.VS_NONE

    • VideoState.VS_ERROR

    • VideoState.VS_SEEKING

    • VideoState.VS_LOADING

    • VideoState.VS_BUFFERING

    • VideoState.VS_PLAYING

    • VideoState.VS_PAUSED

  • videoLength (maxDistance ): O comprimento em segundos de todo o vídeo. -1 se o comprimento for desconhecido.

  • timeStamp ( maxDistance): Um lamport timestamp que é incrementado toda vez que o vídeo muda de estado.

  • tickNumber (maxDistance): O tempo em que o evento ocorreu, expresso como contagem de ticks desde que a cena começou a rodar.

Último evento de vídeo

Consulte um vídeo para sua última alteração de estado usando videoEventsSystem.getVideoState(). Esta função sempre retorna o último VideoEvent valor para o vídeo.

Máscaras alpha em vídeos

Um truque bacana para ter telas de vídeo não retangulares é aplicar uma textura alpha sobre um plano. Você pode recortar parte do plano na forma que desejar.

Use a imagem a seguir para cortar seu vídeo em uma forma circular, com cantos transparentes.



circle-exclamation

Reproduzir um vídeo em um modelo glTF

Você pode reproduzir um vídeo em um arquivo glTF model por meio do uso do GltfNodeModifiersarrow-up-right componente. Veja Modify glTF materialsarrow-up-right para mais detalhes.

Isto permite que você reproduza seus vídeos em qualquer forma, não apenas em planos. Por exemplo, você pode reproduzir vídeos em uma tela curva, ou até mesmo no corpo inteiro de um NPC.

O mapeamento do vídeo seguirá o mapeamento UV original que o modelo usa. Isso significa que se o modelo tiver uma textura mapeada para uma parte específica do modelo, o vídeo será mapeado para essa mesma parte.

Você também pode usar o GltfNodeModifiers componente para reproduzir um vídeo apenas em uma malha específica dentro do modelo. Por exemplo, você pode reproduzi-lo em uma parede específica de um edifício, mesmo que o modelo abranja o edifício inteiro. Veja Modify glTF materialsarrow-up-right para mais detalhes.

Áudio espacial

Por padrão, o áudio do vídeo de um VideoPlayer componente é global, significando que será ouvido com um volume consistente em toda a sua cena. Se um jogador sair da cena, ele não ouvirá a transmissão.

Para tornar o áudio espacial, defina o spatial propriedade para true.

O vídeo agora será ouvido a partir da posição da entidade que possui o VideoPlayer componente, e será mais alto à medida que o jogador se aproxima dele.

Controle o áudio espacial com as seguintes propriedades:

  • spatialMinDistance: A distância mínima na qual o áudio se torna espacial. Se o jogador estiver mais próximo, o áudio será ouvido em volume total. 0 por padrão.

  • spatialMaxDistance: A distância máxima na qual o áudio é ouvido. Se o jogador estiver mais distante, o áudio será ouvido em volume 0. 60 por padrão

circle-exclamation

Atualizado