访问StageFright.so直接从Android中的JNIlayer解码H.264流

ljf*_*xmu 6 h.264 stagefright

有没有办法libstagefright.so直接H.264JNIAndroid 2.3或更高版本的层上解码流?

Gan*_*esh 11

如果您的目标是解码基本H.264流,那么您的代码必须确保提取流,codec-specific-data主要提供给编解码器,SPS并将PPS数据和帧数据以及时间戳提供给编解码器.在所有Android版本中,最常见的接口OMXCodec是对底层OMX组件的抽象.

在姜饼(Android 2.3的)和ICS(Android的4.0.0),如果你想创建一个解码器,最好的方法是创建一个OMXCodec通过一个组成部分,抽象的代码MediaSource,即你的包装代码接口建模为MediaSourceOMXCodec 读取距离此源并执行解码.

链接到Android 2.3视频解码器创建:http://androidxref.com/2.3.6/xref/frameworks/base/media/libstagefright/AwesomePlayer.cpp#1094

链接到Android 4.0.0视频解码器创建:http://androidxref.com/4.0.4/xref/frameworks/base/media/libstagefright/AwesomePlayer.cpp#1474

主要挑战如下:

  1. 将输入建模为MediaSource.

  2. 读取包装器代码以从编解码器读取缓冲区并处理相同的内容并将其释放回编解码器.

为简化起见,您可以查看stagefright命令行可执行代码,如http://androidxref.com/4.0.4/xref/frameworks/base/cmds/stagefright/stagefright.cpp#233

但是,如果您的程序基于JellyBean(Android 4.1.x,4.2.x),那么这些稍微简化一些.从您的JNI代码,您可以创建一个MediaCodec组件并使用相同的解码.要将它们集成到您的程序中,您可以参考http://androidxref.com/4.2.2_r1/xref/frameworks/av/cmds/stagefright/SimplePlayer.cpp#316中SimplePlayer实现.