目錄網絡
說明架構
因爲需求緣由,須要在項目中(桌面程序)集成一個在線播放視頻的功能。大概要具有「流式」邊下載邊播放的能力。自帶的media player不太好看又不讓改動,網上找了不少開源的播放器,效果也都不佳(可能還沒碰到比較好的)。後來找到了迅雷公司的APlayer播放引擎(其實就是一個ActiveX控件),感受官網上的介紹還行,後來試了一下發現不錯。ide
官方參考文檔以及demo都是C++版本的,或者是Web版的,網上幾乎也找不到用.NET開發的相關資料,不過幸虧也不太難,:-)工具
APlayer介紹測試
「APlayer 媒體播放引擎是迅雷公司從 2009 年開始開發的通用音視頻媒體文件播放內核。網站
迅雷看看播放器和迅雷影音就是使用 APlayer 做爲播放內核,目前迅雷看看播放器在PC播放器市場佔有率排第一。spa
本質上APlayer播放引擎是一個ActiveX控件,能夠被本地其餘外部程序嵌入調用,也能夠直接被網頁嵌入,相似於(Adobe Flash Player)。APlayer不包含界面,但另外一個依賴於APlayer的ActiveX控件APlayerUI能夠提供豐富的界面元素(播放控制條,Flash廣告等),APlayerUI 也被包含在 APlayerSDK 中。debug
」設計
具體很少說了,參見官方網站的介紹 http://aplayer.open.xunlei.com/。3d
APlayer具有功能
由上能夠看出,它是以DirectShow爲基礎開發出來的。基本上你能想到的功能它幾乎都包含(注,我沒有所有測試,只是使用了一部分至關簡單的功能),你從開發文檔中關於SetConfig/GetConfig API的使用就能夠看出,它包含的功能之多。下圖是調用SetConfig API對APlayer進行設置的文檔截圖:
以上只是一部分,並不全。
APlayer使用
APlayer能夠用在Web中,也能夠用在桌面程序中,聽說還出了Android、IOS以及Windows Phone版本的。因爲我只試過桌面版的,因此在Web中使用效果我只截一個自帶的效果圖。
其實也很簡單,先要註冊一下COM組件。
如上圖,運行從官網上下載的SDK包中的install.bat。註冊成功後,在VS的工具箱中添加COM控件:
選擇 APlayer3 Control後,點擊肯定。以後你就能夠在工具箱中看到APlayer播放器控件:
以後的用法與其餘.NET控件差異不大。注意向窗體設計器中拖入控件後,項目中自動會添加兩個引用:
添加引用的過程不須要人工添加。這裏注意要將這兩個引用的「獨立」屬性改成true。這樣的話,編譯成功後,VS自動會將非託管DLL(官網上下載的SDK中的dll)複製到debug目錄中(注意必須這樣作,否則程序發佈後,換一臺電腦運行不了,提示要安裝COM組件)
APlayer的成員方法和事件理解起來至關簡單,基本上就是對應「打開」、「播放」、「暫停」、「關閉」、「設置音量」、「獲取視頻長度」、「緩衝進度」、「快進/倒退」等等。幾乎跟咱們平時使用播放器的動做一致,下面一張圖顯示的是成員方法和事件,用法很簡單,我就不具體說了。
名字很好理解,稍微懂點英文的都知道。
另外,須要重點說一下的是OnMessage事件,控件的鼠標、鍵盤等事件都須要經過該事件來捕獲,好像沒有其餘方式。
自制播放器Demo
我本身花一點時間作了一個demo,順便也是爲了熟悉它的使用。Demo源碼的註釋已經很是清楚詳細,我就不貼代碼了,貼幾張圖:
播放本地視頻:
播放網絡視頻(緩衝中):
模仿播放器部分功能:
只是簡單的模仿播放器的部分功能(顯示字幕、截圖)。還有不少功能有待發掘,基本上都是使用APlayer.SetConfig和GetConfig兩個方法來完成的,具體參數請參見幫助文檔。
未完成工做
未完成的工做太多了,多得數不過來,畢竟這只是一個demo :-)。
可是我目前有一個疑問,好像沒有公開「獲取已緩衝數據」的API,我怎麼知道已經緩衝了多少數據呢?沒有這個API的話,就作不出來播放器進度條上「顯示已經緩衝完成幀」的效果。可能我還沒發現,比較倉促。
注意每種視頻格式都須要對應的解碼庫,能夠從官網上下載完整解碼庫,不過比較大,所有解壓完成後,80多M。因此實際應用中,最好不要包含所有的解碼庫。當須要的解碼庫不在../codecs目錄中時,APlayer會激發OnDownloadCodec事件,提示下載解碼器。
源碼下載
源碼下載地址:http://files.cnblogs.com/files/xiaozhi_5638/VideoPlayer.rar(注意因爲解碼庫太大,因此debug目錄中的codecs目錄爲空,若是要運行請本身下載解碼庫)
開發SDK下載地址:http://aplayer.open.xunlei.com/APlayerSDK.zip
完整解碼庫下載地址:http://aplayer.open.xunlei.com/codecs.zip(84M)