引用原文: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草图,涵盖了主要节点元素。
分享到:
相关推荐
Stagefright通过模块化设计、更广泛的媒体格式支持和更高的性能表现,逐渐取代了OpenCore。尽管在安全性和复杂性上存在挑战,但Stagefright的出现无疑推动了Android多媒体处理技术的进步。随着Android系统不断更新,...
Stagefright 框架 2.0 是 Android 中的多媒体框架,自 Android 2.0 开始引入,以逐渐取代 OpenCORE。Stagefright 框架具有简洁的架构和良好的跨平台移植性,是 Android 多媒体架构中的重要组件。 Stagefright 框架...
Stagefright 框架 2.0.pdf Stagefright 框架是 Android 多媒体框架的一部分,自 Android 2.0 开始作为OpenCORE 的...然而,Stagefright 框架已经成为了 Android 多媒体架构的核心组件,并且正在逐渐取代 OpenCORE。
Stagefright自Android 2.0开始逐渐崭露头角,并在后续版本中逐步取代OpenCORE,成为多媒体处理的核心。 Stagefright框架在Android多媒体架构中扮演着核心角色,它包括多个模块,如解码器、媒体提取器、数据源等,为...
Stagefright是Android操作系统中用于处理多媒体内容的核心框架,自Android 2.0开始引入,逐渐取代了原本的OpenCORE框架。Stagefright以其更为简洁的架构,为视频和音频播放提供了高效且轻量级的解决方案。 ### 整体...
在Android 4.1版本之后,OpenCore逐渐被Stagefright框架取代,但OpenCore仍然存在于系统中,主要用于处理某些旧的或不常见的媒体格式。Stagefright是一个更现代、更轻量级的多媒体框架,它在性能和安全性上进行了...
3. **Stagefright**:Android后来引入的一个多媒体框架,逐渐取代了OpenCore的部分功能,特别是在多媒体解码方面,Stagefright更注重性能和效率。 4. **MediaCodec**:Android API中的接口,允许应用程序与硬件加速...
然而,随着Android的不断发展,OpenCore逐渐被更现代的多媒体框架如Stagefright和后来的ExoPlayer所取代,这些新框架提供了更好的性能、安全性和可扩展性。 描述中提到的博文链接(已无法访问)可能提供了关于Open...
然而,随着Android系统的不断演进,OpenCore逐渐被新的多媒体框架取代,比如Stagefright和后来的ExoPlayer。Stagefright是在Android 2.2(Froyo)中引入的,它在性能和效率上有所提升,而且支持更多的媒体格式。...
4. **多媒体框架**:在Android中,OpenCore是早期的多媒体框架之一,后来逐渐被Media Frameworks取代,后者集成了更多的功能和优化,例如Stagefright和ExoPlayer。不过,对于某些老版本或特定项目,OpenCore仍然是...
然而,随着Android系统的迭代,OpenCore逐渐被更现代的多媒体框架如Stagefright所取代。Stagefright引入了更多高效的组件和模块,如MediaCodec,以提高多媒体处理的性能和兼容性。 尽管如此,理解OpenCore仍然是...
虽然在现代Android版本中,OpenCore已经被更现代的组件如Stagefright取代,但其设计理念和架构对理解Android多媒体处理仍有参考价值。 【OpenCore的代码结构】 OpenCore的代码结构包括多个模块,如PVMF(Platform ...