GJM :自定義基於 VLC 的視頻播放器 [轉載]

来源:http://www.cnblogs.com/GJM6/archive/2016/11/17/6074360.html
-Advertisement-
Play Games

感謝您的閱讀。喜歡的、有用的就請大哥大嫂們高抬貴手“推薦一下”吧!你的精神支持是博主強大的寫作動力以及轉載收藏動力。歡迎轉載! 版權聲明:本文原創發表於 【請點擊連接前往】 ,未經作者同意必須保留此段聲明!如有侵權請聯繫我刪帖處理! 我的博客:http://www.cnblogs.com/GJM6/ ...


  • 感謝您的閱讀。喜歡的、有用的就請大哥大嫂們高抬貴手“推薦一下”吧!你的精神支持是博主強大的寫作動力以及轉載收藏動力。歡迎轉載!
  • 版權聲明:本文原創發表於 【請點擊連接前往】 ,未經作者同意必須保留此段聲明!如有侵權請聯繫我刪帖處理!
  • 我的博客:http://www.cnblogs.com/GJM6/  -  傳送門:【點擊前往

前言(蛋疼的背景故事) 【原貼轉載】

  前段時間,接了一個小項目,有個需求是要在系統待機一段時間以後,迴圈播放 MV(類似於 Windows 系統的屏幕保護)。

  聽到這個需求,我首先想到的是 MediaPlayer 和 Flash,因為這兩個組件幾乎所有 Windows 平臺的電腦都會安裝。但客戶說不能用 Flash,原因是以前使用過,太不穩定,所以我決定使用 MediaPlayer。

  MediaPlayer 做為一個 COM 組件可以很方便的載入到 VS 工具箱中,使用的時候直接拖放到 Form 上,用起來超級簡單。而且,網上隨便搜一下都有大把的示例。所以,進展很順利。。。

  後來,上線幾天以後,問題來了。客戶反應有一次下午下班,系統運行以後忘關了,第二天早上就只顯示系統桌面,不確定什麼時候“閃退”了。所以他們第二天就專門測試了待機問題,然後發現待機的時候很頻繁的會出現閃退問題。。我當時直覺就是:一堆SB啊,別 TM 網上下載 GHO 鏡象安裝帶著一堆病毒和插件的系統,別 TM 裝個殺毒軟體把老子進程給殺掉(因為我測試的時候程式里的某段操作代碼被360當成病毒殺了,我以為也是殺毒軟體的問題)。

  我抱著對 Microsoft 無比信任的情懷,一邊默默罵著SB,一邊讓他們用官方的 ISO 重裝系統。並且要求不要安裝殺毒軟體或者在殺毒軟體里把我的程式設為信任。同時,我重新檢查了一下系統里的所有方法,確保所有的操作都都異常處理,並且,增加了 Application 級的異常處理。。然而,沒什麼卵用。

  無奈,去現場調查。。他們果然沒有忽悠我,正當我舒服的靠在椅子上欣賞我喜歡的那首MV的時候,程式沒了,就那樣直接沒了,連一個錯誤消息都沒有。做 .NET 這麼久,一直信賴的異常處理機制竟然沒起作用。。那感覺,就好像冬天的大早上突然被人掀了被子那樣的渴求溫暖,就好像脫光了正和妹子纏綿的時候妹子突然消失了的那種空洞。。。

  後來,和他們仔細的確認了一下問題出現的頻率。他們說這個問題出現的時間不定,有時候三四個小時,有時候六七個小時。有時候報錯“***.exe 已停止運行”,有時候啥都沒有,直接程式界面就消失了,仿佛從來沒有啟動過似的。。他們曾經換了一臺電腦測試,問題更甚,有時候半個小時就會崩潰一次。

  程式直接消失,異常捕獲的代碼肯定是沒有執行,事實上也是,Log 都是突然中斷,沒有任何異常和關閉邏輯的日誌。深入調查時,發現更奇葩的情況是這個錯誤連繫統日誌都不一定記錄。。聽他們反應這兩天系統閃退過七八次,但是系統里關於這個應用的日誌只有三條,而且沒有剛纔我看到的那次閃退的任何日誌記錄。。只是在其中一個錯誤記錄里,查到的錯誤代碼說是“組件異常”。。組件,那隻有 MediaPlayer 了。。。

  百度、Google、Bing、360搜索,然而並沒有什麼卵用。。網上大多是對 MediaPlayer 組件的介紹和易用性、便捷性的贊美,就是那種能教會小白們寫一個簡單的播放窗體的那種滿滿的成就感,一點深入的線索都沒找到。。

  無奈,決定放棄 MediaPlayer。

  後來,找到了一個博客中介紹的 VLC Player(不過我忘了具體是哪位前輩的文章了)。

  按博客里的介紹,下載了組件,寫了一個簡單的Demo,然後加入系統,運行起來貌似好多了。只是後來他們反應有一個 MV 播放到某個時間點的時候,會報錯,又查資料,終於在一個EN文網站上查到原因說是版本問題,下載最新的 VLC Player ,拿到最新的庫使用就行了。

  然後,下載了 VLC Player ,安裝,在安裝目錄里找到最新的 DLL 和插件包,覆蓋到項目里,果然再沒出現閃退的問題。

  又可以懶洋洋的靠在椅背上喝著客戶公司漂亮妹子做好的咖啡裝逼了,順便欣賞著咖啡上心形的拉花,YY著妹子豐滿的身材。。。

 

