`
isiqi
  • 浏览: 16483513 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    stagefright参考1

    stagefright opencore对比 mp4范例stagefright opencore对比 mp4范例stagefright opencore对比 mp4范例stagefright opencore对比 mp4范例

    stagefright-plugins-master_stagefright_android_

    4. **MediaPlayer**:这是应用程序层面与Stagefright交互的主要接口,提供给开发者用于播放、暂停、停止多媒体文件的API。 三、Stagefright工作流程 当用户启动一个多媒体播放请求时,MediaPlayer会向MediaServer...

    stagefright框架2.0.pdf

    Stagefright 框架是 Android 多媒体框架的一部分,自 Android 2.0 开始作为OpenCORE 的替代品。Stagefright 框架具有简洁的架构,易于维护,但仍然保留了跨平台的移植性。 Stagefright 框架的位置如图 1 所示,在...

    stagefright框架2.0

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

    stagefright + omx小结

    stagefright + omx小结 stagefright + omx小结 stagefright + omx小结 stagefright + omx小结 stagefright + omx小结 stagefright + omx小结 stagefright + omx小结

    Android 系统下Stagefright Player框架介绍

    Stagefright的核心部分是OpenMax IL(Open Multimedia Application Layer - Interleaved)层,这是OpenMAX标准的一部分,专门用于多媒体流的处理,包括解码、编码、音频混音等。OpenMax IL层提供了丰富的API,允许...

    android多媒体stagefright框架详细分析

    Android多媒体Stagefright框架是Android系统中用于处理多媒体内容的一个重要框架,其关键组件包括OMX、AwesomePlayer以及处理AAC音频等多媒体数据的模块。本文档将详细解析Stagefright框架的基本结构、工作原理以及...

    StageFright_Video Playback的流程

    这一流程涉及多个关键时间戳的计算与对比,以及基于这些信息的智能调度策略,体现了StageFright在多媒体处理领域的先进性和复杂性。对于开发者而言,理解这一流程有助于更好地优化应用中的音视频播放性能,提升用户...

    stageFright_OpenMax系统.doc

    stageFright_OpenMax系统.doc,对Android2.3的 stagefright框架和openMAx的深入分析

    android-stagefright处理httplivestreaming缓冲机制

    本文将深入探讨Stagefright处理HLS的缓冲机制,同时也会涉及到Android Binder机制,它是Android系统中进程间通信(IPC)的核心部分。 一、Android Binder机制 Android Binder是Android系统服务和应用程序之间进行...

    opencore官方文档中文版

    此外,文档还会介绍OpenCore的扩展性,如如何添加新的编解码器支持,以及如何与其他多媒体框架(如Stagefright)进行协同工作。 通过学习《OpenCore 官方文档中文版》,开发者可以更深入地理解Android系统的多媒体...

    StageFright

    - **与OpenCore的关系**:StageFright并没有完全替代OpenCore,而是通过构建一个OMX(OpenMAX)层来与OpenCore进行交互。这一层主要引用了OpenCore的OMX组件部分。 - **架构位置**:StageFright位于...

    stagefright缓存机制

    了解stagefright的缓存机制,对于android多媒体的移动开发有很大帮助

    stagefright awesomeplayer框架

    Stagefright以其轻量级和高效性,逐步替代了OpenCORE,成为了Android系统内处理音频和视频播放的重要组件。 Stagefright框架主要由一系列模块构成,包括MediaServer、MediaExtractor、MediaCodec等,它们共同协作以...

    StageFright下的RM视频文件解析帮助文档。

    StageFright是Android系统中的一个多媒体框架,它存在一个名为"StageFright"的安全漏洞,这个漏洞与处理RM(RealMedia)文件有关,可能会导致远程代码执行或系统安全风险。本文档将深入解析RM视频文件格式,以帮助...

    stagefright+OMX小结

    【Stagefright与OMX详解】 在Android操作系统中,Stagefright和OpenMAX(OMX)是两个关键的多媒体处理框架,它们对于处理音频、视频等媒体内容起着至关重要的作用。下面将对这两个概念进行深入解析。 1. **Stage...

    StageFright_和OpenMAX的運作

    StageFright通过OpenMAX框架来实现其编解码功能,尤其依赖于OpenCORE的OMX(OpenMAX IL)实现。 #### 初始化过程 StageFright和OpenMAX的交互始于`OMX_Init`调用。`OMX_Init`函数初始化OpenMAX环境,创建必要的...

Global site tag (gtag.js) - Google Analytics