【问题标题】:GlSurfaceView setZMediaOrder causing video to play outside its parentsGlSurfaceView setZMediaOrder 导致视频在其父母之外播放
【发布时间】:2017-10-20 11:05:36
【问题描述】:

案例 1:

GLSurfaceView
|
框架布局
|
纹理视图
|
视频录制

所以这里我有一个GLSurfaceView,根据用户输入,我在它上面添加一个正方形FrameLayout(使用布局参数设置尺寸),然后在这个新添加的FrameLayout 上添加TextureView然后录制视频,正如预期的那样,无论选择什么相机,我都会得到一个方形预览。

案例 2:

GLSurfaceView
|
框架布局
|
GLSurfaceView
|
视频回放

在录制视频后的 case-1 中,我通过从已添加的 FrameLayout 中删除之前的 TextureView 来添加另一个 GLSurfaceView。早些时候,我只能听到没有任何视频的播放声音,但后来我遇到了使用的示例
setZOrderMediaOverlay(true);

setZOrderOnTop(true)
现在视频播放了,但不是在其父级中播放,而是以 9/16 宽高比播放。如前所述,预期行为是方形视频(FrameLayout 的尺寸)。

如何在不超出其父级范围的情况下将新添加的视频置于背景视频之上。

【问题讨论】:

    标签: android glsurfaceview z-order


    【解决方案1】:

    我认为您需要检查媒体播放器的纵横比并据此设置,使用相对布局而不是框架布局并设置重力CENTER,并实现此代码:

    MediaPlayer.OnVideoSizeChangedListener mOnVideoSizeChangedListener = new MediaPlayer.OnVideoSizeChangedListener() {
    
            @Override
            public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
    
                setAspectRatio(mp, width, height);
    
            }
        };
    

    并根据此创建方法并设置视频布局参数:

      private void setAspectRatio(MediaPlayer mediaPlayer, int videoWidth, int videoHeight)
    {
        if(mediaPlayer != null)
        {
    
            DisplayMetrics displayMetrics = new DisplayMetrics();
            getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
            int height = displayMetrics.heightPixels;
            int width = displayMetrics.widthPixels;
    
            ViewGroup.LayoutParams videoParams = getLayoutParams();
    
    
            if (videoWidth > videoHeight)
            {
                videoParams.width = width;
                videoParams.height = width * videoHeight / videoWidth;
            }
            else
            {
                videoParams.width = height * videoWidth / videoHeight;
                videoParams.height = height;
            }
    
            // Commit params
            surfaceView.setLayoutParams(videoParams);
        }
    }
    

    【讨论】:

    • 抱歉,问题不在于调整表面大小。
    猜你喜欢
    • 1970-01-01
    • 2019-10-24
    • 2012-07-11
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多