【问题标题】:WebRTC VideoView incorrect view for local peerWebRTC VideoView 本地对等点的错误视图
【发布时间】:2020-12-09 13:10:44
【问题描述】:

我正在编写 WebRTC 解决方案,但在使用后置摄像头时本地视图出现问题(旋转错误/视图不正确)

<com.src.webrtc.android.VideoView
     android:id="@+id/main_view"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />

本地视图(错误视图)

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

【问题讨论】:

    标签: android webrtc android-videoview webrtc-android


    【解决方案1】:

    我在开发 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"/>
    

    在 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);
    

    我正在使用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)
    }
    }
    

    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)
    }
    }
    

    【讨论】:

    • 谢谢!请检查我刚刚分享的我的 SDK 的 VideoView.kt 类的上述代码。
    • 看看我更新的答案。我希望这能解决您的轮换问题。
    • 非常感谢您使用 .setMirror(false) 修复了旋转问题
    • 刚问,相信你也想试试stackoverflow.com/questions/65439358/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    相关资源
    最近更新 更多