音频视频解决方案:GStreamer/ffmpeg/ffdshow/directshow/vfw

音频视频编程相关:GStreamer/ffmpeg/directshow/vfw
linux和window下几种流行的音频视频编程框架作一个总结,防止自己迷惘,免于晕头转向。

一、GStreamer

GStreamer is a library that allows the construction of graphs of media-handling components, ranging from simple Ogg/Vorbis playback to complex audio (mixing) and video (non-linear editing) processing.
GStreamer是一个开源的多媒体框架库。利用它,可以构建一系列的媒体处理模块,包括从简单的ogg播放功能到复杂的音频(混音)和视频(非线性编辑)的处理。
应用程序可以透明的利用解码和过滤技术。开发者可以使用简洁通用的接口来编写一个简单的插件来添加新的解码器或滤镜
gstreamer是linux上的(也支持其它系统) multi-media framework 多媒体应用框架。一直以来,linux上的多媒体开发都很麻烦,由于没有统一模型,所以很多东西都需要自己实现(或者code copy)。gstreamer的目的就是弥补这一缺陷。gstreamer有一个核心,核心管理许多的elements。每个element都有自己的 功能,比如:音量控制、mp3解码、从硬盘读取多媒体数据、把声音发往声卡等。用户变成所需要做的,就是把用得着的elements串成线 (pipeline)。多媒体流就可以在pipeline里流动了,一旦pipeline正常工作,就意味着音乐出来了、vedio出来 了...pipeline是在单独的线程中运行的,所以你不必担心自己的进程会阻塞。 并且pipeline线程的管理(创建、销毁、IPC等)都是gstreamer自己负责的,用户程序只需要对其发出控制信息久可以了。
在Window平台上有DirectShow体系,则在linux平台上有GStreamer框架.

二、ffmpeg

FFmpeg is a complete solution to record, convert and stream audio and video. It includes libavcodec, the leading audio/video codec library. FFmpeg is developed under Linux, but it can compiled under most operating systems, including Windows.

ffmpeg项目由以下几部分组成:
ffmpeg 视频文件转换命令行工具,也支持经过实时电视卡抓取和编码成视频文件.
ffserver 基于HTTP(RTSP正在开发中)用于实时广播的多媒体服务器.也支持时间平移
ffplay 用 SDL和FFmpeg库开发的一个简单的媒体播放器
libavcodec 一个包含了所有FFmpeg音视频编解码器的库.为了保证最优性能和高可复用性,大多数编解码器从头开发的.
libavformat 一个包含了所有的普通音视格式的解析器和产生器的库.
三、

ffdshow

ffdshow is DirectShow and VFW codec for decoding/encoding many video and audio formats, including DivX and XviD movies using libavcodec, xvid and other opensourced libraries with a rich set of postprocessing filters.

ffdshow是对一些codec(ffmpeg, xvid, and other)的封装,封装成了DirectShow和VFW的标准组件。比如对于xvid来讲,ffdshow是可以选择具体使用那个codec的, ffmpeg(libavcodec) or xvid。那么封装有没有额外的成本哪?有,但对大部分应用来讲,可以忽略不计。就如c++和c。
vfw和dshow里的CODEC分别是通过fourcc码和guid机制寻找的,可以在系统注册codec后调用,比自带编解码库形式更加统一,便于使 用。此外,vfw和dshow是代表了两个微软不同时期的音视频处理封装库,里面包含了音视频驱动,音视频处理的一整套方案。

三、DirectShow
DirectShow是微软公司在ActiveMovie和Video for Windows的基础上推出的新一代基于COM的流媒体处理的开发包,与DirectX开发包一起发布。目前,DirectX最新版本为9.0。 DirectShow为多媒体流的捕捉和回放提供了强有力的支持。运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据, 并且进行相应的后期处理乃至存储到文件中。这样使在多媒体数据库管理系统(MDBMS)中多媒体数据的存取变得更加方便。DirectShow是微软公司 提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。
运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格 式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒体数据的回放变得轻而易举。另外,DirectShow还集成了DirectX 其它部分(比如DirectDraw、DirectSound)的技术,直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。

四、vfw
Video For Windows


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453998.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 将进程放入后台执行,解决网络,ssh断开导致进程结束(nohup, setsid, , disown)...

