我需要硬件加速H.264解码的一个研究项目,以测试自定义的协议。
因为我有搜索在网络上,我已经找到了一些方法来在Android上进行硬件加速的视频解码。
- 使用的ffmpeg libstagefright( libstagefright的概述 ),或在OS直接使用libstagefright,喜欢这里 。
- 在特定的硬件平台使用OpenMax的 。 像这里关于三星设备和这里关于高通Snapdragon系列
- 有人提到PVplayer,
有些人“说” libstagefright是高通公司的同时家伙已经取得明显成功的唯一途径。
目前我不知道哪种方式可以工作 。 我现在有点困惑。 如果一切可以工作,我肯定会喜欢一个独立于硬件的方法。
正如我已经测试了H / W加速几个视频玩家的Galaxy Tab 7.7(3.2&Enxyos),VLC,摩博,摇滚,VPLAYER,岩石和主板做工精细,VLC不起作用,VPLAYER似乎有渲染错误花费其性能。
无论如何,我做了一个RockPlayer的“操作”,并删除了数据\数据\ com.redirecting \ RockPlayer的所有的.so库和软件解码崩溃而HW解码工作仍然罚款! 我不知道他们是怎么做的。 这在我看来,硬件加速可以是独立的硬件平台。
有人可以钉这个问题? 或提供额外的信息或更好的细节的内容?
为了回答上述问题,让我来介绍一下有关到Android几个概念
OpenMAX
Android使用的OpenMAX编解码器接口。 因此,所有的原生编解码器(硬件加速或以其他方式)提供的OpenMAX接口。 此接口使用的编解码器解码媒体使用怯场(播放框架)
NDK
的Android允许Java应用程序与底层C / C ++使用NDK本地库进行交互。 这就需要使用JNI(Java本地接口)。
现在来到你的问题, How to tap native decoder to decode raw video bitstream?
在Android 4.0的版本及以下的Android并没有提供在Java的层进入底层的视频解码器。 你需要编写本地代码直接与OMX解码器进行交互。 虽然这是可能的,这是不平凡的,因为它需要的OMX是如何工作的,以及如何使用NDK这个OMX映射到应用知识。
在4.1(果冻豆版本),看来Android通过Java API,提供在应用程序级访问硬件加速解码器。 关于在新的API的更多细节http://developer.android.com/about/versions/android-4.1.html#Multimedia
使用ExoPlayer ( github上 )。
它是一个谷歌发起的开源项目,它取代了平台的MediaPlayer的。 管道中的每个部件是可扩展的,包括样品源(H.264帧如何从自定义协议中提取)到呈现(到表面上,表面纹理,等等)。
它包括一个不错的显示使用演示应用程序 。
你可能会想尝试MediaExtractor和MediaCodec (他们也可在NDK - AMediaExtractor和AMediaCodec -看到播放的MP4这里样品原生编解码器 )