標籤:
用.net做多媒體開發的似乎不多,所以網上資源也少,看的人更少。不過我的部落格上居然還有幾位在等新文章的人,有點出乎我的意料了。目前我已不再從事多媒體相關的工作,加入新公司至今都忙到吐血,再加上害怕水平不夠誤人子弟,所以一直都沒有更新這個系列。但是之前有承諾過得著空就一定要更新,現在總算稍微空了那麼一點點,繼續爛著這個坑的理由就沒有了。
DirectShow是微軟平台上處理多媒體相關事務的一個平台,本身是基於COM技術上的架構,所以可以和.net配合的非常好。在這套架構裡,多媒體相關事務被分成一個一個的子任務,每個任務都放在一些名為Filter的COM組件裡。如果你只是做一些簡單的工作,那麼微軟內建的那些filter估計已經夠用了;但是如果你還有更進階的任務要完成,那麼寫filter估計就不可避免了。在陷入到細節的泥潭之前,我們先給DirectShow拍個快照以便有一個整體的印象。
一開始
火星人用竹竿捅下地球人的探測器後,在裡面發現了一張光碟片,火星人的電腦水平都巨高無比,他們在硬碟上用小刀刻一個作業系統只需要三分鐘(相信我,還是破解版的),他們很想看看光碟片裡的內容,因為火星人是如此的土,以至於飯島愛去世的新聞都不知道,還都在等她的無碼片。
現在他們有作業系統了,他們也有光碟機,他們什麼都有,可是他們沒有播放器。火星人上有個廣電不急,時刻準備把那一小撮不明真相的不看電視的群眾消滅乾淨。火星人只看電視。
可是在飯島愛面前,廣電不急一敗塗地,火星人打算用他們的智慧開發出一款播放器,來觀看精彩的飯島愛無碼片,他們不怕死。很快他們就畫出了草圖:
後來
火星人發現把所有的功能都放到一個盒子裡不好。雖然沒有老闆檢測他們的代碼,逼他們加班重寫,扣他們工資,但他們都是電腦水平巨高無比的生物,他們甚至知道27種設計模式,他們忍受不了如此醜陋的代碼。火星人中最頂尖的精英們在火星人領袖的“帶三個表”理論中悟出真理,他們認為,把盒子分成三部分一定是完美無缺的,於是他們又畫出了這樣的草圖:
富有遠見的火星人料想到播放的源一定會變,必須在源上抽象出一個名叫Capture Filter的東西來。他們還專門給音效卡顯卡等硬體抽象出一個Render Filter,因為火星上的雕刻家三分鐘就能雕刻出一款新的音效卡或者顯卡,他們還向全火星人民保證,堅決不跟低版本的硬體相相容。剩下所有的邏輯都塞在名為Transfer Filter的小黑盒子裡。
再後來
火星人在眼睛更重要還是耳朵更重要的原則問題上一直有分歧,後來這種分歧越來越大,以至於到了不可調和的程度。他們終於分裂成了眼睛派和耳朵派。十分不幸的是,最初開發播放器的那兩個核心火星人分屬於不同的派別,他們互相看不起對方,認為自己的Transfer Filter居然有異教徒參與,根本就是對自己的侮辱,所以在一個月黑風高的夜晚,他們把Transfer Filter也分裂了:
在名為Demux的小屋裡,多媒體流被分成了視頻流和音頻流兩路,從此分道揚鑣老死不相往來,但是每天新聞不聯播之後整點報時那會兒,他們倆卻會不約而同的掏出手錶校對時間,彷彿冥冥中有人安排了他們的命運一樣(Demux在後面哈哈獰笑)。
最後
源於想看飯島愛的這款播放器越來越流行,以至於所有的火星人都擁有一款。火星上的五毛黨為了讓更多的火星人能用播放器傾聽老大哥的教誨,開發出了接收地面電視訊號的Capture filter。火星人不久之後還發明了網路,見網遊吐過三次血的一猥瑣男在第一時間開發了接收網路訊號的Capture Filter。如此等等。隨著時間的流失,最初只有一條的多媒體流分支越來越多,掛線上上的Filter也越來越多。地球探測器登入火星一百周年慶上,火星人給播放器最後拍了一張照片,看起來像這個樣子:
他們管這套架構叫DirectShow
c#中用DirectShow實現媒體播放器的核心(1) DirectShow簡介