音頻視頻編程相關: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