我需要为研究项目进行硬件加速的H.264解码,以测试自定义协议。
由于我在网上搜索,我找到了几种在Android上执行硬件加速视频解码的方法。
有些人"say" libstagefright是高通公司明显取得成功的唯一途径。
目前我不确定哪种方式可行。我现在有点困惑。如果一切正常,我肯定更喜欢与硬件无关的方法。
由于我用Galaxy Tab 7.7(3.2& Enxyos),VLC,Mobo,Rock,vplayer,rock和mobo测试了几个视频播放器的H / W加速度,VLC无法正常工作,vplayer似乎有一个渲染错误,其成本。
无论如何,我在Rockplayer上做了'操作'并删除了data \ data \ com.redirecting \ rockplayer中的所有.so库,软件解码崩溃了,而hw解码工作仍然很好!我想知道他们是怎么做到的。 在我看来,hw加速可以独立于硬件平台。
有人可以解决这个问题吗?或者提供任何参考资料或更多详细信息?
答案 0 :(得分:22)
回答上述问题,让我介绍一些与Android相关的概念
OpenMAX
Android使用OpenMAX进行编解码器接口。因此,所有本机编解码器(硬件加速或其他)提供OpenMAX接口。 StageFright(播放器框架)使用此接口使用编解码器解码媒体
NDK
Android允许Java应用程序使用NDK与底层C / C ++本机库进行交互。这需要使用JNI(Java Native Interface)。
现在回答你的问题How to tap native decoder to decode raw video bitstream?
在Android 4.0及更低版本中,Android无法访问Java层的底层视频解码器。您需要编写本机代码才能直接与OMX解码器交互。虽然这是可能的,但它并不是微不足道的,因为它需要知道OMX如何工作以及如何使用NDK将此OMX映射到应用程序。
在4.1(Jelly Bean版本)中,Android似乎通过JAVA API在应用程序级别提供对硬件加速解码器的访问。有关http://developer.android.com/about/versions/android-4.1.html#Multimedia
的新API的更多详细信息答案 1 :(得分:1)
它是Google赞助的开源项目,取代了该平台的MediaPlayer。管道中的每个组件都是可扩展的,包括样本源(如何从自定义协议中提取H.264帧)到渲染(到Surface,SurfaceTexture等)。
它包含一个不错的demo app showing usage。
答案 2 :(得分:0)
您可能想尝试MediaExtractor和MediaCodec(它们也可以在NDK中使用 - AMediaExtractor和AMediaCodec - 请参阅此处播放.mp4的样本native-codec)