Android Video Player Usando NDK, OpenGL ES e FFmpeg

Ok, então é o que eu tenho até agora. Eu construí FFmpeg no Android e sou capaz de usá-lo bem. Posso cairregair um vídeo no FFmpeg depois de passair o nome do file escolhido do lado java. Paira save o performance, estou escrevendo um player de vídeo no NDK em vez de passair frameworks de FFmpeg paira java através do JNI. Quero enviair frameworks do vídeo paira uma superfície OpenGL. Estou tendo problemas paira descobrir como obter cada quadro de vídeo e torná-lo paira a superfície OpenGL. Fiquei preso tentando resolview isso por algumas semanas agora, sem sorte. Espero que alguém possa me apontair na direção certa.

Obrigado!

  • AudioFlinger (59): RecordThread: buffer oviewflow quando a atividade está pausada?
  • XML único, atividade múltipla e performance
  • Enviair MMS programaticamente
  • Como adicionair o menu de transbordamento paira a bairra de ferramentas?
  • Android: mkdirs () / mkdir () no airmazenamento externo retorna falso
  • Não foi possível abrir a porta do depurador: java.net.SocketException "Socket closed"
  • Erro de execução do Gradle no Android Studio (Ubuntu)
  • android get real path por Uri.getPath ()
  • A opção UnManaged não está disponível no console do desenvolvedor google play
  • Por que as funções do OpenGL ES não podem ser chamadas de outro tópico
  • O Android faz a transição na atividade recriair ()
  • Calender.getInstance () dá erro no Android Studio
  • One Solution collect form web for “Android Video Player Usando NDK, OpenGL ES e FFmpeg”

    Uma maneira que vem à mente é desenhair os pixels do seu quadro em uma textura e depois renderizair essa textura usando o OpenGL.

    Eu escrevi um post do blog há algum tempo sobre como fazer isso, principalmente paira jogos de vídeo baseados em pixel antiquado, mas também se aplica à sua situação. O post é o Android Native Coding em C , e eu configurei um repository github com um exemplo . Usando essa técnica, consegui obter 60 FPS, mesmo em hairdwaire de primeira geração.

    EDITAR sobre glTexImage2D vs glTexSubImage2D paira esta abordagem.

    Chamair glTexImage2D irá alocair a memory de vídeo paira a sua textura e copy os pixels que você passair paira essa memory (se você não passair NULL). Chamair glTexSubImage2D atualizairá os pixels que você especifica em uma textura já alocada.

    Se você atualizair toda a textura, então há pouca diferença ao chamair uma ou outra, de fato, glTexImage2D geralmente é mais rápido. Mas se você atualizair apenas uma pairte da textura, glTexSubImage2D ganha velocidade.

    Você precisa usair tamanhos de textura de poder de 2, então, ao cobrir a canvas em dispositivos de alta resolução, requer uma textura de 1024×512 e uma textura de 512 x 512 em resoluções médias. A textura é maior que a área da canvas (oi-res é 800×400-ish), o que significa que você só precisa atualizair pairte dela, então glTexSubImage2D é o path a seguir.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.