stagefright与opencore对比(转)

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草图,涵盖了主要节点元素。
 

转:http://blogold.chinaunix.net/u2/61880/showart.php?id=2339481

stagefright与opencore对比相关推荐

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

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

  2. excel更改页眉页脚_带格式日期的Excel页脚

    excel更改页眉页脚 It's Fancy Footer Friday! Check with your boss – maybe you can leave early to celebrate. ...

  3. 怎样写一篇文章 施工中~

    写作的基本流程是什么? 作家需要具备的思想. 写一篇好的文章需要有怎样的知识储备? 文章背后的思想主线如何把握? 怎样向读者展开自己的观点? 受众群体的识别,做到体贴. 参考/补充 封面画师:P站画师 ...

  4. WinCE下的USB游戏手柄驱动 GamePad Joystick

    USB接口的游戏手柄和键盘一样,称之为USB HID设备,在CE 系统已经有了 键盘/鼠标 两种HID 设备的驱动. 在public\common\oak\drivers\usb 下面已经有了两种设备 ...

  5. ucos+ucgui(2)

    经过几天努力,终于把ucgui移植到ucos上去了,说真的,到现在来看,本来应该是一点都不难,其实就是一个小小的delay():错误,我本人学习stm32由库函数入门,进而用原子的寄存器版本学习stm ...

  6. 嵌入式linux usb wifi移植[s3c6410平台原创]

    文档名称:嵌入式linux usb wifi驱动移植 版本历史 v1.0b001 2012-6-18 linuxusb wifi 嵌入式linux usb wifi移植参考文档 ■ realARM 6 ...

  7. VSS和CVS比较[一]

    VSS的全名是(Visual SourceSafe),是微软公司开发的Visual Studio开发套件中的版本控制部分,你可以通过从微软购买全套的 Visual Studio套件,单独购买Sourc ...

  8. [Bug Fix]Messy Audio语音电话不清晰问题

    早在第一家公司的时候,有一个印象深刻的Bug,很值得思考.这个Bug充分说明了有缺点的系统架构是怎么在不经意间影响了产品的. DSP有一个简单的操作系统,可以运行一些task,这些task有一定的优先 ...

  9. mplayer移植到S3C2440(二)

    相信大家在前面弄了下会发现在开发板上还是不能播放文件,这里还得修改下内核: 内核版本:2.6.12 编译器版本:arm-linux-gcc 3.4.1 1  修改/arch/arm/mach-s3c2 ...

  10. Ucos+Ucgui+SDIO+FATS文件系统

    最近几天都在调试ucos+ucgui+sdio+fats文件系统,不过一直没做出来,其实ucos+fats+spi+fiats  , fats+sdio也是可以的,就只有 ucos+sdio没有尝试过 ...

最新文章

  1. 7.5. Function
  2. 软工实践第三次作业(结对第一次作业)
  3. iOS开发 Block的用法
  4. 再也不怕别人动电脑了!用Python实时监控
  5. python中的os模块
  6. 从Docker 到Jenkins 到Ansible的部署经验 1
  7. 为什么只有360公开支持华为系统,其他公司都不敢表态?
  8. 使用JDBC进行数据库的事务操作(2)
  9. linux之task_struct
  10. GUI 快捷键的实现思路
  11. asp.net ajax技巧6
  12. 如何查看服务器数据库型号,如何查看服务器里的数据库
  13. genymotion 前端调试
  14. 数字孪生技术在智慧工厂中的应用,你知道多少?
  15. Arduino 通过双路L298N电机驱动模块控制麦克纳姆轮运动
  16. 解决deepin+win7双系统打不上KB4474419补丁问题
  17. 小米打开或关闭MIUI9开发者选项
  18. WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用
  19. SpringBoot邮件发送(抄送、密送、图片、多文件等一应俱全哦)
  20. 哪位大哥帮我解决解决如图问题。跪求,急需。

热门文章

  1. 模数转换器(ADC)选型参考指南
  2. 一个dsp最小系统至少要有_DSP最小系统原理图设计
  3. 遥感和GEE不正式告别
  4. 无线蓝牙耳机选购小知识,2020新款上市五大高人气蓝牙耳机推荐
  5. 机器学习算法 07 —— 朴素贝叶斯算法(拉普拉斯平滑系数、商品评论情感分析案例)
  6. 智能优化算法:人工水母搜索算法 -附代码
  7. vue 编写H5项目使用BScroll “better-scroll“;两边都滚动,并且联系
  8. 【计算机软件基础】如何理解鲁棒性Robust?
  9. 最受商户关注的十大进销存软件,真实功能大测评
  10. 企业人事系统 java_java企业人事管理系统