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

2023-12-27

最近我成功地将视频解码器移植到Android。还将输出转储到 SurfaceView 上并使用本机 API 检查输出。现在下一个任务是实现播放、暂停、流媒体等,即媒体播放器的其他功能。这样做将需要返工,因为所有这些功能都已在 Android 多媒体框架中定义。我听说我们可以把我们的解码器做成一个插件,并将其集成到Android的多媒体框架中。尽管我用谷歌搜索了相同的内容,但我几乎找不到任何有关相同内容的信息。因此,我恳请任何读者针对上述问题提出一些相关链接或解决方案。预先感谢您,等待您的回复。


在Android SF框架中,编解码器是通过注册的media_codecs.xml。在标准 android 发行版中,一个例子media_codecs.xml可以被找寻到here http://androidxref.com/4.2.2_r1/xref/development/tools/emulator/system/camera/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" />

Where,

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

b. video/avc is the MIME您的组件的类型。在这个例子中,它表示一个AVC / H.264视频解码器。

c.接下来的 2 个语句表示quirks or 特殊要求您的组件。在给定的示例中,requires-allocate-on-input-ports表示对Stagefright组件更喜欢在其所有输入端口上分配缓冲区的框架。同样,另一个quirk通知该组件也更愿意在其输出端口上进行分配。如需支持的列表quirks系统中可以参考这个函数OMXCodec::getComponentQuirks in OMXCodec.cpp http://androidxref.com/4.2.2_r1/xref/frameworks/av/media/libstagefright/OMXCodec.cpp#236文件。这些怪癖会转化为标志,然后框架会读取这些标志来创建和初始化组件。

在示例图中,表明您的OMX组件先于注册default谷歌实现了视频解码器。

NOTE:如果您在终端设备上尝试此操作,则必须确保此条目反映在最终结果中media_codecs.xml file.

2.OMX核心注册

创建您的组件并确保正确工厂方法被调用,你may have注册您的OMX核心与Stagefright框架。

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

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

