Android WebRTC自定义远程和本地视图

Ultimo_m

我正在Android项目中实现webrtc,并且基于github中的此示例

本示例使用libjingle库。这是创建视频渲染视图的方式:

        // Create video renderers.
        VideoRendererGui.setView((GLSurfaceView)videoView, new Runnable() {
            @Override
            public void run() {
                createPeerConnectionFactory();
            }
        });
        remoteRender = VideoRendererGui.create(
                REMOTE_X, REMOTE_Y,
                REMOTE_WIDTH, REMOTE_HEIGHT, scalingType, false);
        localRender = VideoRendererGui.create(
                LOCAL_X_CONNECTING, LOCAL_Y_CONNECTING,
                LOCAL_WIDTH_CONNECTING, LOCAL_HEIGHT_CONNECTING, scalingType, true);

我的问题是如何管理自定义remoteRenderlocalRender,这样我就可以改变它positionGLSurfaceView其宽度和高度

编辑:

我做了一个听众,我已经尝试过了:

    @Override
    public void onWidthHeightChange(int width, int height) {
        VideoRendererGui.update(remoteRender,
                REMOTE_X-width, REMOTE_X-height,
                REMOTE_WIDTH-width, REMOTE_HEIGHT-height, scalingType, false);
        if (iceConnected) {
            VideoRendererGui.update(localRender,
                    LOCAL_X_CONNECTED, LOCAL_Y_CONNECTED,
                    LOCAL_WIDTH_CONNECTED, LOCAL_HEIGHT_CONNECTED,
                    ScalingType.SCALE_ASPECT_FIT, true);
        } else {
            VideoRendererGui.update(localRender,
                    LOCAL_X_CONNECTING, LOCAL_Y_CONNECTING,
                    LOCAL_WIDTH_CONNECTING, LOCAL_HEIGHT_CONNECTING, scalingType, true);
        }
    }

当我将宽度和高度的值都设置为150时,会出现以下错误:

08-21 14:34:01.621    7636-7636/org.appspot.apprtc E/AppRTCDemoActivity﹕ Fatal error: glUseProgram: GLES20 error: 1281
    java.lang.RuntimeException: glUseProgram: GLES20 error: 1281
            at org.webrtc.GlUtil.checkNoGLES2Error(GlUtil.java:48)
            at org.webrtc.GlShader.useProgram(GlShader.java:123)
            at org.webrtc.GlRectDrawer.drawOes(GlRectDrawer.java:132)
            at org.webrtc.VideoRendererGui$YuvImageRenderer.draw(VideoRendererGui.java:371)
            at org.webrtc.VideoRendererGui$YuvImageRenderer.access$800(VideoRendererGui.java:131)
            at org.webrtc.VideoRendererGui.onDrawFrame(VideoRendererGui.java:722)
            at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1522)
            at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1239)

编辑2与解决方案:

当我查看mattm答案时,我知道他是正确的。

在搜索异常时,我发现它是libjingle库中抛出的异常我在第368、347行的VideoRendererGui.java找到了这段代码,为我的问题找到了解决方案。

添加视图高度和宽度时,根据以下代码,它必须在以下范围内:

  /**
   * Creates VideoRenderer.Callbacks with top left corner at (x, y) and
   * resolution (width, height). All parameters are in percentage of
   * screen resolution.
   */
  public static YuvImageRenderer create(
      int x, int y, int width, int height) {
    // Check display region parameters.
    if (x < 0 || x > 100 || y < 0 || y > 100 ||
        width < 0 || width > 100 || height < 0 || height > 100 ||
        x + width > 100 || y + height > 100) {
      throw new RuntimeException("Incorrect window parameters.");
    }

因此,只要我遵守这些规则,该方法VideoRendererGui.update(...便会正常工作

谢谢

马特

就像更改字段一样简单

  • 坐标:
    REMOTE_XREMOTE_YLOCAL_X_CONNECTINGLOCAL_Y_CONNECTING
  • 或尺寸:REMOTE_WIDTHREMOTE_HEIGHTLOCAL_WIDTH_CONNECTINGLOCAL_HEIGHT_CONNECTING

如果要在创建对象后更改渲染,请致电VideoRendererGui.update(remoteRender, ...)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章