本地视频始终高于其他视图

时间:2018-03-01 16:43:57

标签: sinch

我们正在测试sinch sdk for android(v3.12.3)并遇到以下问题:本地视图始终位于其他视图之上,即使它首先出现在视图层次结构中,并且应位于稍后的视图之下 - 我们希望将本地视频全屏和远程视频显示为画中画 - 在这种情况下,本地全屏视频覆盖了视图。考虑简单的布局

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/black">


<FrameLayout android:id="@+id/fullscreen_video_view"
             android:layout_width="match_parent"
             android:layout_height="match_parent"/>

<FrameLayout
        android:id="@+id/pip_video_view"
        android:layout_width="150dp"
        android:layout_height="112dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="16dp"
        android:layout_marginRight="16dp"/>

Pip-View排在最后,通常应该在Fullscreen-View之上。但是,如果我们将本地视频添加到全屏视图 - 它将涵盖Pip-View。将本地视频添加到Pip按预期工作 - Pip高于全屏。这个问题在Android版Android 6.0和Android设备(Android平板电脑和Android 4.4)

上都可以重现

我已经制作了截图来解释这个问题 enter image description here

2 个答案:

答案 0 :(得分:0)

我可以确认是这种情况,它将在未来的版本中得到解决。

答案 1 :(得分:0)

我找到了解决问题的方法。我不能称之为真正的解决方案,因为它依赖于从VideoController返回的某种类型的视图

    View remoteView = vc.getRemoteView();
    if (remoteView instanceof SurfaceView) {
            ((SurfaceView) remoteView).setZOrderOnTop(true);

    }

只要远程视图是SurfaceView类型(它是实际的GLSurfaceView),我们可以使用setZOrderOnTop使其显示在所有窗口的上方。我不能称之为真正的解决方案,因为无法保证从getRemoteView返回的视图将始终是SurfaceView(或将提供对surfaceview的访问)。例如,getLocalView返回surfaceview周围的包装器视图,因此没有合法的访问权限。我认为可能的解决方案是返回一个允许setZOrderOnTop和/或setZOrderMediaOverlay调用的“特殊”视图(您可以将方法命名为不同,以便更清楚地解释其含义)