Criação do renderizador de vídeo invertido
InvertedColorsVideoRenderer é o seu principal renderizador personalizado. Essa classe se integra diretamente ao SDK do Vonage Video. Ela NÃO realiza a renderização do vídeo por conta própria — ela delega toda a renderização ao MyRenderer.
Principais responsabilidades:
- Criar e configurar um
GLSurfaceView - Receber quadros de vídeo de
Vonage Video SDK(onFrame) - Passe-os para o
OpenGLrenderizador - Lidar com o redimensionamento de vídeo (“ajustar”, “preencher”)`
Pause/resumerenderização
- Crie um arquivo Kotlin separado com o InvertedColorsVideoRenderer
O InvertedColorsVideoRenderer() O construtor define uma propriedade do renderizador como um GLSurfaceView objeto. O aplicativo usa esse objeto para exibir o vídeo por meio de OpenGL ES 2.0. O renderizador para isso GLSurfaceView o objeto está definido como um MyRenderer objeto. MyRenderer é uma classe personalizada que vamos criar, que estende GLSurfaceView.Renderer, e é usado para renderizar o vídeo para o GLSurfaceView objeto
class InvertedColorsVideoRenderer(private val context: Context) : BaseVideoRenderer() {
private val view: GLSurfaceView
private val renderer: MyRenderer
interface InvertedColorsVideoRendererMetadataListener {
fun onMetadataReady(metadata: ByteArray)
}
init {
view = GLSurfaceView(context)
view.setEGLContextClientVersion(2)
renderer = MyRenderer()
view.setRenderer(renderer)
view.renderMode = GLSurfaceView.RENDERMODE_WHEN_DIRTY
}
override fun onFrame(frame: Frame) {
renderer.displayFrame(frame)
view.requestRender()
}
override fun setStyle(key: String, value: String) {
if (BaseVideoRenderer.STYLE_VIDEO_SCALE == key) {
when (value) {
BaseVideoRenderer.STYLE_VIDEO_FIT -> renderer.enableVideoFit(true)
BaseVideoRenderer.STYLE_VIDEO_FILL -> renderer.enableVideoFit(false)
}
}
}
override fun onVideoPropertiesChanged(videoEnabled: Boolean) {
renderer.disableVideo(!videoEnabled)
}
override fun getView(): View {
return view
}
override fun onPause() {
view.onPause()
}
override fun onResume() {
view.onResume()
}
}
- Explore o código criado e veja o que ele faz.
Vonage Video SDKchamadasonFrame()para cada quadro recebido- Entregamos a moldura ao
OpenGLrenderizadorrenderer.displayFrame() - Pedimos
GLSurfaceViewpara sortear imediatamenterequestRender() - Isso estabelece uma separação clara entre
Vonage Video SDKlógica eOpenGLlógica.
- Vamos dar uma olhada mais de perto no
onFrame()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 pega o buffer de imagem do quadro (representação YUV do quadro) e o passa 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();
}
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.