最近,我已经将视频解码器成功移植到了android。还将输出转储到Surfaceview上,并使用 native API检查输出。现在,下一个任务是实现播放,暂停,流式传输等,即媒体播放器的其他功能。由于所有这些功能都已在android多媒体框架中定义,因此将需要重做。听说我们可以将解码器作为插件,并将其集成到Android的多媒体框架中。尽管我搜索了相同的内容,但几乎找不到任何有关该内容的信息。因此,我恳请任何读者提出一些有关上述问题的相关链接或解决方案。在此先感谢您,等待您的回复。
最佳答案
在Android SF框架中,编解码器通过media_codecs.xml
进行注册。在标准的android发行版中,可以找到here示例media_codecs.xml
。所有视听组件都注册为OMX
组件。
1.编解码器注册
要注册您的视频解码器,您必须在<Decoders>
列表下添加一个新条目。为确保始终选择您的编解码器,请确保将您的编解码器列为特定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" />
在哪里,
一种。
OMX.ABC.XYZ.H264.Decoder
是您的组件的名称b。
video/avc
是组件的MIME
类型。在此示例中,它表示 AVC / H.264 视频解码器。c。接下来的2条语句表示组件的
quirks
或特殊要求。在给定的示例中,requires-allocate-on-input-ports
向Stagefright
框架指示该组件倾向于在其所有输入端口上分配缓冲区。同样,另一个quirk
通知该组件还将更喜欢在其输出端口上分配。有关系统中受支持的quirks
的列表,可以引用OMXCodec.cpp文件中的OMXCodec::getComponentQuirks
函数。这些怪癖转换为标志,然后由框架读取这些标志以创建和初始化组件。在示例说明中,显示了您的
OMX
组件是在默认的Google实现的视频解码器之前注册的。注意:如果您在终端设备上尝试此操作,则必须确保此条目反射(reflect)在最终的
media_codecs.xml
文件中。2. OMX核心注册
要创建组件并确保调用了正确的工厂方法,您可能必须在
OMX
框架中注册Stagefright
Core。要注册一个新内核,您将必须创建一个名为
libstagefrighthw.so
的新库,该库位于您的终端系统中的/system/lib
处。该库必须公开一个createOMXPlugin
符号,该符号将由dlsym
查找。因此,
OMX
核心的注册是:OMXMaster
调用addVendorPlugin
,而addPlugin("libstagefrighthw.so")
在内部调用addPlugin
。在createOMXPlugin
中,将查询makeComponentInstance
,并使用它初始化destroyComponentInstance
,OMX
等的其他函数指针。初始化
OMXMaster
核心后,您就可以在android框架内运行自己的组件了。 ojit_code的引用可以在here中找到。通过这些更改,您的视频解码器已集成到android stagefright框架中。