gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:14:52 25 4
gpt4 key购买 nike

最近我成功地将视频解码器移植到android。还将输出转储到 surfaceview 上并使用 native 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" />

在哪里,

一个。 OMX.ABC.XYZ.H264.Decoder是你的组件的名字

video/avcMIME你的组件的类型。在此示例中,它表示 AVC/H.264 视频解码器。

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

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

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

<强>2。 OMX核心注册

要创建您的组件并确保调用正确的工厂方法,您可能注册您的OMX核心与Stagefright框架。

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

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

一旦OMX核心已初始化,您已准备好在 android 框架内运行您自己的组件。 OMXMaster的引用可以查到here .

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

关于Android:如何将解码器集成到多媒体框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15334509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com