音频视频解决方案:GStreamer/ffmpeg/ffdshow/directshow/vfw
音頻視頻編程相關(guān):GStreamer/ffmpeg/directshow/vfw linux和window下幾種流行的音頻視頻編程框架作一個(gè)總結(jié),防止自己迷惘,免于暈頭轉(zhuǎn)向。
一、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是一個(gè)開源的多媒體框架庫。利用它,可以構(gòu)建一系列的媒體處理模塊,包括從簡(jiǎn)單的ogg播放功能到復(fù)雜的音頻(混音)和視頻(非線性編輯)的處理。 應(yīng)用程序可以透明的利用解碼和過濾技術(shù)。開發(fā)者可以使用簡(jiǎn)潔通用的接口來編寫一個(gè)簡(jiǎn)單的插件來添加新的解碼器或?yàn)V鏡 gstreamer是linux上的(也支持其它系統(tǒng)) multi-media framework 多媒體應(yīng)用框架。一直以來,linux上的多媒體開發(fā)都很麻煩,由于沒有統(tǒng)一模型,所以很多東西都需要自己實(shí)現(xiàn)(或者code copy)。gstreamer的目的就是彌補(bǔ)這一缺陷。gstreamer有一個(gè)核心,核心管理許多的elements。每個(gè)element都有自己的 功能,比如:音量控制、mp3解碼、從硬盤讀取多媒體數(shù)據(jù)、把聲音發(fā)往聲卡等。用戶變成所需要做的,就是把用得著的elements串成線 (pipeline)。多媒體流就可以在pipeline里流動(dòng)了,一旦pipeline正常工作,就意味著音樂出來了、vedio出來 了...pipeline是在單獨(dú)的線程中運(yùn)行的,所以你不必?fù)?dān)心自己的進(jìn)程會(huì)阻塞。 并且pipeline線程的管理(創(chuàng)建、銷毀、IPC等)都是gstreamer自己負(fù)責(zé)的,用戶程序只需要對(duì)其發(fā)出控制信息久可以了。 在Window平臺(tái)上有DirectShow體系,則在linux平臺(tái)上有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項(xiàng)目由以下幾部分組成: ffmpeg 視頻文件轉(zhuǎn)換命令行工具,也支持經(jīng)過實(shí)時(shí)電視卡抓取和編碼成視頻文件. ffserver 基于HTTP(RTSP正在開發(fā)中)用于實(shí)時(shí)廣播的多媒體服務(wù)器.也支持時(shí)間平移 ffplay 用 SDL和FFmpeg庫開發(fā)的一個(gè)簡(jiǎn)單的媒體播放器 libavcodec 一個(gè)包含了所有FFmpeg音視頻編解碼器的庫.為了保證最優(yōu)性能和高可復(fù)用性,大多數(shù)編解碼器從頭開發(fā)的. libavformat 一個(gè)包含了所有的普通音視格式的解析器和產(chǎn)生器的庫. 三、
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是對(duì)一些codec(ffmpeg, xvid, and other)的封裝,封裝成了DirectShow和VFW的標(biāo)準(zhǔn)組件。比如對(duì)于xvid來講,ffdshow是可以選擇具體使用那個(gè)codec的, ffmpeg(libavcodec) or xvid。那么封裝有沒有額外的成本哪?有,但對(duì)大部分應(yīng)用來講,可以忽略不計(jì)。就如c++和c。 vfw和dshow里的CODEC分別是通過fourcc碼和guid機(jī)制尋找的,可以在系統(tǒng)注冊(cè)codec后調(diào)用,比自帶編解碼庫形式更加統(tǒng)一,便于使 用。此外,vfw和dshow是代表了兩個(gè)微軟不同時(shí)期的音視頻處理封裝庫,里面包含了音視頻驅(qū)動(dòng),音視頻處理的一整套方案。
三、DirectShow DirectShow是微軟公司在ActiveMovie和Video for Windows的基礎(chǔ)上推出的新一代基于COM的流媒體處理的開發(fā)包,與DirectX開發(fā)包一起發(fā)布。目前,DirectX最新版本為9.0。 DirectShow為多媒體流的捕捉和回放提供了強(qiáng)有力的支持。運(yùn)用DirectShow,我們可以很方便地從支持WDM驅(qū)動(dòng)模型的采集卡上捕獲數(shù)據(jù), 并且進(jìn)行相應(yīng)的后期處理乃至存儲(chǔ)到文件中。這樣使在多媒體數(shù)據(jù)庫管理系統(tǒng)(MDBMS)中多媒體數(shù)據(jù)的存取變得更加方便。DirectShow是微軟公司 提供的一套在Windows平臺(tái)上進(jìn)行流媒體處理的開發(fā)包,與DirectX開發(fā)包一起發(fā)布。 運(yùn)用DirectShow,我們可以很方便地從支持WDM驅(qū)動(dòng)模型的采集卡上捕獲數(shù)據(jù),并且進(jìn)行相應(yīng)的后期處理乃至存儲(chǔ)到文件中。它廣泛地支持各種媒體格 式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒體數(shù)據(jù)的回放變得輕而易舉。另外,DirectShow還集成了DirectX 其它部分(比如DirectDraw、DirectSound)的技術(shù),直接支持DVD的播放,視頻的非線性編輯,以及與數(shù)字?jǐn)z像機(jī)的數(shù)據(jù)交換。
四、vfw Video For Windows
總結(jié)
以上是生活随笔為你收集整理的音频视频解决方案:GStreamer/ffmpeg/ffdshow/directshow/vfw的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中json模块_Python
- 下一篇: 什么是庄家