跳至內容

DirectShow

出自Taiwan Tongues 台語維基
於 2025年8月23日 (六) 15:15 由 TaiwanTonguesApiRobot留言 | 貢獻 所做的修訂 (從 JSON 檔案批量匯入)

(差異) ←上個修訂 | 已批准修訂 (差異) | 最新修訂 (差異) | 下個修訂→ (差異)

DirectShow(有時縮寫如DS抑是DShow), 開發代號 _ Quartz _,是一種由微軟公司開發的會當予軟體開發者對媒體檔案執行各種無仝處理的應用程式設計介面。伊是微軟公司著早前 Windows 影片科技的一擺更新。是因為微軟公司 Windows 組件物件模型(COM)框架,DirectShow 為大部份微軟公司程式設計語言提供一个媒體的普遍介面,而且是一个會當延伸的,會當佇遮用者抑是開發者的命令下播放抑是記錄媒體檔案的,以 Filter 為基礎的框殼。DirectShow 開發工具猶閣有憑證予人加入到微軟公司 SDK 平台的一部份。Windows Media Player 按呢的應用程式運用 DirectShow 抑是講伊的各種衍生來放送來自檔案抑是網際網路頂懸的內容。DirectShow's 的上大的競爭對手是蘋果電腦的 QuickTime 框架。

歷史

ActiveMovie,開發代號 Quartz,這个由 Geraint Davies 為微軟公司設計的 DirectShow 較早是身,佇咧 Windows 三更零時代,是做一種對彼陣上時行的媒體平台 QuickTime 的回應而開發的。ActiveMovie 上早的出現是去予人牢咧 Windows 九十五頂懸的並且需要系統安裝矣 IE 三-c零。伊彼陣仔的使命是做 IE 的附件放送佇咧其窗口內的媒體檔案,當好時 QuickTime 為 Netscape 以及 IE 提供的服務按呢,伊的另外一个功能是做為 Windows 影片技術(VFW,Video For Windows)的一个替換,特別為佇咧 VFW 架構內底較歹處理 MPEG(移動圖象專家組格式檔案)檔案提供輔助處理。

佇一九九八年,大概佇 DirectX 五年代的時陣,ActiveMovie 予人重號名做 DirectShow(反映著微軟公司佇彼當陣當咧拍拚加強「直接地」佇一个通常的號名系統之下佮硬體合作的技術)並且予人包括做是 " DirectMedia SDK " 的一部份。佇咧 DirectX 的七版內底,DirectShow 變成是矣 DirectX SDK 主要組成部份猶閣親像 DirectInput 等其他 DirectX APIs 仝款予伊家己的位置。甚至了後,DirectShow 予主要用來接收來自像一个手提攝影機這款的電視輸入裝置的資料,而且伊對檔案中顯示資料的能力被廣泛用佇咧 Windows Media Player 頂頭。 對二空空五年四月起,DirectShow 被對 DirectX SDK 徙掉,攏愛單獨落載 Extra 包才有通支援,了後 DirectShow 的文件佮範例予人轉移去 Windows SDK,DirectShow 嘛正式成做 Windows 的一个組件。毋過,咧編譯某一寡 DirectShow 的範例時陣,DirectX SDK 猶原是必需的。

設計模型

DirectShow 執行的方式通常是一个開發者建立一个 Filter Graph,共一寡 Filter-可能訂的-加入 Filter Graph,然後囥檔案,抑是放送來網路抑是 kha-mé-lah 的資料。播送行程執行的時,Filter Graph 佇咧 Windows 註冊當中揣註冊了後 Filters 而且為遮的 Filter 建立本地提供的 Graph。佇這了後,伊將所有的 Filter 連接做伙,並且佇咧開發者的請求之下,會放送/中止創造的 Graph。

為一个 mp 三檔案來建立的 Filter graph,由 DirectShow 內建的範例 GraphEdit 來放送。佇這幅圖內底大的方角代表 Filter graph,細塊的方代表埠頭。 彼每一个 Filter 表示資料處理過程的一个階段,舉例來講對一个檔案抑是 kha-mé-lah 讀資料,解碼,轉換佮畫。filter 有若是干的會當予人接著其他的 filter 上的連接點的 Interface。Interface 伊可能是輸出抑是輸入。根據 filter,資料予人採用「拉模式」對輸出埠輸出,抑是講以「推模式」去予人捒去另外一个輸入埠頭,而且藉這陣傳輸資料。 大多數啦 filters 的建立使用了一組 DirectShow SDK 提供的 C + + 類別,叫做 DirectShow BaseClass。這閣有 filters 解決了真濟建立,註冊佮連接的問題。你若欲予 filter graph 會當自動的使用 filters,𪜶需要佇一个分開的 DirectShow 專案內底予人登記並佮 COM 做伙登記。這一个註冊會當予人去 DirectShow BaseClass 處理。毋過,若應用程式的手工來增加 filters,𪜶無需要予人全部登記。不幸的,伊難以修改一个當咧執行中的 graph。對頭停止 graph 來產生一个新 graph 通常是較容易的。

