目錄
- 說明
- APlayer介紹
- APlayer具備功能
- APlayer使用
- 自制播放器Demo
- 未完成工作
- 原始碼下載
說明
由於需求原因,需要在專案中(桌面程式)整合一個線上播放影片的功能。大概要具備“流式”邊下載邊播放的能力。自帶的media player不太好看又不讓改動,網上找了很多開源的播放器,效果也都不佳(可能還沒碰到比較好的)。後來找到了迅雷公司的APlayer播放引擎(其實就是一個ActiveX控制元件),感覺官網上的介紹還行,後來試了一下發現不錯。
官方參考文件以及demo都是C++版本的,或者是Web版的,網上幾乎也找不到用.NET開發的相關資料,不過幸好也不太難,:-)
APlayer介紹
“APlayer 媒體播放引擎是迅雷公司從 2009 年開始開發的通用音影片媒體檔案播放核心。
迅雷看看播放器和迅雷影音就是使用 APlayer 作為播放核心,目前迅雷看看播放器在PC播放器市場佔有率排第一。
本質上APlayer播放引擎是一個ActiveX控制元件,可以被本地其他外部程式嵌入呼叫,也可以直接被網頁嵌入,類似於(Adobe Flash Player)。APlayer不包含介面,但另一個依賴於APlayer的ActiveX控制元件APlayerUI可以提供豐富的介面元素(播放控制條,Flash廣告等),APlayerUI 也被包含在 APlayerSDK 中。
”
具體不多說了,參見官方網站的介紹 http://aplayer.open.xunlei.com/。
APlayer具備功能
- 封閉式 DirectShow 架構,不受系統解碼環境干擾
- 全媒體檔案格式支援
- 支援豐富的媒體檔案傳輸協議(http/ftp/mms/rtsp/rtmp/hls等)
- 支援將多個 ts/flv/mp4 分段切片檔案組成 m3u8 無縫播放
- 強大的附加功能(字幕、音軌、轉碼/轉格式、畫質增強、截GIF……)
- 支援最新的 H.265(HEVC) 解碼
由上可以看出,它是以DirectShow為基礎開發出來的。基本上你能想到的功能它幾乎都包含(注,我沒有全部測試,只是使用了一部分相當簡單的功能),你從開發文件中關於SetConfig/GetConfig API的使用就可以看出,它包含的功能之多。下圖是呼叫SetConfig API對APlayer進行設定的文件截圖:
以上只是一部分,並不全。
APlayer使用
APlayer可以用在Web中,也可以用在桌面程式中,據說還出了Android、IOS以及Windows Phone版本的。由於我只試過桌面版的,所以在Web中使用效果我只截一個自帶的效果圖。
- Web中的使用:
- .NET Winform中的使用:
其實也很簡單,先要註冊一下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事件,提示下載解碼器。
原始碼下載
原始碼下載地址:https://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)