如何创建stagefright插件

时间:2013-03-12 08:41:12

标签: android android-ndk android-mediaplayer android-framework stagefright

我的任务涉及将视频解码器集成到Stagefright(Android的多媒体框架)中。我搜索并找到了有关为Stagefright创建新插件的以下内容:

要添加对新格式的支持,您需要:

  • 如果尚未支持容器,请开发一个新的Extractor类。

  • 开发一个新的Decoder类,它实现StageFright核心所需的接口来读取数据。

  • 将要读取的文件的mime类型与OMXCodec.cpp文件中kDecoderInfo数组中的新解码器相关联。

    static const CodecInfo kDecoderInfo[] = {  
        {MEDIA_MIMETYPE_AUDIO_AAC, "OMX.TI.AAC.decode"},
        {MEDIA_MIMETYPE_AUDIO_AAC, "AACDecoder"},
    };

以上数据是我在网上可以找到的。现在我有一个简单的应用程序,它将文件作为输入并使用Android中的本机API在屏幕上呈现它。任何人都可以告诉我如何进一步。所有这些OMXCodec.cpp和其他人从哪里开始拍照,我的项目目录应该在哪里。请提供相同的解决方案。提前谢谢。

1 个答案:

答案 0 :(得分:10)

根据您的问题,您似乎正在查看特定于Ice-Cream Sandwich或早期版本Android的推荐内容。你应该清楚的第一件事是android的版本,即Ice-Cream Sandwich或之前或JellyBean及之后。在不同版本的Android中,编解码器的集成是不同的

我已经评论过您的另一个问题,该问题特定于JellyBean及更晚(参考:Android: How to integrate a decoder to multimedia framework

如果您希望在Ice-Cream Sandwich之前或之前集成您的编解码器,则您的问题中已经提供了相应的步骤。除了将解码器添加到kDecoderInfo列表中之外,您可能还想设置某些怪癖,如here所示。

对于OMXCodec.cpp上的问题,您可以在以下位置找到此文件 frameworks/base/media/libstagefright/时为Ice-Cream Sandwichframeworks/av/media/libstagefright/时为JellyBean

如果您已按照所有步骤将视频解码器集成到Stagefright框架中,那么最简单的测试就是执行以下操作:

  1. 将媒体文件复制到SD卡

  2. OMXCodec.cpp中,通过删除此语句//#define LOG_NDEBUG 0中的注释并在目录中运行mm来启用日志。将重建后的libstagefright.so复制到设备上的/system/lib

  3. 启用logcat并开始捕获日志。

  4. 转到图库,选择您的文件并允许标准播放器播放您的文件。

  5. 如果玩家通过搜索您的组件名称选择了OMX组件,请检查您的日志文件。如果找到,您将编解码器集成到Stagefright中是成功的。否则,您将需要调试并找出问题所在。

  6. <强>后记:

    1. 根据您的疑问,我认为您不熟悉Android来源。请参阅androidxref网站以熟悉AOSP发行版。

    2. 除非您计划支持新的媒体文件格式,否则您无需支持Extractor课程。 MediaExtractor抽象文件格式解析器,并帮助解复用媒体文件中的不同轨道。

    3. 我希望通过这些信息,您应该能够在Android中集成和运行您的编解码器。