Comment utiliser le matériel de décodage vidéo accéléré sur Android?
j'ai besoin de l'accélération matérielle H. 264 décodage pour un projet de recherche, un test d'auto-protocole défini.
comme j'ai la recherche sur le web, j'ai trouvé quelques façons d'effectuer matériel-accéléré vidéo décodage sur Android.
- Utiliser ffmpeg libstagefright ( vue d'ensemble de libstagefright ) ou l'utilisation libstagefright dans l'OS directement, comme les ici .
- Utiliser OpenMax sur la plate-forme matérielle. comme ici à propos de samsung dispositif et ici à propos de Qualcomm Snapdragon série
- certains ont mentionné PVplayer ,
Certaines personnes "dire" libstagefright est la seule façon, tandis que Qualcomm gars-là ont fait le succès évidemment.
actuellement, Je ne suis pas sûr quel chemin pourrait fonctionner . Je suis un peu confus pour l'instant. Si tout pouvait fonctionner, je préférerais certainement une méthode indépendante du matériel.
comme j'ai testé quelques lecteurs vidéo de leur accélération H/W Avec Galaxy Tab 7.7(3.2 & Enxyos), VLC, Mobo, Rock, vplayer, rock et mobo fonctionne bien, VLC ne fonctionne pas, vplayer semble avoir un bug de rendu qui coûte sa performance.
de toute façon, j'ai fait une "opération" sur Rockplayer et supprimé tous ses .donc libs dans datadatacom.la redirection derockplayer, et le décodage de logiciels s'effondre alors que le décodage hw fonctionne encore très bien! Je me demande comment ils l'ont fait. Il me semble que l'accélération matérielle peut être indépendant des plates-formes matérielles.
Quelqu'un peut-il résoudre ce problème? Ou fournir une référence avec des informations supplémentaires ou de meilleurs détails?
3 réponses
pour répondre à la question ci-dessus, permettez-moi d'introduire quelques concepts liés à Android
OpenMAX
Android utilise OpenMAX pour l'interface codec. Par conséquent, tous les codecs natifs (hardware accelerated ou non) fournissent L'interface OpenMAX. Cette interface est utilisée par StageFright (Player framework) pour décoder les médias en utilisant le codec
NDK
Android permet aux Applications Java d'interagir avec les bibliothèques natives C/C++ sous-jacentes en utilisant NDK. Ce nécessite l'utilisation de JNI (Java Native Interface).
j'arrive à votre question How to tap native decoder to decode raw video bitstream?
dans la version Android 4.0 et ci-dessous, Android n'a pas fourni l'accès aux décodeurs vidéo sous-jacents à la couche Java. Vous auriez besoin d'écrire du code natif pour interagir directement avec le décodeur OMX. Bien que cela soit possible, ce n'est pas anodin car il faudrait connaître le fonctionnement D'OMX et la façon de relier cet OMX à une application utilisant NDK.
au 4.1 (Version Jelly Bean), Android semble fournir l'accès au matériel de décodeurs accélérés au niveau de l'application par le biais D'API JAVA. Plus de détails sur les nouveaux API à http://developer.android.com/about/versions/android-4.1.html#Multimedia
utiliser ExoPlayer ( github ).
C'est un projet open-source sponsorisé par Google qui remplace MediaPlayer de la plateforme. Chaque composant du pipeline est extensible, y compris la source de l'échantillon (Comment les trames H. 264 sont extraites de votre protocole personnalisé) au rendu (à une Surface, surface, etc.).
il comprend une belle application de démonstration montrant l'usage .
, Vous pourriez vouloir essayer MediaExtractor et MediaCodec (Ils sont également disponibles dans NDK - AMediaExtractor et AMediaCodec - voir l'exemple de la lecture .mp4 ici native-codec )