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,蓝色代表仅支持嵌入式平台。直角方框表示开源库,圆角方框代表构建于开源库上的应用。

arch pic

2.软件框架类

2.1 Directshow/Media Foundation

dx pic

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

fg pic

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

2.2 GStreamer

gstreamer pic

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

bin pic

如上图所示,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上使用。
其结构如下图所示:

omx pic

由上述结构可看出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

ffmpeg pic

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

开源多媒体项目汇总与分析相关推荐

  1. C++开源代码项目汇总

    Google的C++开源代码项目 v8  -  V8 JavaScript Engine V8 是 Google 的开源 JavaScript 引擎. V8 采用 C++ 编写,可在谷歌浏览器(来自 ...

  2. 开源 安卓项目汇总

    Android 开源项目第一篇--个性化控件(View)篇  包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Progre ...

  3. 连接阿里云和容器技术生态 - 阿里云开源容器项目汇总

    为了更好地连接阿里云和容器技术,培育开发者生态,容器服务团队为Kubernetes/Docker提供了众多的开源组件来优化容器技术和阿里云的集成,降低用户容器化复杂度. 这些开源组件涵盖了docker ...

  4. 【Android Camera2】Camera2开源项目源码分析汇总

    一.简介 本篇文章为综述汇总类文章,包含后续文章即将分析的使用Camera2实现的开源项目 相关文章: Android Camera系列文章目录索引汇总 Android Camera2 综述 二.开源 ...

  5. 雷霄骅开源视音频项目汇总

    from: http://blog.csdn.net/leixiaohua1020/article/details/42658139# 作者:雷霄骅, 一个值得怀念的人 本文汇总一下自己视音频编解码学 ...

  6. Android开源项目汇总20150712更新

    Trinea (github)总结的Android开源项目汇总 转此记录研究 附一些内容 目前包括: Android开源项目第一篇--个性化控件(View)篇 包括ListView.ActionBar ...

  7. 我的开源视音频项目汇总

    本文汇总一下自己视音频编解码学习方面的开源项目.这些开源项目大体上可以分成专业领域程序,FFmpeg示例程序,FFmpeg移植程序,多媒体项目示例程序,视音频编解码原理学习工程几个类别.这些类别的详细 ...

  8. Golang优秀开源项目汇总(持续更新。。。)

    Golang优秀开源项目汇总(持续更新...) 我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open ...

  9. 开源项目kcws代码分析--基于深度学习的分词技术

    http://blog.csdn.net/pirage/article/details/53424544 分词原理 本小节内容参考待字闺中的两篇博文: 97.5%准确率的深度学习中文分词(字嵌入+Bi ...

最新文章

  1. 12个不可不知的Sublime Text应用技巧和诀窍
  2. android界面之美---自定义网络请求进度加载对话框
  3. 省选考试防爆0注意事项(PART1考试习惯)
  4. Redis数据库(一)——Redis简介、部署及常用命令
  5. python中变量和函数的区别_python中带下划线的变量和函数的意义
  6. octave错误-error: ‘squareThisNumber‘ undefined near line 1 column 1
  7. azure服务器_如何使用Blazor WebAssembly实施Azure无服务器
  8. 2017《面向对象程序设计》课程作业五
  9. SiamFC论文理解及代码理解
  10. roboware studio教程_Roboware Studio 简单使用与调试(ROS kinetic)
  11. 数据收发过程中的网络设备状态
  12. JDBC 和数据库连接池
  13. 腾讯笔试题是c语言吗,2019腾讯校园招聘C语言笔试题和面试题答案
  14. 2017IMO第五题
  15. 新遇到的问题 , 进程退出代码是 '0xffffffff'
  16. 1089 狼人杀-简单版(C语言实现)
  17. 微信小程序背景图片全屏显示
  18. Python项目对接CAS
  19. C++面向对象程序设计概念全总结(六)--最全的概念总结
  20. exe和dll的内存加载

热门文章

  1. 《乐高EV3机器人搭建与编程》一2.8 拓展配件箱
  2. 制造业信息化包括哪些具体内容?
  3. 3000字英文随笔(挽救下语感)
  4. 会展活动,签到方式如何让人眼前一亮?
  5. 大学阶段学习单片机,以后可以有什么用?可以做什么类型的工作?单片机发展前景怎么样?
  6. 什么软件能把音频翻译成文字?这几款软件分享不容错过
  7. 【面试招聘】CampusShame:校招污点公司名单
  8. morphology.remove_small_objects的使用——和numpy转换为bool
  9. 马云,受聘顶尖大学荣誉教授!聘期3年!
  10. Iverilog源码分析 -- VPI scope的实现