一、android结构图(上下文关系)

二、android目录结构

自从android4.2版本之后,媒体的相关代码都放到framework/av/的目录中,俗称"AV工作者",呵呵(本地代码不是太健全,目录我手动敲,公司代码健全,直接导出目录树)

[plain] view plaincopyprint?
  1. |----- media
  2. |       |
  3. |       |-- libmedia_native   //JNI交互部分,从名字可以看出来
  4. |       |
  5. |       |-- libmedia          //一个服务端的代理,对应用层提供相关的接口,和服务端交互
  6. |       |
  7. |       |-- libmediaplayerservice //服务段 (分发器,交换机的作用,个人理解)
  8. |       |
  9. |       |-- libstagefright  //一个服务端的分支,支持工作
  10. |       |
  11. |       |-- mediaserver     //媒体进程,管理媒体一些相关信息,关注较少
  12. |       |
  13. |       |-- mtp           //文件夹操作媒体的相关东西
  14. |       |

再进一步,我们看一下stagefright的里面包括什么东东

[plain] view plaincopyprint?
  1. |-- stagefright
  2. |   |
  3. |   |-- codecs   //提供解码器实现
  4. |   |
  5. |   |-- colorconversion   //颜色空间转换
  6. |   |
  7. |   |-- foundation   //基本数据结构的实现
  8. |   |
  9. |   |-- httplive   //m3u8解析
  10. |   |
  11. |   |-- id3        // ID3 TAG解析(一般用于MP3格式的metadata容器)
  12. |   |
  13. |   |-- include    //基本头文件
  14. |   |
  15. |   |-- matroska   //matroska文件解析
  16. |   |
  17. |   |-- mpeg2ts    //mpeg2ts文件解析和数据获取一些处理
  18. |   |
  19. |   |-- mp4        //MP4的格式解析
  20. |   |
  21. |   |-- omx        //IOMX接口实现
  22. |   |
  23. |   |-- rtsp       //rtsp文件解析
  24. |   |
  25. |   |-- wifi-display //关于wifi的处理
  26. |   |
  27. |   |-- yuv         //YUV数据的处理
  28. |   |

三、“演讲恐惧着”的接口事件

本地媒体的事件处理接口

stage fright 英文的意思就: 演讲恐惧者,AwesomePlayer 功能强大的播放器

在android中也是这个这样,“演讲恐惧者”有强大的接口和事件处理接口,但是,它不去实现,而是全部通过AwesomePlayer来完成的,在其初始化时,就直接实例化功能强大播放器并且对其设置监听。代码如下:

StageFrightPlayer.cpp

[cpp] view plaincopyprint?
  1. StagefrightPlayer::StagefrightPlayer()
  2. : mPlayer(new AwesomePlayer) {
  3. ALOGV("StagefrightPlayer");
  4. mPlayer->setListener(this);
  5. }

接口基本调用流程:

1.Java层通过JNI调用C++侧的mediaplayer相关接口

2.mediaPlayerService中创建服务器端客户端,分别实例化相关播放器,这里会把接口事件调用到具体的播放器如:本地媒体调用stagefright,流媒体调用NuPlayerDriver

3.stagefright会调用AwesomePlayer相应接口,其实流媒体侧和本地媒体类似的,最后会调用Nuplayer

媒体事件类型

[cpp] view plaincopyprint?
  1. enum media_event_type {
  2. MEDIA_NOP               = 0, // interface test message
  3. MEDIA_PREPARED          = 1, //媒体准备完毕
  4. MEDIA_PLAYBACK_COMPLETE = 2, //播放事件
  5. MEDIA_BUFFERING_UPDATE  = 3, //Buffer更新事件,更新的值是百分比
  6. MEDIA_SEEK_COMPLETE     = 4, //seek事件
  7. MEDIA_SET_VIDEO_SIZE    = 5, //视频尺寸
  8. MEDIA_TIMED_TEXT        = 99, //字幕相关的,基本不用
  9. MEDIA_ERROR             = 100, //错误
  10. MEDIA_INFO              = 200, //媒体详细信息
  11. };

stagefright模块结构

stagefright模块结构图

1.mediaPlayerservice调用Stagefright相应的接口

2.Stagefright调用AwesomePlayer相应的接口

3.AwesomePlayer调用OMXCode读取ES数据,并且进行解码的处理

4.OMXCodec调用MediaSource的read函数来获取音视频的数据

5.OMXCodec调用Android的IOMX接口,其实就是Stagefrightde中的 OMX实现

6. OMX调用OMXMaster,而OMXMaster调用OMXPluginBase的接口,这里也可以获取外部的Codec的插件,最终调用对应的解码组建来完成解码,不同解码组件不太相同,后面会做介绍

