WebRTC VideoView 本地对等方的错误视图

And*_*oid 4 android webrtc android-videoview webrtc-android

我正在编写 WebRTC 解决方案,并在使用后置摄像头时在本地视图中遇到问题(错误旋转/错误视图)

<com.src.webrtc.android.VideoView
     android:id="@+id/main_view"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)

本地视图(错误视图)

在此处输入图片说明

远程视图(正确视图:以远程用户身份查看时)

在此处输入图片说明

sat*_*p91 6

我在 webRTC 上工作时遇到了同样的问题。我通过设置方法 setMirror(false) 修复了它。

这是一些代码:call_activity.xml

<org.webrtc.SurfaceViewRenderer
    android:id="@+id/fullscreen_video_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center" />

<org.webrtc.SurfaceViewRenderer
    android:id="@+id/pip_video_view"
    android:layout_height="144dp"
    android:layout_width="wrap_content"
    android:layout_gravity="bottom|end"
    android:layout_margin="16dp"/>
Run Code Online (Sandbox Code Playgroud)

在 CallActivity.java 中

SurfaceViewRenderer fullscreenRenderer = 
findViewById(R.id.fullscreen_video_view);
fullscreenRenderer.init(eglBase.getEglBaseContext(), null);
fullscreenRenderer.setScalingType(ScalingType.SCALE_ASPECT_FILL);
fullscreenRenderer.setEnableHardwareScaler(false /* enabled */);
//this code is used for rotation
fullscreenRenderer.setMirror(false);
Run Code Online (Sandbox Code Playgroud)

我在用 implementation 'org.webrtc:google-webrtc:1.0.28513'

更新:您可以在 VideoView.kt 中执行的操作是:

class VideoView : SurfaceViewRenderer{
constructor(context: Context) : super(context)

constructor(context: Context, attrs: android.util.AttributeSet?) : super(context, attrs)

fun init(rendererEvents: RendererCommon.RendererEvents?) {
    super.init(EglBaseProvider.getEglBase(this).eglBaseContext, rendererEvents)
    setMirror(false)
}

override fun release() {
    super.release()
    EglBaseProvider.release(this)
}

override fun setMirror(mirror: Boolean) {
    super.setMirror(mirror)
}
}
Run Code Online (Sandbox Code Playgroud)

或者

class VideoView : SurfaceViewRenderer{
constructor(context: Context) : super(context)

constructor(context: Context, attrs: android.util.AttributeSet?) : super(context, attrs)

fun init(rendererEvents: RendererCommon.RendererEvents?) {
    super.init(EglBaseProvider.getEglBase(this).eglBaseContext, rendererEvents)
    super.setMirror(false)
}

override fun release() {
    super.release()
    EglBaseProvider.release(this)
}
}
Run Code Online (Sandbox Code Playgroud)