开源多媒体项目汇总与分析

1.概述

多媒体信息处理,特指视频、音频媒体数据的处理。媒体数据包括原始信号数据(未压缩)和编码后媒体流数据(已压缩),处理域可能在空间域、时间域或变换域上。其中视频处理具体包括视频编码、解码、采集、显示、分组(打包)、解分组(拆包)、合成、分割、上采样、下采样、OSD叠加等等;音频处理具体包括音频编码、解码、采集、回放、分组、解分组、混音、噪声抑制、回声消除、增益控制等等;此外还有音视频流化、音视频的复用与解复用、音视频同步等处理技术。多媒体信息处理应用的硬件平台涵盖x86平台、ARM平台、DSP平台、GPU平台,操作系统包含服务器PC机上主流的OS,如Windows(x86)、Linux(x86)以及嵌入式OS,如Embedded Linux、Android、iOS等。技术领域覆盖通信基础、计算机硬件原理、计算机网络、计算机软件架构、音视频编码协议与算法等等。本文仅简要分析一些常见的多媒体处理的软件开源工程,暂不包括硬件技术、多媒体通信信令标准等内容。
近几年来,本人在工作中接触到的开源多媒体项目如下图所示,其中绿色代表仅支持x86平台的Windows OS,红色代表仅支持x86平台的Linux OS,黄色代表支持x86平台上两种OS,蓝色代表仅支持嵌入式平台。直角方框表示开源库,圆角方框代表构建于开源库上的应用。

2.软件框架类

2.1 Directshow/Media Foundation

DirectShowMedia Foundation是微软在Windows平台上推出的两个多媒体应用库,为Windows平台提供一个统一的多媒体影音解决方案,两个应用库都是基于COM(Component Object Model)的流媒体处理的开发包,差别仅在于支持Windows的版本不同。其中Directshow是早年间从事多媒体软件开发的老程序员们(如10多年前的豪杰超级解霸)最为青睐的开发库,且整个框架本身的源代码都已公开。该库使用Filter Graph的模型来管理整个数据流的处理过程,可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理如合成、编码、网络发送或存储到文件,广泛地支持各种媒体格式,为多媒体流的捕捉和回放提供了强有力的支持。Filter Graph示例如下:

如上图所示,Filter Graph中每个模块称为Filter,视频采集模块为Source Filter,网络发送模块为Sink Filter,其余中间模块为Transform Filter,模块间以管脚相连,连接管脚称为Pin,一个最简单的例子是视频流从左至右经过视频采集、视频分析、视频编码后发送至网络。

2.2 GStreamer

GStreamer是Linux平台下用来构建流媒体应用的开源多媒体框架,为Linux平台提供一个统一的音/视频应用程序的开发方法,该多媒体框架库基于Glib核心库函数,是一个处理插件、数据流和媒体操作的框架。开发者利用API可以构建一系列的媒体处理组件模块,并能够很方便的接入到任意的管道当中。这个优点使得利用GStreamer编写一个万能的可编辑音视频应用程序成为可能。目前该库目前广泛地支持各种媒体格式,其管道能够被GUI编辑器编辑, 能够以XML文件来保存。该库使用Bin模型来管理整个数据流的处理过程,示例如下:

如上图所示,Bin中每个模块称为Element,视频采集模块为Source Element,网络发送模块为Sink Element,其余中间模块为Filter Element,模块间以管脚相连,连接管脚称为Pad。一个最简单的例子是视频流从左至右经过视频采集、视频分析、视频编码后发送至网络。

2.3 OpenMAX

OpenMAX(全称Open Media Acceleration),是一个C语言实现的、处理多媒体的跨平台的软件抽象层,其目标在于创造一个统一的接口,加速大量多媒体资源的处理,目前支持嵌入式Linux、Android等操作系统。随着从事移动开发的程序员越来越多,移动处理芯片的多媒体处理硬核加速的需求将该开源库的关注度日益增高。

该框架自上而下分为如下三个层次:
1. OpenMAX AL:Application Layer,应用程序和多媒体中间层的标准接口,使得应用在多媒体接口上具有了可移植性;
2. OpenMAX IL:Integration Layer,作为在嵌入式和移动设备中使用的audio,video,images codecs的底层接口。使得应用层和多媒体框架可以以统一的方式访问多媒体codec和支持组件,Codec可以是硬件和软件的任意组合,对用户透明;
3. OpenMAX DL: Development Layer定义了一套API,包含了audio,video和imaging使用的函数集合,这些函数可以由芯片厂商针对新的处理器进行实现和优化,然后被codec 厂商在各种codec上使用。
其结构如下图所示:

由上述结构可看出OpenMAX框架整体属于分层架构模式,而非管道过滤器模式,OpenMAX优势在于:
1. 加速跨OS和silicon平台的多媒体组建的开发、整合和编程;
2. 使library和codec实现者能够快速有效的利用潜在的加速功能,而不关心下层的硬件结构。
虽然OpenMAX框架整体属于分层模式,但其Codec模块可按照Gstreamer的接口进行封装适配,故两个框架可以互相融合。其中由Nokia, NXP, Collabora,STMicroelectronics, Texas Instruments以及开源社区共同推动的gst-openmax是一系列Gstreamer的插件,实现了OpenMAX IL接口对Gstreamer的适配封装。

2.4 FFmpeg

此部分将来作为专题进行讲解

你可能感兴趣的:(开源工程)