http://blog.chinaunix.net/u2/61880/showart_2339481.html

1引言
Android froyo版本多媒体引擎做了变动,新添加了stagefright框架,并且默认情况android选择stagefright,弃用之前的opencore,仅仅对opencore中的omx-component部分做了引用。
Stagefright 自android2.0后才添加,其稳定性有待商榷,是否存在bug也未知,opencore自android诞生起便存在,稳定性有保障。不过,从目前 android代码看,opencore有被stagefright取代的趋势,所以在opencore上所作工作也许会无法沿用。Opencore上的 开发较stagefright上要复杂耗时些。

2框架变动
以MediaPlayer为例,我们先看一下多媒体的简单框架。
 
上图可知,stagefright是在MediaPlayerService这一层加入的,和opencore是并列的,在选用opencore还是stagefright的代码切换上也非常容易。
  具体stagefright的内部变动,可见下图概述。Stagefright并没有完全抛弃opencore,主要是做了一个OMX层,用来引用 opencore的omx-component部分。而stagefright内部而言,与opencore是完全不同的设计。
 

3具体差异
3.1所支持的文件格式
Opencore所支持的格式。
       
Stagefright所支持的格式。

3.2 Parser和codec部分开发有差异
 Opencore与 stagefright两套机制,对于我们的开发而言,主要体现在parser和codec部分。Opencore方面,必须按照其规范完成相应的 parser-node,codec则要按照omx规范实现相应的component。Stagefright方面,则要按照其规范实现相应的 extractor和decoder。
 最基本的实现,二者是相同的,可以共用,差别在封装上,opencore难度和工作量要大。

3.3 数据处理机制不同
Opencore处理流程如下图示。
 
 engine分别创建audio/video datapath,parser/dec/sink作为node节点由各自datapath连接起来,后续node节点由统一调度器调度。
Stagefright处理流程如下图示。
 
 Audioplayer 为AwesomePlayer的成员,audioplayer通过callback来驱动数据的获取,awesomeplayer则是通过 videoevent来驱动。二者有个共性,就是数据的获取都抽象成mSource->Read()来完成,且read内部把parser和dec 绑在一起。
 Opencore和stagefright处理机制对比:
 (1)Opencore的parser与dec是分离的,各行其职;stagefright则是绑在一起作为一个独立的原子操作。
 (2)Stagefright通过callback和videoevent来驱动数据输出;opencore是通过sink-node节点控制输出。
 (3)Opencore中parser/dec/sink是并行处理的;stagefright中为串行处理。

3.4 AV同步
 Opencore有一个主clock,audio/video分别与该主clock同步,作为输出的判定依据,且audio会不断校准主clock。
 Stagefright部分,audio完全是callback驱动数据流,video部分在onVideoEvent里会获取audio的时间戳,是传统的AV时间戳做同步。

3.5 稳定性
 客观来讲,opencore存在时间长,相对稳定;stagefright刚推出,肯定会有未预知的bug存在。

4 总结
1.Opencore相对成熟稳定,作为框架采用,风险小;parser/codec集成相对复杂,如果android后续版本弃用opencore转用stagefright,那多媒体引擎的选择是个问题。
2.Stagefright新推出,肯定有未预知的bug,直接采用有潜在风险;parser/codec集成相对容易,架构较opencore做了极大简化,通俗易懂。
3.目前来看opencore支持的文件格式多些。
4.Opencore与stagefright在数据处理机制及AV同步上有很大差异,需要在实际板子上评估性能差异。
5.如果在android froyo版本开发多媒体相关产品,建议采用opencore框架,这样旧版本opencore上的成果可以沿用,且节省项目时间。
6.Opencore支持的文件格式较stagefright丰富。
7. 如果项目研发中android出现新版本,或stagefright做了更新,仍然维持opencore不变,多媒体引擎变更问题待ipad后再议。一种 选择是一直延续采用opencore,或者在适当时候(认为stagefright足够稳定)切换到stagefright。

Stagefright阅读笔记附录
两套方案对比过程中,基本上把stagefright的代码阅读过一遍,摘录如下,以图为主。
Stagefright整体框图。
 
Stagefrightplayer里awesomeplayer初始化流程
 
Awesomeplayer框图,其中涵盖主要节点元素。
 
Stagefrightrecorder部分
 
MediaPlayer框图。
 
MediaRecorder框图。
 
Libstagefright草图,涵盖了主要节点元素。
 

