GLSurfaceView + libmpv 播放视频时屏幕上只有单一颜色闪烁

问题描述 投票:0回答:1

我遇到了 GLSurfaceView + libmpv 的问题。在学习了 OpenGL ES 的一些基础知识之后,我开始在 Android 上实现一个视频播放器,如下所示:

  1. 起初我使用 SurfaceView + 默认的 Android MediaPlayer 类来播放视频并且它工作得很好。
  2. 然后我更改为 GLSurfaceView 但仍然是 MediaPlayer 类,这也没有问题。
  3. 接下来我使用了GLSurfaceView + libmpv。我可以听到视频播放,但屏幕上只有单一颜色闪烁。

据我所知,我认为我的着色器没有问题,因为我认为它很简单,如下所示:

    private final String VSH_CODE =
            "uniform mat4 uSTMatrix;\n"+
                    "attribute vec4 aPosition;\n"+
                    "attribute vec4 aTexCoord;\n"+
                    "varying vec2 vTexCoord;\n"+
                    "void main(){\n"+
                    "   vTexCoord = aTexCoord.xy;\n"+
                    "   gl_Position = aPosition*uSTMatrix;\n"+
                    "}";

    private  final String FSH_CODE =
            "#extension GL_OES_EGL_image_external : require\n"+
                    "precision mediump float;\n"+
                    "varying vec2 vTexCoord;\n"+
                    //"uniform mat4 uColorMatrix;\n"+
                    "uniform samplerExternalOES sTexture;\n"+
                    "void main() {\n"+
                    //" gl_FragColor = uColorMatrix*texture2D(sTexture, vTexCoord).rgba;\n"+
                    "   gl_FragColor = texture2D(sTexture, vTexCoord).rgba;\n"+
                    "}";

但我不知道下一步该怎么做才能更正我的申请。我是否必须使用 Renderdoc 或其他东西调试一些 GPU 内容?任何想法将不胜感激。

android glsurfaceview mpv
1个回答
0
投票

一个愚蠢的错误。

用GAPID调试后发现渲染贴图是1x1的

所以我所要做的就是在libmpv完成加载文件时调用

surfaceTexture.setDefaultBufferSize(width, height)
来设置正确的宽度和高度。

© www.soinside.com 2019 - 2024. All rights reserved.