反転ビデオレンダラーの作成
InvertedColorsVideoRenderer はメインのカスタムレンダラです。このクラスは Vonage Video SDK に直接プラグインします。すべてのレンダリングを MyRenderer に委譲します。
主な責務
- を作成し、設定する。
GLSurfaceView - ビデオフレームを受信する
Vonage Video SDK(オンフレーム) - に渡す。
OpenGLレンダラ - ビデオのスケーリングを処理する("fit"、"fill")。
Pause/resumeレンダリング
- InvertedColorsVideoRendererで別のkotlinファイルを作成する。
について InvertedColorsVideoRenderer() コンストラクタは、レンダラーのプロパティを GLSurfaceView オブジェクトを使用します。アプリはこのオブジェクトを使用して、次のようにビデオを表示します。 OpenGL ES 2.0.このためのレンダラー GLSurfaceView オブジェクトが MyRenderer オブジェクトがある。 MyRenderer を拡張したカスタム・クラスである。 GLSurfaceView.Rendererへのレンダリングに使用される。 GLSurfaceView オブジェクト
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()
}
}
- 作成されたコードとその機能を調べる。
Vonage Video SDKコールonFrame()受信フレームごとに- にフレームを渡す。
OpenGLレンダラrenderer.displayFrame() - 私たちはこう尋ねる。
GLSurfaceViewすぐに描くrequestRender() - これにより、次のようにきれいに分けられる。
Vonage Video SDK論理とOpenGLロジックを使用する。
- を詳しく見てみよう。
onFrame()ビデオレンダラーのメソッド
から継承されている。 BaseVideoRenderer クラスである。その BaseVideoRenderer.onFrame() メソッドは、パブリッシャー (またはサブスクライバー) が動画レンダラーに動画フレームをレンダリングするときに呼び出されます。このメソッドは InvertedColorsVideoRenderer このメソッドの実装では、フレームの画像バッファ(フレームのYUV表現)を受け取り、それを displayFrame のメソッドを使用する。 MyRenderer オブジェクトを呼び出し requestRender() のメソッドを使用する。 GLSurfaceView オブジェクトがある:
@Override
public void onFrame(Frame frame) {
renderer.displayFrame(frame);
view.requestRender();
}
基本的なビデオレンダリング
Vonage Video Android SDK を使用して、Kotlin でカスタムビデオレンダラーを使用してビデオストリームの白黒バージョンを表示する方法を学びます。