不正确提取视频以在华为新星上渲染到表面

时间:2017-12-04 08:44:36

标签: android video opengl-es huawei

我创建了一个小应用来展示我的问题。 https://github.com/Anton111111/MediaExtractorTest

此应用包含两个视频:

这些是具有不同分辨率的相同视频(1440x720和2160x1080)。

然后我尝试使用MediaExtractor提取此视频并将其渲染为文件。 您可以在内存根目录中找到结果(两个文件v1440_720.png和v2160_1080.png)。

但对于分辨率为2160x1080的视频,我看到它底部是绿色神器。而这件神器我只在华为新星身上看到。

我想知道华为手机只有问题吗?以及如何解决它?

您可以在链接中看到来自华为新星的结果: enter image description here https://github.com/Anton111111/MediaExtractorTest/blob/master/result/v1440_720.png

enter image description here https://github.com/Anton111111/MediaExtractorTest/blob/master/result/v2160_1080.png

我如何提取你可以在文件中看到: https://github.com/Anton111111/MediaExtractorTest/blob/master/app/src/main/java/com/mediaextractortest/ExtractorMpeg.java

1 个答案:

答案 0 :(得分:0)

我想我找到了解决方案。 这是视频播放器处理视频纹理的问题。当Android创建Surface以解码视频时,某些设备会创建一个比实际视频略大的Surface。然后他们在Surface上设置了一个矩阵,该矩阵在SurfaceTexture.getTransformMatrix中显示。

我在代码中添加更改以在顶点中使用变换矩阵来解决此问题。它有效。 这是新的顶点着色器:

vec4 textureCoord = aTextureCoord;
textureCoord.y = 1.0 - textureCoord.y;
vTextureCoord = (uSTMatrix * textureCoord).xy;