近期杂七杂八的忙碌着,前几天看了下这部分主要是stagefright模块的,所以更改下名字

做了挺长时间的android平台的媒体开发,对之前的分析进行一个阶段性的总结。

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

二、android文件夹结构

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

|----- media|       ||       |-- libmedia_native   //JNI交互部分,从名字能够看出来|       ||       |-- libmedia          //一个服务端的代理,相应用层提供相关的接口,和服务端交互|       ||       |-- libmediaplayerservice //服务段 (分发器,交换机的作用,个人理解)|       ||       |-- libstagefright  //一个服务端的分支,支持工作|       ||       |-- mediaserver     //媒体进程,管理媒体一些相关信息,关注较少|       ||       |-- mtp           //目录操作媒体的相关东西|       |


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

|-- stagefright|   ||   |-- codecs   //提供解码器实现|   ||   |-- colorconversion   //颜色空间转换|   ||   |-- foundation   //基本数据结构的实现|   ||   |-- httplive   //m3u8解析|   ||   |-- id3        // ID3 TAG解析(一般用于MP3格式的metadata容器)|   ||   |-- include    //基本头文件|   | |   |-- matroska   //matroska文件解析|   ||   |-- mpeg2ts    //mpeg2ts文件解析和数据获取一些处理|   ||   |-- mp4        //MP4的格式解析|   ||   |-- omx        //IOMX接口实现|   ||   |-- rtsp       //rtsp文件解析|   ||   |-- wifi-display //关于wifi的处理|   ||   |-- yuv         //YUV数据的处理|   |


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

本地媒体的事件处理接口

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

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

StageFrightPlayer.cpp

StagefrightPlayer::StagefrightPlayer()    : mPlayer(new AwesomePlayer) {    ALOGV("StagefrightPlayer");    mPlayer->setListener(this);}

接口基本调用流程:

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

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

3.stagefright会调用AwesomePlayer对应接口,事实上流媒体側和本地媒体类似的,最后会调用Nuplayer

媒体事件类型

enum media_event_type {    MEDIA_NOP               = 0, // interface test message    MEDIA_PREPARED          = 1, //媒体准备完成    MEDIA_PLAYBACK_COMPLETE = 2, //播放事件    MEDIA_BUFFERING_UPDATE  = 3, //Buffer更新事件,更新的值是百分比    MEDIA_SEEK_COMPLETE     = 4, //seek事件    MEDIA_SET_VIDEO_SIZE    = 5, //视频尺寸    MEDIA_TIMED_TEXT        = 99, //字幕相关的,基本不用    MEDIA_ERROR             = 100, //错误    MEDIA_INFO              = 200, //媒体具体信息};


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模块,实现渲染,从而给用户提供了画面

广告之后,更加精彩 ^.#

更多相关文章

  1. android TextView自定义字体样式
  2. 史上最全的Android面试题集锦
  3. Android单元测试之Local unit tests(上)
  4. Android(安卓)应用语言切换的三种方法
  5. Android——启动过程详解
  6. Android(安卓)中的Parcelable序列化对象
  7. Android跨进程bindService与callback
  8. Android菜单详解
  9. Android(安卓)的 Activity 组件详解

随机推荐

  1. AndroidStudio使用技巧
  2. Android(安卓)pm命令 以及在终端安装卸载
  3. Android自动测试之benchmark test 简介
  4. Android 性能优化之内存泄漏检测以及内存
  5. android 学习技术点 网址集锦
  6. 常用组件:android的图片组件ImageView
  7. Android Flash 10.1与Lite版视频播放能力
  8. Android 软键盘控制弹出(很好使,自己写的,绝
  9. Android 第一课——Android架构
  10. Android系统原理与开发要点详解