(转)android媒体--stagefright概述【一】
转自:http://blog.csdn.net/loovejava/article/details/8971790
最近杂七杂八的忙碌着,前几天看了下这部分主要是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中创建服务器端客户端,分别实例化相关播放器,这里会把接口事件调用到具体的播放器如:本地媒体调用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概述【一】
近期杂七杂八的忙碌着,前几天看了下这部分主要是stagefright模块的,所以更改下名字 做了挺长时间的android平台的媒体开发,对之前的分析进行一个阶段性的总结. 一.android结构图(上 ...
- 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 ...
随机推荐
- openfire维持在线状态,监听消息
public static void testLoginStatus()throws XMPPException,InterruptedException { AccountManager accou ...
- 【转】关于 SELECT /*!40001 SQL_NO_CACHE */ * FROM 的解惑
由于 在数据库做了缓存,在对数据库做了备份,然后在慢查询日志中发现了这一串字符: SELECT /*!40001 SQL_NO_CACHE */ * FROM 上网查了一下,发现好多答案,好多人说的都 ...
- 基于jQuery实现滚动新闻代码下载
分享一款基于jQuery实现滚动新闻代码下载.这是一款基于bootstrup 3实现的响应式jQuery滚动新闻插件.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div ...
- [转]table中设置tr行间距
原文地址:https://blog.csdn.net/itmyhome1990/article/details/50475616 CSS border-collapse 属性设置表格的边框是否被合并为 ...
- jquery文字纵向滚动效果(带间隔停留)
<script type="text/javascript"> //文字纵向滚动 $(function() { var $this = $("#quotati ...
- Linux kernel 有关 spi 设备树参数解析
一.最近做了一个 spi 设备驱动从板级设备驱动升级到设备树设备驱动,这其中要了解 spi 设备树代码的解析. 二. 设备树配置如下: 503 &spi0 { 504 status = &qu ...
- 采用dlopen、dlsym、dlclose dlopen dlerror加载动态链接库【总结】
.前言 为了使程序方便扩展,具备通用性,可以采用插件形式.采用异步事件驱动模型,保证主程序逻辑不变,将各个业务已动态链接库的形式加载进来,这就是所谓的插件.linux提供了加载和处理动态链接库的系统调 ...
- android 开发第三库
http://blog.daimajia.com/android-library-collection/ http://www.apkbus.com/android-180062-1-1.html h ...
- Go Revel - Interceptors(拦截器)
`interceptor`拦截器是revel框架在执行一个`action`的前后所调用的函数.他允许以AOP方式进行开发,这种模式非常有用: 1.记录请求日志 2.错误处理 3.状态保持 在revel ...
- String Format for Double [C#]
转载:http://www.csharp-examples.net/string-format-double/ he following examples show how to format flo ...