其他分享
首页 > 其他分享> > Android:如何将解码器集成到多媒体框架中

Android:如何将解码器集成到多媒体框架中

作者:互联网

最近我已经成功地将视频解码器移植到了android.还将输出转储到surfaceview上并使用本机API检查输出.现在,下一个任务是实现播放,暂停,流媒体等,即媒体播放器的其他功能.这样做将是一个返工,因为所有这些功能已经在android多媒体框架中定义.我听说我们可以将解码器作为插件,并将其集成到Android的多媒体框架中.虽然我用谷歌搜索相同的,我几乎找不到任何关于相同的信息.所以我请求任何读者为上述问题提出一些相关链接或解决方案.提前致谢,等待您的回复.

解决方法:

在Android SF框架中,编解码器通过media_codecs.xml注册.在标准的Android发行版中,可以找到一个示例media_codecs.xml here.所有视听组件都注册为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" />

哪里,

a.OMX.ABC.XYZ.H264.Decoder是组件的名称

湾video / avc是组件的MIME类型.在该示例中,它表示AVC / H.264视频解码器.

c.接下来的两个陈述表示组件的怪癖或特殊要求.在给定的示例中,requires-allocate-on-input-ports向Stagefright框架指示组件更喜欢在其所有输入端口上分配缓冲区.同样,另一个怪癖是通知组件也更愿意在其输出端口上进行分配.有关系统中支持的怪癖列表,可以参考OMXCodec.cpp文件中的函数OMXCodec :: getComponentQuirks.这些怪癖转化为标志,然后由框架读取以创建和初始化组件.

在示例图中,显示您的OMX组件是在默认的Google实现的视频解码器之前注册的.

注意:如果在终端设备上尝试此操作,则必须确保此条目反映在最终的media_codecs.xml文件中.

2. OMX核心注册

要创建组件并确保调用正确的工厂方法,您可能必须使用Stagefright框架注册OMX Core.

要注册新核心,您必须创建一个名为libstagefrighthw.so的新库,它将位于您的终端系统的/ system / lib中.该库必须公开一个将由dlsym查找的createOMXPlugin符号.

因此,OMX核心的注册是:OMXMaster调用addVendorPlugin,它在内部调用addPlugin(“libstagefrighthw.so”).在addPlugin中,将查找createOMXPlugin,使用该函数初始化makeComponentInstance,destroyComponentInstance等的其他函数指针.

初始化OMX核心后,您就可以在android框架中运行自己的组件了.可以在here找到OMXMaster的参考.

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

标签:android-framework,android,android-ndk,android-mediaplayer,stagefright
来源: https://codeday.me/bug/20190918/1811678.html