Windows Media Format SDK系統概述

來源:互聯網
上載者:User

Windows Media媒體內容採用的是ASF檔案格式。Microsoft公司提供了Windows Media Format SDK,以支援以下三大功能:ASF檔案的產生(包括ASF資料的流化)、ASF檔案的編輯和ASF檔案的播放(包括ASF媒體流的播放)。在開始編程之前,對SDK系統有個總體的認識和理解是必要的。(註:如果未作特別說明,本書所述的SDK或WMF SDK均是指Windows Media Format SDK。)

WMF SDK採用了物件導向的設計,是一套完全基於COM組件模型的進階開發包。這裡說進階,意味著SDK屏蔽了ASF資料格式、網路傳輸控制等較為底層的流媒體技術實現細節,留給開發人員的只有比較上層的編程介面。

圖2.1 WMF SDK系統結構

 

2.1,SDK引入了一系列的對象,如產生器、讀取器、編輯器等。正是這些SDK對象屏蔽了Windows Media技術實現細節,使得應用程式開發人員不需要瞭解太多的流媒體底層技術,也能開發出非常專業的流媒體應用系統。

在SDK引入的眾多個物件中,最重要的莫過於圖2.1中列出的那三個了。其中,產生器一般用於將非壓縮的媒體資料編碼成Windows Media格式的資料。整個編碼過程非常簡單,只要通過一個叫Profile的對象配置好目標資料流格式,再將輸入資料的格式告訴產生器,然後依次將輸入資料按照既定的方式傳給產生器,剩下的事就都可以交給產生器了。產生器內部會根據Profile的配置,自動選擇一種Windows Media編碼器,然後對輸入資料進行壓縮編碼,並且完成打包,最終寫成檔案或者向網路流化。

圖2.2 產生器的工作流程

 

2.2是產生器大致的工作流程。可以看到,產生器內部對輸入資料可能有一個預先處理過程。因為特定編碼器能夠接受的資料格式總是有限的。如果輸入資料格式不能被編碼器接受,產生器內部會自動進行一個預先處理過程。這些預先處理工作包括視頻的映像大小縮放、幀率調整、色彩空間轉換、浮水印疊加,音訊採樣頻率轉換等等。另外,產生器本身不負責編碼後的資料的最終去向,而是把這個任務交給了一種叫接收器(Sink)的對象,比如交給檔案接收器就可以將資料儲存為檔案,交給網路接收器就可以將資料進行廣播,交給推接收器就可以將資料分發到運行Windows Media Services的伺服器上等等。SDK採用這種“產生器 + 接收器”的設計是很先進的,它保證了SDK系統具有很強的擴充性。比如我們可以開發自己的接收器,按我們的要求決定壓縮資料的最終去向。

如果你用過Microsoft公司官方發布的Windows Media內容的編碼軟體Windows Media Encoder的話,不要懷疑,通過WMF SDK的學習,你也可以開發出一個類似的編碼軟體。

WMF SDK有兩個讀取器:非同步讀取器和同步讀取器。兩個讀取器的功能類似,都是用於讀取ASF資料,不同的是它們的工作方式:非同步讀取器內部內建一個線程來把資料流推給應用程式;而同步讀取器內部沒有驅動資料流的線程,應用程式直接(在應用程式的線程中)通過同步讀取器上的介面函數來擷取資料。(註:非同步讀取器通常簡稱為讀取器,而只在與同步讀取器對比時才強調“非同步”特性。)

圖2.3 讀取器的工作流程

 

預設情況下,讀取器輸出一種非壓縮格式的資料。也就是說,讀取器內部會自動選擇合適的解碼器對ASF流資料進行解壓縮,2.3。當然,通過適當的設定,讀取器也可以輸出ASF流資料原有的壓縮格式。

值得注意的是,非同步讀取器在各個版本的SDK中都能使用;而同步讀取器是在9系列的SDK中才開始有的。之所以增加同步讀取器,是因為資料的同步讀模數式在一些特殊的場合下較有優勢,比如在一些進行內容編輯的應用程式中,使用同步讀取器可以快速讀取指定位置的一部分資料。另外,同步讀取器通過直接的介面函數調用來提供資料,使用起來也比較簡單。當然,同步讀取器也有明顯的不足,比如不支援讀取網路檔案,不支援DRM(數位版權管理)等等。因此,在絕大多數ASF檔案讀取的場合下還是使用非同步讀取器。

最後來簡單介紹一下編輯器。說是編輯器,大家不要誤會它能做媒體內容的修改。其實它只能編輯一些中繼資料。所謂中繼資料,就是這個媒體內容的標題、描述、作者、著作權等資訊。

 

 

3 WMF SDK編程開發環境配置 
   
  WMF SDK僅適合C/C++程式設計語言,開發平台可以是VC++6.0或Visual Studio.NET.本文介紹VC6.0的設定方法。 
  開啟VC++6.0,選擇功能表命令的Tools→Options,單擊Directories,在Show directories for下拉式功能表中選擇 Include files,然後將SDK的安裝路徑放在VC標準路徑之前。 
  在開發應用程式項目時,對VC6.0 Debug版本還需要如下設定:選擇功能表命令Project中的settings,進入標籤link,在Category下拉式清單中選擇General,把winmm.lib和 wmvcore.lib檔案添加到Object/library modules中,並選中Ignore all default libraries。 
   
  4 流媒體播放器的設計 
   
  ①用VC++6.0應用程式嚮導建立一個基於對話方塊的MFC程式,取名MyMediaPlayer,其它選項都基於預設設定。 
  ②向對話方塊中添加控制項,調整對話方塊布局。 
  ③在Project菜單中選擇Setting命令,選擇Link選項卡,在Object/Library modules輸入winmm.lib,wmvcore.lib檔案,這是編譯使用MCI介面的多媒體程式所必須的。 
  ④在編程時,要添加工程檔案wmsdk.h。wmsdk.h定義了SDK中的介面,常量,資料結構,枚舉變數和GUID等。 
  ⑤向該工程的各個成員函數添加代碼。主要有主程式類的初始化函數OnInitDialog(),功能按鈕Open()(開啟),OnPlay()(播放)、OnPause()(暫停)、OnStop()(停止)、和GetHeaderAttribute(),RetrieveAttributes() 

 

 

推薦教程http://blog.csdn.net/happydeer/article/details/277996

陸其明老師的著作:《Windows Media編程導向》

網上可以下載pdf版的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.