功能

佇咧 DirectShow 中有真濟抽象的播放影原始檔的方法,實現遮的功能嘛是誠簡單的而且無需要一个訂做的 filter。後一步相對複雜的過程是程式開發員需要開發伊(伊)家己的 filter graph,舉一个例𪜶可能設計一个會當接受來自網際網路抑是硬碟檔案資料的 source filter,凡勢有一寡客製化的 filter 就是開發者想欲愛的,紲落來𪜶需要予 DirectShow 為著使用者完成一个 filter Graph 並將所有的 filter 連接起來,佇咧最後開發者干焦只用予 DirectShow 為𪜶生做一个會當取得檔案資料的 source filter 就會使矣。

DirectShow 預先設定支援真濟通常的媒體格式,如 MP 三,和 Windows 媒體影片和一寡較捷看著的格式,比如講簡單的靜態的圖樣。自從佇 Windows 中央遮的技術予許可矣,著 Fraunhofer 來講就無為著專利權來付出開的必要矣,比如講 MP 三執照。擴充機制允准 DirectShow 在將來會當支援出現的任何格式,比如講伊,已經有著 Ogg Vorbis 檔案佮 AC 三檔案的支援 filters,另外閣有干焦其他的支援 filters。

無仝款為著讀媒體檔案愛佇咧迴箍仔內底需要呼叫 MoviesTask 的為 QuickTime 設計的 main C API,DirectShow 以一種透明的方式來處理這个問題。伊佇後台建立一寡執行緒來平緩仔放送遮的來自檔案佮網際網路的資料佮這个同時無需要程式做真濟工課。猶閣佮 QuickTime 拄好顛倒反的是,咧讀一段來自網路資料毋是讀硬碟檔案的時陣無特別的需要:DirectShow 的 filter graph 挽錄了來自程式的遮的明細。毋過,QuickTime(包括一个 ActiveX 控制)佇這方面的發展相比之下遴色足濟。

批評

會當放送一个檔案是一項相對簡單的任務,毋過對影片窗口接收特定窗口資訊到建立特定 filters,開發者會不斷拄著 DirectShow API 的烏暗面。DirectShow 複雜性而且有名的狼藉佮現此時真濟人認為伊是微軟上複雜的 libraries / APIs。佇咧「Microsoft . public . win 三十二 . programmer . directx . video」新聞群組存在一个長期的灰色笑話,講的是逐當某人想欲為 DirectShow 開發一个新的 filter 時,遐爾「六個月後見吧」。

開發者真少直接建立 DirectShow filters,𪜶通常使用被稱做「基本類(DirectShow Base Classes)」 的一組類別來處理大多數的工課。基本類的代碼大細桌仔乎是規个 MFC library 類大細的一半。所以就算是有矣基本類,DirectShow 的 COM 物件猶原是相當的濟,猶原會予開發者佇開發時倍感辛苦。DirectShow 的 API 有時違反傳統的 COM 規則,譬如講佇方法內底參數的用法等。所以,開發者嘛時常使用比 DirectShow 閣較高層次的 API,如 Windows Media Player SDK,伊提供較少 COM 介面的 ActiveX 控制。

DirectShow 嘛因為干焦支援足有限的數位著作權管理(DRM)功能去受著批評。相對的乎,Windows Media Player SDK 支援較濟的 DRM 功能。

參看

  • DirectX
  • GraphEdit
  • Video for Windows

外部連結

  • MSDN 中 DirectShow 的官方文件(英文)
  • MSDN-'Official DirectShow documentation from MSDN'
  • DirectShow 論壇,MSDN 英文站
  • MSDN-'DirectShow Downloads from MSDN'
  • Home page of Geraint Davies-'Creator of DirectShow and a DirectShow MVP–Contains several FAQs and examples .'
  • The March Hare-'Prolific DirectShow MVP–Contains several FAQs'
  • Chris P's code-'Another DirectShow MVP–Some samples focused on audio .'
  • AV Programming Forum-'Articles and Forum for DirectShow and Format SDK .'
  • Standard Mpeg DirectShow SDK-'DirectShow SDK for encoding to Mpeg .'
  • DirectShow in Russian-'DirectShow Tutorial(Russian)'