7.解码完成后,通过OMXcodec返回的裸码流数据会在Awesomeplayer中调用Render模块,实现渲染,从而给用户提供了画面

stagefright概述相关推荐

  1. stagefright框架概述

    多媒体框架stagefright是android2.3后替代opencore的.整个框架非常庞大,这里将它分为编码器.解码器.合成器.分离器.PCM数据和YUV数据输入.数据源(DataSource) ...

  2. 在Linux上使用AFL对Stagefright进行模糊测试

    前言 模糊测试是一种自动向程序传递输入数据并监控其输出的自动化测试技术.通过这种技术,安全人员可以测试程序的可靠性以及识别潜在的安全漏洞. 我们(360成都安全响应中心)将对Stagefright M ...

  3. froyo 新的多媒体框架 stagefright与opencore对比

    http://blog.chinaunix.net/u2/61880/showart_2339481.html 1引言 Android froyo版本多媒体引擎做了变动,新添加了stagefright ...

  4. Android系统漏洞分析概述

    本文描述了自己对Android系统漏洞分析的理解,同时也作为自己学习漏洞分析的大纲,逐步规范漏洞分析的方法和步骤,最终构成自己的漏洞分析体系. 1 概述 漏洞分析是指在代码中迅速定位漏洞产生的位置(简 ...

  5. Java 多线程概述

    多线程技术概述 1.线程与进程 进程:内存中运行的应用程序,每个进程都拥有一个独立的内存空间. 线程:是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换.并发执行,一个进程最少有一个线程, ...

  6. 【SpringMVC】概述

    概述: SpringMVC:是基于spring的一个框架, 实际上就是spring的一个模块, 专门是做web开发的.                       理解是servlet的一个升级 Sp ...

  7. 梯度下降优化算法概述

    本文原文是 An overview of gradient descent optimization algorithms,同时作者也在 arXiv 上发了一篇同样内容的 论文. 本文结合了两者来翻译 ...

  8. Redis概述和基础

    Redis 1.NoSQL NoSQL = Not Only SQL(不仅仅是SQL) 泛指非关系型数据库的,随着web2.0互联网的诞生!传统的关系型数据库很难对付web2.0时代!尤其是超大规模的 ...

  9. OpenCL™(开放计算语言)概述

    OpenCL™(开放计算语言)概述 异构系统并行编程的开准 OpenCL™(开放计算语言)是一种开放的.免版税的标准,用于对超级计算机.云服务器.个人计算机.移动设备和嵌入式平台中的,各种加速器进行跨 ...

  10. 自动驾驶QNX,Linux,Autosar概述

    自动驾驶QNX,Linux,Autosar概述 QNX是一个分布式.嵌入式.可规模扩展的实时操作系统.遵循POSIX.1 (程序接口)和POSIX.2 (Shell和工具).部分遵循POSIX.1b( ...

最新文章

  1. [BI基础] ( 商务智能 ) 简介
  2. python从date目录导入数据集_PyTorch加载自己的数据集实例详解
  3. 第一章 初识Mathematica
  4. 剑指offer--斐波那契数列
  5. linux优化服务器,Linux服务器优化
  6. 统计图的连通块的个数的两种方法
  7. 线段树 HDU 3397
  8. 【基础】深度学习最常用的10个激活函数!(数学原理+优缺点)
  9. java8 stream中 forEach和 forEachOrdered 当parallel时候执行过程安全问题深入理解
  10. 蛋白质组学与转录组学联合分析
  11. 酒店管理系统java代码_基于Spring开发的Java酒店管理系统 源码下载
  12. 安利三款好用的音频剪辑软件,值得收藏
  13. 2010年JNCIA-FWV、JNCIS-FWV教学视频
  14. 一份还热乎的蚂蚁金服面经(已拿Offer)!附答案!!
  15. cisco(思科)交换机操作(基本查询命令)【一】
  16. Rasa课程、Rasa培训、Rasa面试、Rasa实战系列之Understanding Word Embeddings 1_ Just Letters
  17. 软件测试基础 - 单元测试理论部分
  18. 龙邱特别款英飞凌miniwiggler拆机鉴赏
  19. 【讲座回顾】不会被AI取代的人
  20. JavaScript DOM编程-佟刚-专题视频课程

热门文章

  1. Windows窗口固定工具
  2. ElasticSearch搜索引擎:数据的写入流程
  3. 汉字拼音首字母检索筛选数据
  4. libyuv的编译使用
  5. echarts的tooltip提示框
  6. MASM入门(二)MASM基本语法
  7. 非线性动力学中的同步,同步有哪几类?
  8. java程序模拟QQ空间登录 - 并模拟刷说说的赞
  9. 【面试准备】计算机体系结构
  10. ssm企业人事管理系统