android媒体--stagefright概述【一】
近期杂七杂八的忙碌着,前几天看了下这部分主要是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模块,实现渲染,从而给用户提供了画面
广告之后,更加精彩 ^.#
android媒体--stagefright概述【一】的更多相关文章
- (转)android媒体--stagefright概述【一】
转自:http://blog.csdn.net/loovejava/article/details/8971790 最近杂七杂八的忙碌着,前几天看了下这部分主要是stagefright模块的,所以更改 ...
- Android 媒体存储服务(二)
Android 媒体存储服务 简介: 本文是<深入Android媒体存储服务>系列第二篇,简要介绍媒体存储服务扫描文件的流程.文中介绍的是 Android 4.2. Android 有一套 ...
- Android 媒体存储服务(一)
Android 媒体存储服务 本文介绍如何在 Android 中,开发者的 APP 如何使用媒体存储服务(包含MediaScanner.MediaProvider以及媒体信息解析等部分),包括如何把 ...
- Android广播机制概述
1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...
- Android网络编程概述
Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包 ...
- 专题合集:深入Android媒体存储服务
Android 有一套媒体存储服务,进程名是 android.process.media,主要负责把磁盘中的文件信息保存到数据库当中,供其他 APP 使用以及 MTP 模式使用.这里包含了数据库管理. ...
- 深入Android媒体存储服务(二):磁盘扫描流程
简介: 本文是<深入Android媒体存储服务>系列第二篇,简要介绍媒体存储服务扫描文件的流程.文中介绍的是 Android 4.2. Android 有一套媒体存储服务,进程名是 and ...
- android媒体--图库与API层MediaPlayer的交互
众所周知一个媒体播放器新建的几个步骤: Mediaplayer mp = new MediaPlayer(0 mp.setDatasource(xxx); mp.setDispalyer(xxx); ...
- Android——媒体库 相关知识总结贴
Android媒体库 http://www.apkbus.com/android-19283-1-1.html Android本地图片选择打开媒体库,选择图片 http://www.apkbus.co ...
随机推荐
- ORACLE输出详细错误信息错误行数
... COMMIT; --输出成功信息 DBMS_OUTPUT.PUT_LINE('RUN RESULT: SUCCESS'); EXCEPTION WHEN OTHERS THEN BEGIN R ...
- ASP.NET获取根目录的方法集合
编写程序的时候,经常需要用的项目根目录,自己总结如下: 1.取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径 方法 ...
- SQL Server 2008 R2 的版本和组件
SQL Server 2008 R2 的版本和组件 SQL Server 2008 R2 其他版本 SQL Server 2008 SQL Server 2005 SQL Server 2012 ...
- CentOS 5.5 Samba服务器安装总结
centos 5.5 samba服务器安装总结先来介绍一下基本的内容windows和linux共享主要利用samba服务器,所谓SMB就是指server message block 的缩写,它是Lin ...
- win7下如何执行批处理文件
经过了一段时间的适应之后,某C也基本摸透了Win7的习性,然后突然发现无聊,就上了VeryCD去下载几个游戏玩.R大是电驴游戏版块的大神,某C怀着崇敬的心情,每每都追寻着他的足迹下载游戏.这次正好下载 ...
- java BigDecimal的操作
今天给大家讲一下java中BigDecimal的操作.由于double,float的精度不够,因此在进行商业计算的时候要使用的BigDecimal.BigDecimal对象创建如下: BigDecim ...
- InstallShield Limited Edition for Visual Studio 2013
InstallShield Limited Edition for Visual Studio 2013 图文教程(教你如何打包.NET Framework进去)本文转自“吾乐吧软件站”,原文链接:h ...
- YesFinder - 网页文件管理系统 V2.0
2.0版增加了模态框并重写了右键菜单插件.界面改为全中文.使用方式更加灵活. 同时,文件及目录改名更方便,直接双击名称就可改名. 这是DEMO的效果图. 1.功能上的主要改进是可以双击改文件/目录名称 ...
- IE6-BUG-CSS兼容详解
1.IE6背景闪烁 如果你给链接.按钮用CSS sprites作为背景,你可能会发现在IE6下会有背景图闪烁的现象.造成这个的原因是由于IE6没有将背景图缓存,每次触发hover的时候都会重新加载,可 ...
- await使用中的阻塞和并发
本文讨论,通过将Lambda还原成最普通的代码段,来解释上篇提出的疑问.并更正上篇中一些不太正确的写法.最后会给出无需等待Async方法返回值时,对Async方法使用await的建议,供大家参考.第一 ...