最近,我已经将视频解码器成功移植到了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-portsStagefright框架指示该组件倾向于在其所有输入端口上分配缓冲区。同样,另一个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,并使用它初始化destroyComponentInstanceOMX等的其他函数指针。

初始化OMXMaster核心后,您就可以在android框架内运行自己的组件了。 ojit_code的引用可以在here中找到。

通过这些更改,您的视频解码器已集成到android stagefright框架中。

10-08 18:25