我的任务涉及将视频解码器集成到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
和其他人从哪里开始拍照,我的项目目录应该在哪里。请提供相同的解决方案。提前谢谢。
答案 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 Sandwich
,frameworks/av/media/libstagefright/
时为JellyBean
。
如果您已按照所有步骤将视频解码器集成到Stagefright
框架中,那么最简单的测试就是执行以下操作:
将媒体文件复制到SD卡
在OMXCodec.cpp
中,通过删除此语句//#define LOG_NDEBUG 0
中的注释并在目录中运行mm
来启用日志。将重建后的libstagefright.so
复制到设备上的/system/lib
。
启用logcat
并开始捕获日志。
转到图库,选择您的文件并允许标准播放器播放您的文件。
如果玩家通过搜索您的组件名称选择了OMX
组件,请检查您的日志文件。如果找到,您将编解码器集成到Stagefright
中是成功的。否则,您将需要调试并找出问题所在。
<强>后记:强>
根据您的疑问,我认为您不熟悉Android来源。请参阅androidxref网站以熟悉AOSP
发行版。
除非您计划支持新的媒体文件格式,否则您无需支持Extractor
课程。 MediaExtractor
抽象文件格式解析器,并帮助解复用媒体文件中的不同轨道。
我希望通过这些信息,您应该能够在Android中集成和运行您的编解码器。