一旦OMXcore 已初始化,您已准备好在 android 框架内运行您自己的组件。参考为OMXMaster可以被找寻到here http://androidxref.com/4.2.2_r1/xref/frameworks/av/media/libstagefright/omx/OMXMaster.cpp#46.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:如何将解码器集成到多媒体框架 的相关文章

  • getItem 与 getItemAtPosition

    有两种方法可以获取列表视图中的选定项目 list getAdapter getItem position list getItemAtPosition position 我的问题是 哪一种是首选的做法 我见过人们同时使用这两种方法 您可以使
  • 使用 Android 前台服务为 MediaPlayer 创建通知

    问题就在这里 我目前正在开发一个应用程序 该应用程序必须提供 A 广播播放器 来自 URL 的 AAC 直播 还有一个播客播放器 来自 URL 的 MP3 流 该应用程序必须能够在后台运行 Android 服务 并通过以下方式向用户公开持续
  • GCM 向主题发送消息:TOO_MANY_TOPICS 错误

    以前 GCM 每个应用程序有 100 万个主题订阅的限制 我发现他们现在已经取消了这一限制 基于发布 订阅模型 主题消息支持 每个应用程序无限订阅 https developers google com cloud messaging to
  • Firebase Analytics 禁用受众国家/地区跟踪

    我正在开发一个严格不允许位置跟踪的应用程序 我想使用 Firebase Analytic 的其他功能 例如 PageTransitions 和 Crashalitics 但如果我无法禁用受众位置跟踪 我就无法使用其中任何功能 这是我在 An
  • 菜单未显示在应用程序中

    由于某种原因 我的操作菜单在我的 Android Studio 应用程序中消失了 我正在按照教程学习如何创建 Android 应用程序 但最终遇到了这个问题 我正在使用 atm 的教程 http www raywenderlich com
  • Delphi XE7 Android 全屏(隐藏软键)

    如何在XE7中全屏显示 隐藏顶部 标题 和底部 软键 工具栏 在 XE6 中 我可以通过在应用程序部分写入来调整 AndroidManifest 以使我的应用程序全屏显示并且没有操作栏 android theme android style
  • KitKat(及更低版本)设备上的 Android Material Design

    我将在我们学校开发一个 Android 应用程序作为一个项目 我想使用 Google 的新 Material Design 但我知道它仅适用于 Android L 设备 Jack Underwood 最近发布了名为 Today Calend
  • 线程自动利用多个CPU核心?

    假设我的应用程序运行 2 个线程 例如渲染线程和游戏更新线程 如果它在具有多核 CPU 当今典型 的移动设备上运行 我是否可以期望线程在可能的情况下自动分配给不同的核心 我知道底层操作系统内核 Android linux内核 决定调度 我的
  • 已经使用 AsyncTask doInBackground 但新数据未显示

    我使用 AsyncTask 创建一个聊天室来接收消息 因此它总是检查即将到来的消息并将其显示给客户端 但代码似乎无法按我希望的方式工作 在客户端只显示所有旧数据 新数据不显示 因为当我尝试从服务器发送消息时 新数据没有显示在客户端中 我对这
  • 获取 AlarmManager 中活动的 PendingIntents 列表

    我有办法获取活动列表PendingIntent在设备中 我开始工作AlarmManager我想看看我的PendingIntents 已正确创建和删除 也很高兴看到其他什么PendingIntent在那里 只是为了看看某些应用程序是否正在做一
  • OnClick 事件中的 finish() 如何工作?

    我有一个Activity一键退出Activity 通过layout xml我必须设置OnClick事件至cmd exit调用 this finish 效果很好 public void cmd exit View editLayout thi
  • Firebase:如何在Android应用程序中设置默认通知渠道?

    如何设置default通知渠道通知消息当应用程序在后台运行时会出现什么情况 默认情况下 这些消息使用 杂项 通道 如你看到的在官方文档中 https firebase google com docs cloud messaging andr
  • Android 启动器快捷方式

    我制作了一个简单的打卡 打卡时钟应用程序 我想向用户添加在主屏幕上创建快捷方式的选项 该快捷方式将切换应用程序的状态 超时 超时 但我根本不希望此快捷方式在屏幕上打开应用程序 这是我的 setupShortcut private void
  • ROOM迁移过程中如何处理索引信息

    CODE Entity tableName UserRepo indices Index value id unique true public class GitHubRepo PrimaryKey autoGenerate true p
  • Android构建apk:控制MANIFEST.MF

    Android 构建 APK 假设一个 apk 包含一个库 jar 例如 foo jar 该库具有 META INF MANIFEST MF 这对于它的运行很重要 但在APK中有一个包含签名数据的MANIFEST MF 并且lib jar
  • 材质设计图标颜色

    应该是哪种颜色 暗 材质图标 在官方文档上 https www google com design spec style icons html icons system icons https www google com design s
  • 下载后从谷歌照片库检索图像

    我正在发起从图库中获取照片的意图 当我在图库中使用 Nexus 谷歌照片应用程序时 一切正常 但如果图像不在手机上 在 Google Photos 在线服务上 它会为我下载 选择图像后 我将图像发送到另一个活动进行裁剪 但在下载的情况下 发
  • 使用 Espresso 检查 EditText 的字体大小、高度和宽度

    如何使用 Espresso 检查 EditText 的字体大小 高度和宽度 目前要分割我使用的文本 onView withId R id editText1 perform clearText typeText Amr 并阅读文本 onVi
  • 在webview android中加载本地html文件

    我正在尝试在 android 的 webview 中加载 html 文件的内容 但是 它给了我 网页不可用错误 如果我尝试使用谷歌或雅虎等网站 它们就会起作用 html文件位于src gt main gt assests gt index
  • 无法将 admob 与 firebase iOS/Android 项目链接

    我有两个帐户 A 和 B A 是在 Firebase 上托管 iOS Android unity 手机游戏的主帐户 B 用于将 admob 集成到 iOS Android 手机游戏中 我在尝试将 admob 分析链接到 Firebase 项

