`
w1985chun
  • 浏览: 106594 次
  • 性别: Icon_minigender_1
  • 来自: 陕西
社区版块
存档分类
最新评论

取代opencore的stagefright

阅读更多
引用原文:http://blog.chinaunix.net/u2/61880/showart_2339481

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


分享到:
评论
1 楼 yeruowei 2011-05-24  
不错!学习啦!

相关推荐

    stagefright与opencore对比

    Stagefright通过模块化设计、更广泛的媒体格式支持和更高的性能表现,逐渐取代了OpenCore。尽管在安全性和复杂性上存在挑战,但Stagefright的出现无疑推动了Android多媒体处理技术的进步。随着Android系统不断更新,...

    stagefright框架2.0

    Stagefright 框架 2.0 是 Android 中的多媒体框架,自 Android 2.0 开始引入,以逐渐取代 OpenCORE。Stagefright 框架具有简洁的架构和良好的跨平台移植性,是 Android 多媒体架构中的重要组件。 Stagefright 框架...

    stagefright框架2.0.pdf

    Stagefright 框架 2.0.pdf Stagefright 框架是 Android 多媒体框架的一部分,自 Android 2.0 开始作为OpenCORE 的...然而,Stagefright 框架已经成为了 Android 多媒体架构的核心组件,并且正在逐渐取代 OpenCORE。

    android2.3源码解读—stagefright框架

    Stagefright自Android 2.0开始逐渐崭露头角,并在后续版本中逐步取代OpenCORE,成为多媒体处理的核心。 Stagefright框架在Android多媒体架构中扮演着核心角色,它包括多个模块,如解码器、媒体提取器、数据源等,为...

    stagefright框架

    Stagefright是Android操作系统中用于处理多媒体内容的核心框架,自Android 2.0开始引入,逐渐取代了原本的OpenCORE框架。Stagefright以其更为简洁的架构,为视频和音频播放提供了高效且轻量级的解决方案。 ### 整体...

    Android的多媒体框架OpenCore介绍.pdf.zip

    在Android 4.1版本之后,OpenCore逐渐被Stagefright框架取代,但OpenCore仍然存在于系统中,主要用于处理某些旧的或不常见的媒体格式。Stagefright是一个更现代、更轻量级的多媒体框架,它在性能和安全性上进行了...

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

    3. **Stagefright**:Android后来引入的一个多媒体框架,逐渐取代了OpenCore的部分功能,特别是在多媒体解码方面,Stagefright更注重性能和效率。 4. **MediaCodec**:Android API中的接口,允许应用程序与硬件加速...

    android中的opencore介绍

    然而,随着Android的不断发展,OpenCore逐渐被更现代的多媒体框架如Stagefright和后来的ExoPlayer所取代,这些新框架提供了更好的性能、安全性和可扩展性。 描述中提到的博文链接(已无法访问)可能提供了关于Open...

    Android--开发--的多媒体框架OpenCore介绍.rar

    然而,随着Android系统的不断演进,OpenCore逐渐被新的多媒体框架取代,比如Stagefright和后来的ExoPlayer。Stagefright是在Android 2.2(Froyo)中引入的,它在性能和效率上有所提升,而且支持更多的媒体格式。...

    android opencore

    4. **多媒体框架**:在Android中,OpenCore是早期的多媒体框架之一,后来逐渐被Media Frameworks取代,后者集成了更多的功能和优化,例如Stagefright和ExoPlayer。不过,对于某些老版本或特定项目,OpenCore仍然是...

    基于Android的Android的多媒体框架OpenCore介绍.zip

    然而,随着Android系统的迭代,OpenCore逐渐被更现代的多媒体框架如Stagefright所取代。Stagefright引入了更多高效的组件和模块,如MediaCodec,以提高多媒体处理的性能和兼容性。 尽管如此,理解OpenCore仍然是...

    android开发EOE特刊第15期

    虽然在现代Android版本中,OpenCore已经被更现代的组件如Stagefright取代,但其设计理念和架构对理解Android多媒体处理仍有参考价值。 【OpenCore的代码结构】 OpenCore的代码结构包括多个模块,如PVMF(Platform ...

Global site tag (gtag.js) - Google Analytics