Renderização personalizada de vídeo (Android)
Visão geral
Este tutorial explica passo a passo as etapas necessárias para fazer pequenas modificações no renderizador de vídeo utilizado por um Subscriber objeto. Você também pode usar as mesmas técnicas para modificar o renderizador de vídeo utilizado por um Publisher objeto (embora este exemplo ilustre apenas um renderizador personalizado para um assinante).
Configurando seu projeto
O código desta seção está disponível no projeto Basic-Video-Renderer-Java do exemplos-do-opentok-android-sdk repositório. Caso ainda não tenha feito isso, você precisará clonar o repositório em um diretório local. Na linha de comando, execute:
git clone git@github.com:opentok/opentok-android-sdk-samples.git
Abra o Renderizador Básico de Vídeo em Java projeto no Android Studio para acompanhar.
Explorando o código
Neste exemplo, o aplicativo usa um renderizador de vídeo personalizado para exibir uma versão do vídeo com as cores invertidas.
InvertedColorsVideoRenderer é uma classe personalizada que estende a BaseVideoRenderer classe (definida no SDK do OpenTok para Android). A BaseVideoRenderer A classe permite definir um renderizador de vídeo personalizado para ser usado por um editor ou assinante do OpenTok:
subscriber = new Subscriber.Builder(this, stream)
.renderer(new InvertedColorsVideoRenderer(this))
.build();
publisher = new Publisher.Builder(MainActivity.this)
.renderer(new InvertedColorsVideoRenderer(MainActivity.this))
.build();
O InvertedColorsVideoRenderer() O construtor define um renderer propriedade de um GLSurfaceView objeto. O aplicativo usa esse objeto para exibir o vídeo por meio do OpenGL ES 2.0. O renderizador para isso GLSurfaceView o objeto está definido como um MyRenderer objeto. MyRenderer é uma classe personalizada que estende GLSurfaceView.Renderer, e é usado para renderizar o vídeo para o GLSurfaceView objeto:
public InvertedColorsVideoRenderer(Context context) {
view = new GLSurfaceView(context);
view.setEGLContextClientVersion(2);
renderer = new MyRenderer();
view.setRenderer(renderer);
view.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
}
O onFrame() O método do renderizador de vídeo é herdado do BaseVideoRenderer classe. A BaseVideoRenderer.onFrame() O método é chamado quando o editor (ou assinante) envia um quadro de vídeo ao renderizador de vídeo. O InvertedColorsVideoRenderer Na implementação desse método, ele utiliza o buffer de imagem do quadro (YUV representação do quadro), passa-a para o displayFrame método do MyRenderer objeto e chama o requestRender() método do GLSurfaceView objeto:
@Override
public void onFrame(Frame frame) {
renderer.displayFrame(frame);
view.requestRender();
}
Para renderizar os quadros do vídeo, a classe de renderização utiliza shaders do OpenGL. Neste exemplo, o shader produz o efeito de cores invertidas; mais precisamente, isso é obtido por meio desta linha, que está dentro do fragmentShaderCode string:
"y=1.0-1.1643*(y-0.0625);\n"
Parabéns! Você concluiu o tutorial sobre renderização personalizada de vídeo para Android.
Você pode continuar experimentando e ajustando o código que desenvolveu aqui, ou conferir o Próximos passos abaixo.
Próximos passos
Quando terminar esta seção, continue desenvolvendo e aprimorando seu aplicativo OpenTok com estes recursos úteis:
- Noções básicas sobre a Video API — Se ainda não o fez, reserve alguns minutos para aprender exatamente como o OpenTok funciona
- Exemplos de código — uma coleção de aplicativos de exemplo que exploram diversos recursos e casos de uso do OpenTok
- Guias para desenvolvedores — documentação detalhada sobre todos os recursos e funcionalidades do OpenTok
- Tutoriais adicionais — guias passo a passo para a implementação de outros recursos e casos de uso do OpenTok
- Referência do SDK do Android — explore os métodos e eventos associados ao SDK do OpenTok para Android