正文開始

  VLC Player 是一個功能非常非常強大的播放器,界面低調簡潔,完全不像其它播放器那樣有一個風騷又混亂的外觀。

   再看它支持播放的媒體文件格式,完甩 MediaPlayer 幾十條街: 

  在 GitHub 上有一個關於 VLC Player 的開源項目,叫 Vlc.DotNet,貌似也是基於播放器里的 DLL 封裝的類庫,地址是:https://github.com/ZeBobo5/Vlc.DotNet 。這個類庫功能很強大,但是功能強大也意味著比較複雜。我沒有使用這個程式包,而是網上找了一個簡單的直接映射 DLL 庫函數的方式實現的播放功能。

 

第一步:獲取 VLC 類庫。

  獲取 VLC 類庫有兩種方式:

  1,從上面那個開源項目 Vlc.DotNet 里,可以下載到整個項目的源碼和所用到的 VLC 庫文件,我們這裡只使用 VLC 的庫文件,如圖:

(為了以防客戶32位和64位系統一起使用,所以這裡使用了32位的庫x86)

  2,下載一個 VLC 播放器,安裝,然後在安裝目錄里能找到需要的類庫,如圖:

  我們只需要 libvlc.dll、libvlccore.dll 和 plugins 目錄,所以可以忽略其它文件。

  libvlc.dll、libvlccore.dll 文件中是 VLC 的庫函數,plugins 目錄里是 VLC 對各種不同媒體文件提供支持的插件。

 

第二步:映射、封裝 dll 庫函數。

   libvlc.dll、libvlccore.dll 這兩個不是.NET 類庫,所以沒辦法直接引用到我們的項目里,這裡我參考其他前輩們的示例,對其進行封裝,方便使用。

  因為代碼較長,所以這裡不直接貼出來了,需要的朋友可以在這裡下載 http://files.cnblogs.com/files/zhhh/VlcPlayerBase.zip

  代碼里封裝了 播放、暫停、停止、音量控制、進度控制等一些常用功能,以便後面使用。

  
第三步:使用

  封裝完以後就可以直接調用了,設計一個簡單的界面。如圖:

  添加相應的功能,就OK了。

  項目代碼可以從下麵鏈接下載:http://files.cnblogs.com/files/zhhh/VlcPlayer.zip

  

 
第四步:裝逼

  最後,項目運行之前,一定要將前面我們準備好的庫文件(libvlc.dll、libvlccore.dll 和 plugins 目錄) Copy 到程式運行根目錄,比如 Debug 目錄,如圖:

  Copy 完,就可以裝逼了。

  運行 -> 打開 -> 播放,非常完美,Pen Pineapple Apple Pen:

   

 

 
最後

  DLL 實際上是使用 VLC 的參數對播放器進行的配置和操作,對於這些參數的介紹,可以參考 VLC Player 安裝目錄下的 幫助文件 vlc-help.txt,如圖:

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 01 Linux環境準備 (本文在win10上使用 VMware12 + Ubuntu14.04) 步驟: 步驟: 1、JDK安裝及相關配置 2、Tomcat安裝及相關配置 2、Tomcat安裝及相關配置 3、Mysql安裝及相關配置 3、Mysql安裝及相關配置 詳細步驟: 詳細步驟: 1、JDK ...
  • ASP.NET Core 1.1 Preview 1於2016年10月25日發佈。這個版本包括許多偉大的新功能以及許多錯誤修複和一般的增強。 要將現有項目更新到ASP.NET Core 1.1 Preview 1,您需要執行以下操作: 1. 下載並安裝更新的.NET Core 1.1 Prevew ... ...
  • 使用了第三方的JS庫或框架,在VS中編寫JS代碼,發現真是個悲劇,完全只能手打,智能感知沒了,這不符合VS的一貫做風只要在寫代碼的JS文件加上以下代碼,就可以有智能感知了 說明:path內為使用的第三方JS庫或框架的js文件,如果文件沒有和在編碼的JS在同一目錄下,則要補全路徑 ...
  • 問題 怎樣用在 Web API 中創建 OData 服務。 解決方案 對於我們來說,在 Web API 中使用 OData最簡單的方式就是使用 ASP.NET 模板來創建Odata Controller。在 Controllers 文件夾上滑鼠右鍵->添加->新建項。 顯示一個如圖 12-1 的對話 ...
  • 今天去深圳溜達了一天,剛回來,看到首頁都是微軟大法好,看來離.NET的春天就差3個月了~~回到正題,這篇的教程講解下拉配置,詳情如下:... ...
  • 本文版權歸博客園和作者吳雙共同所有,轉載和爬蟲請註明原文地址:www.cnblogs.com/tdws 首先分享幾個振奮人心的新聞: 1.谷歌已經宣佈加入.NET基金會 2.微軟加入Linux基金會,繼續對Linux示好。換了CEO就是不一樣 3.微軟發佈VS For Mac! 第一步 下載dll ...
  • 從今天開始,正式進入Asp.net Core的開發,估計最近一段時間會經常寫博客了,記錄學些Asp.net Core中遇到的各種坑。 第一個問題:通過core編寫的webapi,預設返回的json會自動格式化為駝峰樣式,並沒有按照具體的類名來返回,如何讓其按照類名返回呢? 在Startup.cs全局 ...
  • 恢復內容開始 如何做到將客戶伺服器資料庫的備份,下載到本地的雲服務上? 在開發這個程式中中途也遇到了一下問題,下麵我將自己如何進解決的辦法寫出來供大家參考。 一.首先我需要進行描述一下問題: 1.比如有兩台伺服器A,B(雲伺服器) 將A中的伺服器中的資料庫的備份進行下載到B的雲服務中並保存。 2.當 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...