【问题标题】:How to create a stagefright plugin如何创建一个舞台惊险插件
【发布时间】:2013-02-27 16:40:16
【问题描述】:

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

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

  • 如果容器还不支持,开发一个新的 Extractor 类。

  • 开发一个新的解码器类,实现StageFright核心读取数据所需的接口。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    根据您的问题,您似乎正在查看专门针对 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 Sandwich 的情况下和frameworks/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 是成功的。否则,您将不得不调试并找出问题所在。

    后记:

    1. 根据您的查询,我认为您并不熟悉 Android 源代码。请参考androidxref 站点以熟悉AOSP 分布。

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

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

    【讨论】:

    • 非常感谢...有了这些信息,我确信我可以继续。如果可能的话,您能否提供一个具体的链接,我可以从有关 android 资源的基础知识中了解。在上面给出的链接androidxref.com 中,我无法找到如何在我的项目中开始使用 android 源的基础知识。如果您能提供有关如何在任何应用程序中使用 android 源代码的源代码,我将非常感激您。还有一个小问题:我们是在这里修改android源代码还是只是为现有源代码创建一个独立的插件。?
    • @Zax 如果您正在寻找 Java 级别的介绍,您可以从这里开始:developer.android.com/training/index.html。但是,如果您正在查看集成说明,那么您可以在 stackoverflow 档案中阅读更多内容。要在Ice-Cream Sandwich 中集成编解码器,您必须修改 Android 源。要集成到 JellyBean,您正在更新特定于平台的文件而不是源,这是预期的集成模式
    • 最后我明白我需要重建一部分 android 源代码并使用 Android.mk 创建一个 libstagefright.so 并将其替换为我设备中 /system/libs 中现有的一个。现在为了创建这个 *.so 文件,我需要下载整个 android 源代码还是只需要下载 frameworks/base/media/libstagefright/ 内容?
    • @Zax 我想你可能需要更多的文件夹在frameworks/ 目录下。如果您可以同步整个 android 森林并保持相同的准备状态,那将是最好的。
    • 你似乎精通 Android 媒体管道,Ganesh。我想在 Stack Overflow 之外向您提出更多与此主题相关的问题。您对这个主题的一些咨询工作感兴趣吗?如果有,请通过 saares@axinom.com 告诉我。
    猜你喜欢
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 2012-05-13
    • 2014-07-02
    相关资源
    最近更新 更多