Linux 将进程放入后台执行,解决网络,ssh断开导致进程结束(nohup, setsid, &, disown) 1、nohup 命令 我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(…

bzoj1927

1927: [Sdoi2010]星际竞速Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2556 Solved: 1580[Submit][Status][Discuss] Description 10年一度的银河系赛车大赛又要开始了。作为全银河最盛大的活动之一,夺得这个项目的冠军无疑是很多人的梦想,来自杰…

python until怎么用_python基础之从认识python到python的使用

python的历史:python的创始人是吉多范罗苏姆(Guido van Rossum),人称“龟叔”,1989年圣诞节期间,Guido开始写Python语言的编译器。他希望这个叫做Python的语言能符合他的理想:创造一种C和shell之间,功能全面…

前端之同源策略 Jsonp 与 CORS

同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同…

vue新手入门——vue-cli搭建

首先说明,以下内容vue官网都有文档,如果觉得麻烦啰嗦,请移步至 安装-vue.js 。 准备工作: 1.下载并安装node环境,一般情况下安装好node之后,npm也会安装好。具体安装的话,百度大概能帮得上忙。 …

如何看懂源代码–(分析源代码方法)

我们在写程式时,有不少时间都是在看别人的代码。例如看小组的代码,看小组整合的守则,若一开始没规划怎么看, 就会“噜看噜苦(台语) ” 不管是参考也好,从开源抓下来研究也好,为了了解…

linux关于安装

一.安装gcc gcc cloog-ppl ppl(libppl.so.7/libppl_c.so.2) cpp mpfr(libmpfr.so.1) gcc-c libstdc-devel mpfr-2.4.1-6.el6.i686.rpm和ppl-0.10.2-11.el6.i686.rpm 快捷键rz sz: rz、sz命令没找到? 安装lrzsz即可: shell># y…

python cmath模块_cmath模块-PYTHON

这是一个float型的常数>>> cmath.e2.718281828459045>>> type(cmath.e)文档>>> import cmath>>> help(cmath)Help on module cmath:NAMEcmathFILE/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/cm…

Python 第三方模块之 pdfkit

pdfkit,把 HTMLCSS 格式的文件转换成 PDF 格式文档的一个工具。 其实,pdfkit 是 html 转成 pdf 工具包 wkhtmltopdf 的 Python 封装。所以,首先安装 wkhtmltopdf 。 一般情况下,wkhtmltopdf需要手动安装,网站是 https…

LNMP环境添加第三方模块

一.在LNMP环境下添加memcache模块 1.安装依赖库(libevent) [rootnode1 ~]# tar xvf libevent-2.0.21-stable.tar.gz [rootnode1 ~]# cd libevent-2.0.21-stable [rootnode1 libevent-2.0.21-stable]# ./configure --prefix/usr/local/libevent [rootnode1 libevent-2.0.21-sta…

学生成绩管理系统-程序维护

托管平台地址:https://gitee.com/lucess/StudentMarkManage.git 小组名称:干翻沈师 程序运行方法: 1、后台服务:进入项目文件夹执行 python TeamProject.py runsercer 0.0.0.0:5050 2、前台服务:进入./WEB-INFO/TeamProjectWeb 文件夹执行 ya…

改需求

转载于:https://www.cnblogs.com/gw2010/p/7856484.html

架构师一般做到多少岁_软件测试可以做到多大岁数?

做这个行业也几年了,经常听到有人问,软件测试这个行业能干到多少岁,当然里边包含想要进入这个行业的和已经在这个行业里边发展的!基本上软件测试可以分为三条职业发展路线:技术路线、管理路线、产品路线!目…

Python 第三方模块之 MySQL数据库连接模块 PyMySQL

PyMySQL的安装 pip install PyMySQL python连接数据库 import pymysqlconn pymysql.connect(hostlocalhost, userroot, password"root",databasedb, port3306, # 数字3306charsetutf8, # 不是utf-8autocommitTrue # autocommitTrue 让每次提交都去调用…

初学Spring Boot

1.Spring Boot注解 (1)SpringBootApplication开启了Spring的组件扫描和Spring Boot的自动配置,实际上,SpringBootApplication是将三个注解组合在了一起,这三个注解分别是 SpringBootConfiguration,ComponentScan,Ena…

15条常用的视频音频编辑脚本命令(mencoder/ffmpeg等)

可以把它当快速简易参考看,主要的功能有: 视频格式转换音频格式转换切割视频及音频连接两段视频视频音频同步将图像系列转换成视频 这里是百鬼丸以前收集的一部分命令行视频音频编辑脚本命令,一直在自己的记事本里随时用,现在…

python rowcount_PyQt(Python+Qt)学习随笔:QTableWidget的currentItem、rowCount、columnCount等部件状态属性访问方法...

老猿将QTableWidget表格部件中反映部件当前情况的一些方法归类为部件状态访问方法,包括部件的行数、列数、当前项、当前行、当前列等属性访问方法。1、行数rowCountQTableWidget的rowCount属性保存表格部件中的行数,在QTableWidget创建时如果没有指定行数…

Python 内置模块之 random

常用API import random# 随机小数 print(random.random()) # 大于0且小于1之间的小数。0< n<1.0 print(random.uniform(1,3)) # 大于1小于3的小数# 随机整数 print(random.randint(1,5)) # 大于等于1且小于等于5之间的整数#从指定范围内&#xff0c;按指定基…

微信jssdk遇到的一些问题汇总

1.用户手动去触发的接口可以直接调用比如wx.startRecord(); 但是写在页面加载完成里就无效&#xff0c;需要写在 wx.ready(function(){wx.startRecord(); }); 才会有效。 2.h5 的audio标签只支持ogg,mp3,wav格式的音频&#xff0c;微信jssdk录制的是amr格式的语音文件&#xf…

mongodb简单的增删改查

数据库操作&#xff1a; show dbs;#查看数据库use test;#如果没有就创建一个db;#查看当前数据库db.dropDatabase();#删除数据库 数据操作&#xff1a;show collections&#xff1b;#查看集合创建集合、插入&#xff1a;create collection;#创建集合db.student.insert({"na…