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. C#语言实现的向导页设计
  2. mysql多启动与日志调优
  3. 查看oracle系统信息,查看 ORACLE 系统级信息
  4. keepalived实现lvs高可用并负载均衡lamp
  5. 网上教育能改变教育不公平的现状吗?
  6. 查看linux服务器下接设备,linux下如何查看设备信息_网站服务器运行维护
  7. java循环输入直到,使用循环接受其他用户输入,直到用户输入结束输入的值
  8. junit版本_Junit-jupiter-api 和 junit-jupiter-engine 的区别是什么
  9. JavaSE——MD5、16位流
  10. spyder python调试查看类信息_使用Spyder进行Python调试
  11. LM317的调压原理与应用
  12. 用python批量发送短信_Python批量发短信
  13. css3立方体3d旋转,纯css3实现的3D立体动态旋转立方体特效
  14. 程序员木讷?我反手就是一串代码把姑娘撩到幸福地流泪
  15. 数据结构基础之基础(数据、计算机结构)
  16. 综合布线6A系统产品集锦(一)
  17. 【C++之GDB调试】GDB调试从入门到精通
  18. Silverlight之变换(6)
  19. 告别消费主义的双12,是华为云12.12会员节真正的意义
  20. 怎么理解TPS、QPS、RT、吞吐量这些性能指标?

热门文章

  1. USACO 2021 January Contest, Bronze. Problem 1. Uddered but not Herd
  2. 自我绊倒的面试——顾建荣(摘自《微软360度》
  3. STM32F429 Cubemx配置Timer实现5ms一个中断
  4. 浙江省计算机二级函数,浙江省计算机二级办公软件之excel函数
  5. iPhone5s-iOS11降级
  6. 【Code Pratice】—— 切面条、大衍数列、门派制作、方阵转置、微生物繁殖
  7. C/C++百行代码实现热门游戏-消消乐
  8. 三维细胞结构生物显微影像分析处理软件
  9. LR(1) 分析例子
  10. 坚持正确的研发项目管理转型之路