Android Multimedia Framework 架构--base on jellybean(二)

2023-10-24 23:48

本文主要是介绍Android Multimedia Framework 架构--base on jellybean(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载请注明出处:太妃糖出品。哈哈

      我们学习一种新事物必然首先都要对该事物要有个大体的了解,熟悉它的整体架构,然后进行划分归类,接下来才是各个击破,逐步学习乃至掌握。对于要学习android Multimedia的人来说也是如此,先来个总括吧 !我打算分三部分来讲解,请听我娓娓道来....

一:多媒体简介

     为啥要讲多媒体的概念呢?可能很多人都对这个名称解释不怎么了解,所以在这普及普及

     媒体(Media)就是人与人之间实现信息交流的中介,简单地说,就是信息的载体,也称为媒介。多媒体是计算机和视频技术的结合,实际上它是两个媒体;声音和图像,或者用现在的术语:音响和电视。多媒体本身有两个方面,和所有现代技术一样它是由硬件和软件,或机器和思想混合组成。可以将多媒体技术和功能在概念上区分为控制系统和信息。多媒体之所以能够实现是依靠数字技术。多媒体代表数字控制和数字媒体的汇合,电脑是数字控制系统,而数字媒体是当今音频和视频最先进的存储和传播形式。事实上有人就简单地认为多媒体是电脑和电视的结合。电脑的能力达到实时处理电视和声音数据流的水平,这时多媒体就诞生了。

二:android多媒体框架演变历史

       android 的多媒体框架从android诞生以来,发生了天翻地覆的变化,包括引擎的更改,单独处理流媒体的播放器nuplayer的加入,到最新jellybean(android4.1)nuplayer逐步加入stagefrightplayer的功能,可能以后stagefight引擎会被nuplayer取代,那都是后话了。但是openomx(即引擎连接codec的纽带)一直都得到了保持。

       在Froyo2.2 以前,multimedia framework 的引擎是一直都是opencore,但为啥用stagefright替代呢,由于我没有开发过opencore,不便下结论,但从网上一些言论来看,估计是opencore太过庞大,不太好维护,具体真正原因就得问google了,如果你知道具体原因,可以给我留言,在此多谢了!

       Gingerbread  android2.3,加入了真正的支持流媒体的播发器nuplayer,如果你下有源码,可以用gitk \nuplayer,从gitk可以看到如下提交:Initial support for a true streaming player for mpeg2 transport streams. 2010.12。

      android 3.0 到android 4.0 ,总体框架没有多大变化。

      android4.1 (jellybean) 最大的变化是给c/c++部分的多媒体框架单独设立了一个framework/av的目录,给它开辟了一个git库,即从framework/base下的git库分离了出来,总算给多媒体找了个港湾。 

三:jellybean多媒体架构

        multimedia framework 架构 由三大部分构成:供上层程序调用的java API,连接java和C/C++的jni部分,多媒体引擎(stagefright)和codec接口(openmax interface)。前面两部代码在framework/base/media 下,后一部分在framework/av文件夹下。如果你修改的是java API接口或加LOG后编译可以用如下命令:make framework ,JNI 部分 make media_jni,第三部分有三个libs组成:libmedia ,libmediaplayerservice, libstagefright,命令如下 make media ,make stagefright , make mediaplayerservice. 生成各自的.so文件,用adb push 到system/下就可以调试了。记得重启!讲了好多废话,还是没有看到总体架构,罪过,好吧,上图,更直观。

 

     

 

 

 

 

     

      从上两图,我们可以发现上层APK要播放视频,首先得获得一个player,而这个player的类型根据你媒体文件的类型来决定的,分配的任务由mediaplayerservice来完成,除了获得player外最主要的是到底选用哪种编码器进行编解码,这个过程由awesomeplayer和omxcodec来完成,至于声音和图像就交由audioflinger和surfaceflinger来完成了。具体的调用实现,下一篇videoplayerback将会慢慢讨论和学习。

这篇关于Android Multimedia Framework 架构--base on jellybean(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/278579

相关文章

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

Nginx概念、架构、配置与虚拟主机实战操作指南

《Nginx概念、架构、配置与虚拟主机实战操作指南》Nginx是一个高性能的HTTP服务器、反向代理服务器、负载均衡器和IMAP/POP3/SMTP代理服务器,它支持高并发连接,资源占用低,功能全面且... 目录Nginx 深度解析:概念、架构、配置与虚拟主机实战一、Nginx 的概念二、Nginx 的特点

2025最新版Android Studio安装及组件配置教程(SDK、JDK、Gradle)

《2025最新版AndroidStudio安装及组件配置教程(SDK、JDK、Gradle)》:本文主要介绍2025最新版AndroidStudio安装及组件配置(SDK、JDK、Gradle... 目录原生 android 简介Android Studio必备组件一、Android Studio安装二、A

CPython与PyPy解释器架构的性能测试结果对比

《CPython与PyPy解释器架构的性能测试结果对比》Python解释器的选择对应用程序性能有着决定性影响,CPython以其稳定性和丰富的生态系统著称;而PyPy作为基于JIT(即时编译)技术的替... 目录引言python解释器架构概述CPython架构解析PyPy架构解析架构对比可视化性能基准测试测

MySQL集群高可用架构的两种使用小结

《MySQL集群高可用架构的两种使用小结》本文介绍了MySQL的两种高可用解决方案:组复制(MGR)和MasterHighAvailability(MHA),文中通过示例代码介绍的非常详细,对大家的学... 目录一、mysql高可用之组复制(MGR)1.1 组复制核心特性与优势1.2 组复制架构原理1.3

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手