2017-01-09 6 views
0

J'utilise l'API MediaCodec d'Android pour décoder et lire le flux vidéo H.264 en direct et brut. Mon appareil cible est un PC fonctionnant sous Android-x86 6.0. Le PC fonctionne sur un processeur Intel® Celeron® Processor N2930.Android MediaCodec h.264 Décodage de la surface Mode couleur Baguage

Lorsque je mets le décodeur en mode surface et restitue la vidéo à TextureView, je rencontre des problèmes de bande de couleur. Lorsque j'ai configuré le décodeur pour utiliser le mode ByteBuffer, puis enregistrer les images vidéo décodées dans un fichier, puis ouvrir le fichier sur un autre ordinateur, je n'ai trouvé aucun problème de bande de couleur avec les images vidéo.

À court d'idées, j'ai essayé d'implémenter ma propre vue OpenGL ES pour rendre la vidéo. Je l'ai eu au travail, mais la bande de couleur est toujours là. Ensuite, je sauvegarde les images décodées du rendu de vue OpenGL ES en utilisant GLES20.glReadPixels(), et quand j'ouvre ces images sur un autre ordinateur, je vois la bande de couleur dans les images.

Plus d'observations: 1) J'ai utilisé le lecteur vidéo fourni (lecteur vidéo) et MX Player pour lire certains fichiers vidéo. Le lecteur vidéo groupé et le lecteur MX (en mode de décodage HW) ont tous les deux rencontré le même problème de bande de couleur. 2) La lecture en mode de décodage SW dans MX Player ne montre aucune bande de couleur.

Essayé presque toutes les suggestions disponibles sur le web en vain. S'il vous plaît aider.

Merci d'avance.

+0

Dans quel format de framebuffer êtes-vous rendu pour la vue de surface? La bande indique normalement que vous effectuez un rendu dans une cible de rendu 16 bits (par exemple, RVB 565) plutôt que la cible 32 bits plus courante (RBGA8). – solidpixel

+0

@solidpixel ... Pour la vue de rendu OpenGL, j'ai utilisé le code sur http://code.metager.de/source/xref/android/4.0.3/cts/tests/src/android/media/cts/ VideoSurfaceView.java avec quelques modifications mineures pour se connecter au reste de l'application. Honteusement, je n'ai aucune idée où placer le format de framebuffer. S'il te plait, oriente moi dans la bonne direction. – mishow

+0

@solidpixel ... Par ailleurs, le rendu de la vidéo en utilisant TextureView ou même le SurfaceView présente le même problème de bande de couleur. Il semble que tant que j'utilise le décodeur en mode Surface, j'ai ce problème. En utilisant le décodeur en mode ByteBuffer, enregistrer l'image et l'afficher semble bien. – mishow

Répondre

0

Géré pour contourner le problème en utilisant MediaCodec en mode ByteBuffer (logiciel).