2017-12-04 9 views
0

問題を表示するために小さなアプリケーションを作成しました。 https://github.com/Anton111111/MediaExtractorTestHuawei novaの表面にレンダリングするためのビデオを抽出しない

このアプリは、2本のビデオが含まれています。

これらは、異なる解像度(1440x720と2160x1080)と同じ動画です。

次に、このビデオをMediaExtractorで抽出し、ファイルにレンダリングしてみます。 結果はメモリのルート(2つのファイルv1440_720.pngとv2160_1080.png)で確認できます。

解像度2160x1080のビデオの場合は、底に緑のアーティファクトで抽出されています。そしてこのアーティファクトは、私はHuawei novaだけにしか見えません。

Huaweiの携帯電話にのみ問題はありますか?それを修正する方法は? Huawei社新星から

結果、あなたは、リンクで見ることができます: 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

答えて

0

私は解決策を見つけると思います。 これは、ビデオプレーヤーがビデオテクスチャをどのように処理するかの問題です。 AndroidでビデオをデコードするSurfaceを作成すると、実際のビデオよりも若干大きいSurfaceが作成されるデバイスもあります。次に、SurfaceTexture.getTransformMatrixで公開されているSurfaceに行列を設定します。

この問題を解決するために頂点に変換行列を使用するコードに変更を加えました。そして、それは動作します。 ここに新しい頂点シェーダがあります:

vec4 textureCoord = aTextureCoord; 
textureCoord.y = 1.0 - textureCoord.y; 
vTextureCoord = (uSTMatrix * textureCoord).xy; 
関連する問題