Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android硬件加速H264流视频解码器_Android_H.264_Android Mediacodec_Hardware Acceleration_Stagefright - Fatal编程技术网

Android硬件加速H264流视频解码器

Android硬件加速H264流视频解码器,android,h.264,android-mediacodec,hardware-acceleration,stagefright,Android,H.264,Android Mediacodec,Hardware Acceleration,Stagefright,我正在开发一个Android硬件加速视频解码器,用于实时解码H264附件B流。经过一番研究,我似乎需要把手弄脏才能做到这一点。我找到了几个关键词,比如OMXCodec、Android的OSstagefright和ffmpeg的stagefright、MediaCodecAPI、GStreamer。我也知道,硬件无关的实现无法支持所有供应商的硬件。在这个阶段,所有这些都让我感到非常困惑,因为我没有找到任何直接的资源来推进其中的任何一个。我的要求是— Android硬件加速视频解码器 至少支持高通公

我正在开发一个Android硬件加速视频解码器,用于实时解码H264附件B流。经过一番研究,我似乎需要把手弄脏才能做到这一点。我找到了几个关键词,比如
OMXCodec
、Android的OS
stagefright
和ffmpeg的
stagefright
MediaCodec
API、
GStreamer
。我也知道,硬件无关的实现无法支持所有供应商的硬件。在这个阶段,所有这些都让我感到非常困惑,因为我没有找到任何直接的资源来推进其中的任何一个。我的要求是—

  • Android硬件加速视频解码器
  • 至少支持高通公司的Snapdragon、三星的Exynos和Tegra
  • 实现必须在本机C/C++层(而不是Java层)中
  • Android 4.1.x Jellybean的支持就足够了
  • 无需实现后期阶段(如渲染),因为这些阶段已经开始工作。只需对输入缓冲区进行解码,并生成解码后的输出缓冲区,即可进入现有的流水线
  • 我试图从Android的stagefright的AwesomePlayer.cpp、SimplePlayer.cpp和ffmpeg stagefright的命令行可执行代码中得到一些提示。但是,对我来说,选择和进行这些事情没有多大意义

    我怎样才能接近?有什么有用的资源来获得清晰的直觉吗


    提前谢谢

    最近,我使用。不幸的是,这个API没有在NDK中公开,因此只能从Java层访问

    我找到的最好的资源是这套指南:

    因为NDK中有一个很难实现的需求,所以我想你需要编写一个瘦的java库,它与MedioAcDEC API进行交互,然后通过C++层从JNI调用它。 如果您选择FFMPEG路线,请注意它的许可证,它对分布式软件有很大的限制


    祝你好运

    谢谢你的建议。是的,我还被告知要避免ffmpeg的许可证问题。此外,我还提出了MediaCodec API的
    JNI接口方法,但如果我能在纯C/C++层中实现,那就更好了。一个问题,您是否需要做额外的工作来支持不同供应商的硬件?或者您的实现是独立于硬件的?理论上,MediaCodec API与硬件无关,事实上,到目前为止,我已经观察到了这一点-到目前为止,它在我尝试过的每台设备上都有效。仅供参考,我正在进行编码和解码,并使用API级别18中引入的MediaCodec功能。由于您只需要解码,那么可能可以返回到API级别16。再次感谢您提供这些信息!还有一个问题,通过jni访问Java层的API,而不是只使用C/C++,是否会影响性能?我听说进行jni调用的成本相对较高。这会影响你的表现吗?很难说。取决于所需的比特率、帧速率、延迟要求等。