随机推荐

  • 在 EAR 中的多场战争中共享公共 jsp

    我们有一个包含 13 个模块的大型应用程序 根据客户需求 我们应该能够部署核心模块 客户特定模块 我们计划将应用程序分成多场战争 现在的问题是我们有一些常见的jsp 例如header jsp error jsp等 有什么方法可以让我们将常见
  • Flex 可重入以用户特定状态启动

    Flex 设置YY STATE to INITIAL默认情况下 当yyscan t叫做 我正在尝试制作一个可重入扫描仪 可以从特定于用户的状态而不是 INITIAL 这是案例 comment start not passed into fl
  • 我可以重新调整旧的提交吗?

    我刚刚开始使用 git Rebase 是很棒的东西 我应该在之前的特定案例中使用它 为了清晰的提交 是否有一种完全可以接受的方法来重新调整旧提交的基础 您应该只对尚未推送到上游的提交执行此操作 也就是说 我发现最容易使用git rebase
  • false 的未定义方法 `+@':FalseClass (NoMethodError) ruby

    def next prime number last known prime while true last known prime found factor false ERROR for i in 1 last known prime
  • 如何从库中启动 Android 应用程序中的 Activity

    我在 Android Studio 中有一个 Android 应用程序 我已经在应用程序中添加了一个库 按钮 视图和活动在库中定义 当我单击按钮时 我需要导航到应用程序中定义的活动 通常 为了导航到另一个页面 我们使用意图 如下所示 Int
  • 如何本地化 iOS info.plist 文件中的字符串?

    As you might know the iOS 8 requires NSLocationWhenInUseUsageDescription key for using user s location I have added this
  • 有没有办法将外部 Javascript 作为 Jasmine 的来源?

    我正在尝试配置 jasmine yml 使用 jasmine gem 以使用 Google API 提供的 JQuery 而不是将其本地下载到我的服务器 IE src files ajax googleapis com ajax libs
  • Lubuntu 中的多个光标 - Shift + Alt + 箭头(向上/向下)

    在使用时 多光标功能对我来说非常有效Xubuntu https en wikipedia org wiki Xubuntu 我最近安装了Lubuntu https en wikipedia org wiki Lubuntu非常失望的是 我意
  • std::vector::iterator 可以简单地是 T* 吗?

    简单的理论问题 简单的指针是否是有效的迭代器类型std vector 对于其他容器 例如列表 地图 这是不可能的 但是对于std vector所保存的数据保证是连续的 所以我认为没有理由不这样做 据我所知 一些实现 例如 Visual St
  • html 重置后,javascript 事件丢失

    我遇到过这样一种情况 div 的 html 内容有时会更改为其他内容 然后又更改回来 一些 jquery ui 控件行为不当 我已将问题简化为以下代码片段 它基本上表明与按钮关联的事件处理程序不再触发 我假设这些在它们消失后的某个时刻被垃圾
  • phoneGap (Cordova) 内部如何工作,特定于 iOS

    我已经开始为多个平台开发 html 应用程序 我最近听说了 Cordova 2 0 PhoneGap 从那时起我就很好奇这座桥是如何工作的 经过大量代码检查后 我发现 Exec js 是 JS gt Native 调用发生的代码 execX
  • 使用 Odata 查询基于 EF 的 DTO

    我有一个 ASP NET Core Web API 设置 其中包含 SQL Server 数据库和 EF 数据模型 版本 EF Microsoft EntityFrameworkCore 5 0 0 预览版 7 20365 15 OData
  • jQuery $.get 在 Chrome 中不起作用

    解决方案不起作用 在浪费了一整天学习前端 Web 开发之后 我将进度条放入 iframe 中 该 iframe 在 jquery 对话框内启动 期望 ajax get 请求从该页面开始工作 不幸的是我收到了完全相同的行为 发现问题 当您按
  • sonarqube“新代码”定义

    关于默认的质量门 奇怪的是 我们不清楚 新代码 的定义 为了说明这一点 假设我们通过添加新代码来更改文件 默认声纳质量门分析是仅对新代码行还是整个文件进行 我们不清楚 但怀疑这是整个文件 同事告诉我 项目未通过质量关卡 因为带有预先存在的阻
  • 形状渐变

    我正在尝试在按钮上执行渐变 但无法使其具有与按钮其他部分相同的渐变 我尝试在渐变中添加渐变 但它似乎不起作用并且找不到解决方案 这是我正在使用的代码 button color white padding 3px 3px 3px 0px bo
  • 如何将 CSV / MySQL 数据初始批量导入 Neo4j 数据库

    我正在考虑用 neo4j 数据库替换 MySQL 数据库 我是 neo4j 的初学者 想知道如何将我当前的 MySQL 数据批量插入到 neo4j 数据库中 以便我可以进行实验并开始了解 neo4j 关系数据库由4个表组成 Person O
  • 检索函数的返回类型而不调用该函数

    假设我在 TypeScript 中有一个这样的函数 export const foo function return a 1 b true c bar 如果我将此函数导入到另一个文件中 import foo from foobar 我的问题
  • 克隆 HashSet 的有效方法?

    前几天我回答过一个有趣的问题 https stackoverflow com questions 3897568 substract hashsets and return a copy就这样关于HashSet
  • 如何使用最小起订量模拟 ConfigurationManager.AppSettings

    我陷入了我不知道如何模拟的代码点 ConfigurationManager AppSettings User 我必须模拟 ConfigurationManager 但我不知道 我正在使用Moq http code google com p
  • Android:如何将解码器集成到多媒体框架

    最近我成功地将视频解码器移植到Android 还将输出转储到 SurfaceView 上并使用本机 API 检查输出 现在下一个任务是实现播放 暂停 流媒体等 即媒体播放器的其他功能 这样做将需要返工 因为所有这些功能都已在 Android