Android OpenMAX(一)漫谈
在开始正式的学习前,我们先来聊一聊Android音视频开发中的一些问题、感受与想法。(有一点要事先说明,我的问题与答案、想法并不一定正确,请读者带着审慎的思考来阅读,后续的文章也是一样,希望读者边阅读边思考,看到错误可以指出让我改正,如有问题也可以提出一起讨论。)
为什么要有Android OpenMAX?
- Android系统可以跑在多种类型的设备上,比如说手机、电视、平板或者是现在的车机上,这些设备会有不同的芯片,手机用的比较多的是海思、高通、联发科,电视见的比较多的是AML、RTK,这些芯片厂商会有自己编解码器的实现(VPU API),Android作为一个通用的平台为了调用不同芯片的VPU API引入了OpenMAX框架,各大厂商实现Android OpenMAX框架提供的接口之后,开发者就可以用统一的接口使用硬件编解码了。
Android OpenMAX(OMX)和OpenMAX有什么异同?
- 在网上搜寻资料,一般介绍OpenMAX框架会包含三层,自上而下分别是OMX AL层、OMX IL层、OMX DL层,每一层都定义有一套标准的API,但是在Android中只用到了IL层的部分并且做了部分裁减。
OMX IL层包含哪些内容呢?
- 简单来讲,OMX IL层定义了
编解码组件的结构(我们应该如何实现OMX组件,一个OMX组件包含哪些东西)、组件的调用接口(我们应该如何获取、管理、调用、控制OMX组件)。
- 简单来讲,OMX IL层定义了
播放器可以分为如下几个部分:IO、Demux、Control、Decoder、Render,一般来说IO和Demux可以看作是一部分,Control用于控制IO-Demux、Decoder、Render协同工作,数据在三个组件之间来回流转,所以我觉得播放器控制,实际指的是Buffer流转的控制,Buffer传递方式的控制。
回到Decoder中来,我们在看ACodec、OpenMAX代码时可能会感觉写的十分复杂,这是因为考虑了非常多的情况,以Buffer传递方式为例:
- 对于普通Input buffer或者是普通Output Buffer,传递给Decoder时用共享内存可以减少Buffer的拷贝,共享内存可以在ACodec这一层分配,可以由OMX组件分配;
- 对于需要加密的Secure Input Buffer,Buffer由OMX组件分配并且将Buffer Handle回传给ACodec使用,本质上是一块共享内存,只不过是加密的物理内存;
- 如果需要渲染到Surface上,那么可以直接将解码后的数据直接存储到graphic buffer上,graphic buffer也是一块物理共享内存,ACodec与OMX组件之间的Buffer传递需要通过Fence和Handle来完成。
input/output buffer有多种类型,分配方式和传递方式也是各不相同,所以看代码只看流程是很难理解实现原理的,我们要知道Buffer是从哪儿分配的,从哪里来又到哪里去,不同状态下是如何控制的。
最后,也是非常重要的一点,我们还需要对音视频的基础知识有所了解。
目前就想到这么多,后续如果有想到其他内容会继续补充。
Android OpenMAX(一)漫谈的更多相关文章
- android openmax hardware decoder 整合记录
欢迎访问我的blog:http://blog.thinkinside.me 关于android中openmax中hardware decoder的调用中,整合过程比较简单.主要是对OMXCodec的封 ...
- Android Multimedia框架总结(十三)CodeC部分之OpenMAX框架初识及接口与适配层实现
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52629598 前言:上篇中介绍O ...
- Android多媒体开发-- android中OpenMax的实现整体框架
1.android中用openmax来干啥? android中的AwesomePlayer就 是用openmax来做(code)编解码,其实在openmax接口设计中,他不光能用来当编解码.通过他的组 ...
- Android中openmax实现框架
OMX中 OMXNodeInstance 负责创建并维护不同的实例,这些实例是根据上面需求创建的,以node作为唯一标识.这样播放器中每个OMXCodec在OMX服务端都对应有了自己的OMXNodeI ...
- android中OpenMax的实现【3】OMX中主要成员
原文 http://blog.csdn.net/tx3344/article/details/8117908 通过上文知道了,每个AwesomePlayer 只有一个OMX服务的入口,但是Awesom ...
- android中OpenMax的实现【2】AwesomePlayer中openmax的入口
AwesomePlayer 中有个变量 OMXClient mClient; 让我们看看 OMXClient class OMXClient { public: OMXClient(); stat ...
- Android多媒体开发-- OpenMax IL简介
1.openmax 简介 http://www.khronos.org/openmax/ OpenMax是一个多媒体应用程序的框架标准,由NVIDIA公司和Khronos在2006年推出. OpenM ...
- 漫谈android系统(4)bring up panel
点击打开链接 版权声明: 作者:alex wang 版权:本文版权归作者和CSDN共有 转载:欢迎转载,为了保存作者的创作热情,请按要求[转载],谢谢 要求:未经作者同意,必须保留此段声明:必须在文章 ...
- 漫谈国内外Android生态:华为发布的 HMS 服务,对 Mate30 系列无法搭载 Google GMS 的补偿有多大(原创)
如果既用过iPhone,也用过国际版Android,还用过国内的安卓,(并且这三种都用了半年以上),就能体会到GMS多重要.可以说,iOS的体验大幅度领先于国内的安卓,一多半的原因是国内安卓没有GMS ...
- Android中利用OpenMax 编程的基本流程
近期因为公司在做数字电视,播放器和模块由供应商打包一起卖,驱动调通了,但是播放器要硬件解码,和平台差异,原厂又没有相关文档,就自己试着看了一个系统的播放器流程,顺便整理了一下,也方便以后查询,希望对播 ...
随机推荐
- 重新点亮shell————什么是shell[一]
前言 这里简介一下什么是shell. 写linux和shell 系列是为了后面的docker 系列的整理,本来想直接整理k8s的,但是呢,想想docker 系列整理完了的话,那么整理k8s系列就没有那 ...
- 涂色-【BFS】
涂色 有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间.给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newC ...
- xilinx的serdes接收时钟坑
ilinx的7 series fpga transceivers wizard用于自定义的serdes编码. 要选择多个serdes端口,如下图,点击对应的名称,然后右边选择use该设备就可以. 生成 ...
- 《C# in depth》第2章C#2.0中的更改(十五)——字面量
一.概念 在计算机编程中,Literals(字面量)是指在程序中直接表示数据的一种方式.它们是在代码中出现的固定值,与变量不同,它们没有名称或标识符. Literals 可以用于各种数据类型,包括整数 ...
- 聊聊从大模型来看NLP解决方案之UIE
转载请备注出处:https://www.cnblogs.com/zhiyong-ITNote 概述 自然语言处理NLP任务的实现,相比较以前基于传统机器学习算法实现方法,现在越来越集中使用大模型来实现 ...
- Dubbo Mesh:从服务框架到统一服务控制平台
简介: Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java.Golang 等多语言 SDK 实现. 作者:Dubbo 社区 Ap ...
- 阿里云 EMR Delta Lake 在流利说数据接入中的架构和实践
简介: 为了消灭数据孤岛,企业往往会把各个组织的数据都接入到数据湖以提供统一的查询或分析.本文将介绍流利说当前数据接入的整个过程,期间遇到的挑战,以及delta在数据接入中产生的价值. 背景 流利说目 ...
- 最佳实践丨三种典型场景下的云上虚拟IDC(私有池)选购指南
简介:业务上云常态化,业务在云上资源的选购.弹性交付.自助化成为大趋势.不同行业的不同客户,业务发展阶段不一样,云上资源的成本投入在业务整体成本占比也不一样,最小化成本投入.最大化业务收益始终是不同 ...
- Flink 在有赞的实践和应用
简介: 本文介绍了Flink 在有赞的实践和应用,内容包括:Flink 的容器化改造和实践.Flink SQL 的实践和应用.未来规划. 作者:沈磊 一.Flink 的容器化改造和实践 1. 有赞的集 ...
- [DApp] ethers.js VS Moralis
ether.js 是 Web3 封装的 js 库,特别适合以太坊平台. Moralis 不仅是 Web3 的封装,还是一体化解决方案,包括服务端部署方案和适配各种链,使用范围更广. 在选择上,主要还是 ...