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: