Kotlin
Criação de um renderizador personalizado (MyRenderer)
Agora você criará um renderizador personalizado que carregará os dados do quadro e os passará para as texturas do OpenGL. Ele será usado para aplicar o shader de fragmento de cores invertidas.
Abaixo está um esboço; você adaptará o código do shader mais tarde.
- Criar uma classe em Kotlin MyRenderer (pode ser interno ao InvertedColorsVideoRenderer)
Copiar
static class MyRenderer implements GLSurfaceView.Renderer {
private int viewportWidth;
private int viewportHeight;
ReentrantLock frameLock = new ReentrantLock();
Frame currentFrame;
public void displayFrame(Frame frame) {
frameLock.lock();
if (currentFrame != null) {
currentFrame.destroy(); // Disposes previous frame
}
currentFrame = frame;
frameLock.unlock();
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// Initialize shaders, textures, etc.
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
GLES20.glViewport(0, 0, width, height);
viewportWidth = width;
viewportHeight = height;
}
@Override
public void onDrawFrame(GL10 gl) {
// Upload YUV frame → textures
// Draw using shaders
// Implementation of YUV → RGB shader pipeline
// using inverted color math
}
}
- Vamos examinar o
displayFramemétodo. É importante observar que o quadro que o SDK envia para oRenderernoonFrameO método agora é propriedade doRenderer. Cabe a essa classe destruir o quadro quando ele não for mais necessário. É por isso que destruímos o quadro anterior quando um novo é carregado noRenderer
Copiar
public void displayFrame(Frame frame) {
frameLock.lock();
if (currentFrame != null) {
currentFrame.destroy(); // Disposes previous frame
}
currentFrame = frame;
frameLock.unlock();
}
Renderização básica de vídeo
Aprenda a usar um renderizador de vídeo personalizado em Kotlin para exibir uma versão em preto e branco de um fluxo de vídeo usando o SDK do Vonage Video para Android.
Etapas
1
Introdução2
Introdução3
Criando um novo projeto4
Adicionando o SDK do Android5
Configurando a autenticação6
Solicitação de permissões7
Criação do renderizador de vídeo invertido8
Criação de um renderizador personalizado (MyRenderer)9
Publicação de um fluxo na sessão10
Conectando o renderizador personalizado ao emissor/assistente11
Executando o aplicativo12
Conclusão