Android:如何将解码器集成到多媒体框架中
最近我成功地将一个视频解码器移植到android上。还将输出转储到surfaceview上,并使用本机API检查输出。现在,下一个任务是实现播放、暂停、流媒体等,即媒体播放器的其他功能。这样做将是一个返工,因为所有这些功能都已经在android多媒体框架中定义。我听说我们可以将解码器作为插件,并将其集成到Android的多媒体框架中。尽管我在谷歌上搜索了同样的内容,但我几乎找不到任何关于同样内容的信息。因此,我恳请任何读者为上述问题提供一些相关链接或解决方案。提前感谢,等待您的回复。在Android SF框架中,编解码器通过Android:如何将解码器集成到多媒体框架中,android,android-ndk,android-mediaplayer,android-framework,stagefright,Android,Android Ndk,Android Mediaplayer,Android Framework,Stagefright,最近我成功地将一个视频解码器移植到android上。还将输出转储到surfaceview上,并使用本机API检查输出。现在,下一个任务是实现播放、暂停、流媒体等,即媒体播放器的其他功能。这样做将是一个返工,因为所有这些功能都已经在android多媒体框架中定义。我听说我们可以将解码器作为插件,并将其集成到Android的多媒体框架中。尽管我在谷歌上搜索了同样的内容,但我几乎找不到任何关于同样内容的信息。因此,我恳请任何读者为上述问题提供一些相关链接或解决方案。提前感谢,等待您的回复。在Andro
media\u codecs.xml
注册。在标准android发行版中,可以找到一个示例media\u codecs.xml
。所有视听组件都注册为OMX
组件
1。编解码器注册
要注册视频解码器,您必须在
列表下添加一个新条目。为确保始终拾取编解码器,请确保将编解码器列为特定MIME
类型的第一个条目。H.264解码器的示例条目可以如下所示
<Decoders>
<MediaCodec name="OMX.ABC.XYZ.H264.DECODER" type="video/avc" >
<Quirk name="requires-allocate-on-input-ports" />
<Quirk name="requires-allocate-on-output-ports" />
</MediaCodec>
<MediaCodec name="OMX.google.h264.decoder" type="video/avc" />
在哪里,
a、 OMX.ABC.XYZ.H264.Decoder
是组件的名称
bvideo/avc
是组件的MIME
类型。在此示例中,它表示AVC/H.264视频解码器
c、 接下来的两条语句表示组件的怪癖
或特殊要求。在给定的示例中,要求在输入端口上分配
向Stagefright
框架指示组件更愿意在其所有输入端口上分配缓冲区。类似地,另一个怪癖是通知组件也希望在其输出端口上进行分配。有关系统中支持的quirks
列表,可以参考文件中的函数OMXCodec::getComponentQuirks
。这些怪癖转化为标志,然后框架读取这些标志来创建和初始化组件
在示例说明中,您的OMX
组件是在默认的Google实现的视频解码器之前注册的
注意:如果您在终端设备上尝试此操作,则必须确保此条目反映在最终的媒体\u codecs.xml
文件中
2。OMX核心注册
要创建组件并确保调用了正确的工厂方法,您可能需要向Stagefright
框架注册OMX
内核
要注册新核心,您必须创建一个名为libstagefrighthw.so
的新库,该库将位于终端系统中的/system/lib
。此库必须公开一个createOMXPlugin
符号,该符号将由dlsym
查找
因此,OMX
核心的注册是:OMXMaster
调用addVendorPlugin
,它在内部调用addPlugin(“libstagefrighthw.so”)
。在addPlugin
中,将查找createOMXPlugin
,使用它初始化makeComponentInstance
、destroyComponentInstance
等的其他函数指针
一旦初始化了OMX
core,您就可以在android框架内运行自己的组件了。可以找到OMXMaster
的参考
通过这些更改,您的视频解码器将集成到android stagefright框架中。非常感谢您的回复。但是我有点困惑,假设我有一个项目,其中有一个文件浏览器来选择要解码的输入文件,还有一个解码按钮来解码输入文件。我如何进行上述步骤?等待你的答复。提前谢谢。@Zax我已经在另一个帖子上回答了这个问题,非常感谢你的帮助。@Steve。。最初,您可以构建libstageRightHw.so
并替换/system/lib
中的库。更换libs后,您需要重新启动mediaserver
,瞧!。。。您的更改应该可以正常工作。从下一个整体构建开始,这些更改将自动成为构建系统和system.img的一部分,而不需要代表您执行任何附加步骤。希望这有帮助。