51Testing软件测试论坛

标题: 嵌入式系统多媒体框架分析 [打印本页]

作者: CallmeJack    时间: 2019-2-20 17:11
标题: 嵌入式系统多媒体框架分析
本帖最后由 CallmeJack 于 2019-2-20 17:13 编辑

1 Android系统的多媒体框架

        Google正式对外发布的Android版本,在Android2.3版本之前,使用的是Opencore多媒体框架,Android2.3版本及之后的Android系统,以Stagefright多媒体框架取代Opencore多媒体框架。Opencore多媒体框架结构过于庞大复杂,Stagefright多媒体框架提高了多媒体框架的灵活性和可开发性。

1.1 Opencore

        Android系统的Opencore多媒体框架,基于第三方PacketVideo 公司的Opencore platform来实现。支持所有通用的音频,视频,静态图像格式codec。使用OpenMAX 1L interface 接口进行扩展,可以方便得支持hardware / software codec plug-ins。

Opencore的优点是兼顾了跨平台的移植性,其缺点是过于庞大复杂,需要耗费较多时间维护。


1.2 Stagefright

        在Google正式发布Android2.3 Gingerbread之后,多媒体框架默认预设Stagefright,但是该框架也保留了Opencore的可移植性。架构相对Opencore而言较为简洁,更容易维护。

Stagefright框架中,比较重要的部分是AwesomePlayer、AudioPlayer、MediaExtractor和ColorConverter。AwesomePlayer和AudioPlayer负责播放音视频图像和声音,MediaExtractor负责处理多媒体文件的解析,Color Converter负责图像色彩空间的转换。

Stagefright框架在MediaPlayerService层实现了一个OMX层,对Opencore的omx组件部分做了引用。

[attach]122152[/attach]

1.3 Opencore/Stagefright的差异

1)支持的文件格式不同:

         Opencore比Stagefright支持的音视频编解码格式更多;

2)Parser和codec部分开发有差异:

        Opencore框架中,parser必须按照其规范完成相应的parser-node,codec必须要实现相应的组件,parser和codec分离;Stagefright框架中,只需要按照其规范实现相应的extractor和decoder,parser和codec捆绑在一起。

3)数据处理机制不同:

        Opencore框架中,通过节点控制输出,节点并行处理数据,有一个判定AV同步的依据,设定一个主时钟,使audio/video分别与主时钟同步,且音频会不断校准主时钟;Stagefright框架中,通过事件(callback和videoevent)来驱动数据输出,串行处理数据,利用传统的利用时间戳的AV同步方式,用callback驱动audio数据流,video部分用onVideoEvent事件获取audio的时间戳。


2  Linux系统的多媒体框架


2.1 Gstreamer

        GStreamer 是 GNOME 桌面环境下用来构建流媒体应用的多媒体框架(framework)。它是一个开源的多媒体框架库,利用它,可以构建一系列的媒体处理模块,包括从简单的播放功能到复杂的音频(混音)和视频(非线性编辑)的处理。

        GStreamer是一个基于管道的多媒体框架,采用c语言开发,基于GObject。是跨平台的,包括Linux (x86, PowerPC and ARM), Solaris (Intel and SPARC) and OpenSolaris, FreeBSD, OpenBSD, NetBSD, Mac OS X, Microsoft Windows and OS/400。

        GStreamer通过把若干elements链接在一起构成pipeline实现对媒体内容的处理,element通过plug-in的方式提供。bin是一种特殊的element,是由多个其它elements组成的。

element之间通过pad进行数据通讯,一个element的源pad可以链接到另一个element的sink pad。pad之间的数据类型通过capability来协商。pipeline有多种状态,当处于playing状态的时候,数据buffer就从源pad向sink pad传送。


        GStreamer的核心实现了对plug-in的注册和加载等功能,plug-in是以动态库的形式存在的。当需要某个element的时 候,Gstreamer就动态的加载对应的动态库。可以通过编写plug-in方式对gstreamer的功能进行扩展,包括编码方式,封装格式等各种功能。

[attach]122153[/attach]

GStreamer采用基于插件(plugin)和管道(pipeline)的体系结构,框架中的所有的功能模块都被实现成可以插拔的组件(component),能够很方便地安装到任意管道上。GStreamer使用插件架构并造就了大量的GStreamer的共享库。

[attach]122154[/attach]

2.1 Phonon

        Phonon是KDE 4的多媒体API 。Phonon提供一个稳定的API允许KDE 4独立于任何一个声音系统服务器如xine


     使用了phonon,用四行C++程式码就能播放档案 ,而旧声音框架(aRts)则需要用到30行.

  1. media = new MediaObject(this);
  2. connect(media, SIGNAL(finished()), SLOT(slotFinished()));
  3. media->setCurrentSource("/home/username/music/filename.ogg");
  4. media->play();
复制代码

Phonon并非只能运行于Unix系统,他的后端可以是在其它平台如 Microsoft Windows 并提供相同的功能。



3 Windows系统的多媒体框架


3.1 DirectShow

        DirectX软件开发包是微软公司提供程序员的一套在Windows操作平台上开发高性能图形、声音、输入、输出和网络游戏的编程接口。微软将DirectX定义为“硬件设备无关性”,即使用DirectX可以用于设备无关的方法提供设备相关的(高)性能。DirectX标准的建立,可以为硬件开发提供策略,硬件厂商不得不按照这一标准进行产品改进,同时,通过使用DirectX所提供的接口,开发人员可以尽情地利用硬件可能带来的高性能,而无需关系硬件的具体执行细节。

        DirectX采用了COM(组件对象模型)标准,因此不同对象的版本可以有不同的接口,这使用DirectX开发的程序即使在未来也能得到完全的兼容和支持。

    DirectShow是DirectX家族成员中为在Windows平台上处理各种格式的多媒体文件的回放、音视频采集等高性能要求的多媒体应用提供了完整的解决方案;DirectShow集成了DirectX家族中其他成员(如DirectDraw、DirectSound等)的技术,为我们的多媒体应用提供了一下的方便:

(1)、保证了数据量巨大的多媒体应用数据处理的高效性;

(2)、解决了音频和视频时刻保持同步;

(3)、用最简单的方法处理复杂的多媒体源问题,包括本地文件、计算机网络、广播电视以及其他一些数码产品等;

(4)、提供了解决处理各种多媒体格式文件的方法;

(5)、支持目标系统中不可预知的硬件变动。

DirectShow使应用程序开发人员从复杂的数据传输、硬件差异、同步性等工作解脱出来,总体应用框架和底层工作由DirectShow来完成。

[attach]122155[/attach]








欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2