froyo 新的多媒体框架 stagefright与opencore对比相关推荐

  1. Android的多媒体框架OpenCore介绍

    网上资料很少, 不过还是找到一个比较详细的说明: 特地在此整理了下: 地址:http://blog.csdn.net/djy1992/article/details/9339787 分为几个阶段: 1 ...

  2. Android 多媒体框架 OpenCore(PacketVideo)介绍

    OpenCore的另外一个常用的称呼是PacketVideo,它是Android的多媒体核心.PacketVideo是一家公司的名称,OpenCore是这套多媒体框架的软件层的名称.在Android的 ...

  3. android多媒体框架学习 详解

    原址 一:多媒体框架概述 jellybean 的多媒体跟以前的版本,通过对比没啥变化,最大的变化是google终于舍得给multimedia建个独立的git了(framework/av),等你好久了! ...

  4. android多媒体框架学习 详解 最新版本

    一:多媒体框架概述 jellybean 的多媒体跟以前的版本,通过对比没啥变化,最大的变化是google终于舍得给multimedia建个独立的git了(framework/av),等你好久了!也体现 ...

  5. Pipeline领域设计和多媒体框架介绍

     术语 Node:插件,节点,处理数据的最小实体单元: Parent Node和Child Node:前向Node和后向Node Pipeline:管道,用于管理插件,可以由至少一个插件.至少一个Su ...

  6. GStreamer跨平台多媒体框架

    GStreamer跨平台多媒体框架 Gstreamer基本概念 GStreamer是用于构造媒体处理组件图的库.它支持的应用程序范围从简单的Ogg / Vorbis回放,音频/视频流到复杂的音频(混合 ...

  7. Qt phonon多媒体框架(转)

    Phonon是什么?Qt从4.4版本开始提供的一套多媒体框架,提供多媒体回放的功能.目前在Qt 4.6中实现多媒体播放图形界面主要依赖于phonon框架,其实qt中还有一个Multimedia模块,帮 ...

  8. Java JMF 多媒体框架

    Java媒体框架(JMF)使你能够编写出功能强大的多媒体程序,却不用关心底层复杂的实现细节.JMF API的使用相对比较简单,但是能够满足几乎所有多媒体编程的需求.在这篇文章中,我将向你介绍如何用很少 ...

  9. Android多媒体开发-stagefright及AwesomePlayer相关知识梳理

    android的多媒体框架中, stagefright其实是AwesomePlayer的代理,就是个皮包公司. status_t StagefrightPlayer::setDataSource( c ...

最新文章

  1. python入门指南bl-Vue 3 高阶指南之 Map
  2. LumaQQ.NET操作指令制作(3)
  3. 一个视觉交互设计失败的案例
  4. A humble heart2019-11-09
  5. 【Android Studio安装部署系列】十八、Android studio更换APP应用图标
  6. linux 手动安装 oracle(转)
  7. eclipse中tomcat启动不了_Eclipse怎样与Tomcat集成
  8. 重大技术突破首次发布!十问解密云栖大会!
  9. 厉害了!谷歌新发布的半监督学习算法降低4倍错误率
  10. 两次秒售罄的小米10,还能火爆多久?
  11. 调试经验——Excel函数矩阵相乘函数(MMULT)的应用 (Use of MMULT function in Excel)
  12. lvds输入悬空_低压差分信号LVDS学习笔记-模拟/电源-与非网
  13. 两台Ubuntu18.04局域网共享文件夹,互相访问
  14. 带有serpstack的实时Google搜索结果API
  15. Java SWT的Composite控件刷新
  16. 每天一个---- 吉尔德定律和迈特卡尔定律
  17. Linux服务器怎么关闭防火墙?
  18. 计算机串行总线控制器,通用串行总线控制器出现叹号是什么情况?怎么解决?...
  19. 百度联盟广告代码php,Javascript 实现广告后加载 可加载百度谷歌联盟广告[原创]_javascript技巧...
  20. 史上最全Mysql规范

热门文章

  1. Unity项目技术方案Dots架构方案简介
  2. SONiC Warm Reboot
  3. 【CF718E】Matvey's Birthday BFS+动态规划
  4. dockers 的简单使用
  5. mitmproxy系列抓包工具使用与实战
  6. 出现Presentation Error的解决方法
  7. 第三代酷睿i3处理器_英特尔最新10代处理器发布:游戏世界最快
  8. 贷款买二手房 这4笔钱你都准备好了么?
  9. 研究Win32 GUI中SetActiveWindow与SetFocus和窗口消息
  10. 生物蛋白质数据库类型【总结】