當我們需要在C#中實現視頻播放器的時候,可以使用如下幾種方法:
一、使用MediaPlayer ActiveX控件
在C#中支持視屏播放器最簡單的方式就是插入MediaPlayer控件了,在WPF中還內置了對MediaPlayer的封裝MediaElement,可以通過它直接打造一個播放器。
使用MediaPlayer控件的好處是簡單,它已經基本封裝了常用的功能,只需要很少的幾行代碼就可以實現媒體播放器的功能。並且,由於操作系統中已經內置了MediaPlayer,不需要額外集成播放器的文件。
不過,它的一個最大的問題是視頻支持格式有限。這個問題本身並不嚴重,在十年前就可以通過安裝Media Player Codec Pack 的方式來擴展其支持格式的。對於一些私有格式的視頻文件播放,也可以采用這種方案。
這種方式本身還是非常強大的,不過它帶來了插件的安裝問題了。如果你的程序是被許多客戶端所使用的話,還是會有不少的麻煩的。
-
插件不容易被集成安裝
-
安裝完了后又不少參數要設置,並且不容易通過程序來設置它
-
第三方插件容易和客戶端環境沖突,出問題不容易定位和處理
-
插件更新不方便
當然,如果客戶端較少,可以人工維護的話,用MediaPlayer也不失為一種簡單易行的方案。
二、使用VLC ActiveX控件
為了免除插件的麻煩,一種替換方案是直接使用一個比較強大的播放器VLC Player,通過它的ActiveX控件實現視頻播放的功能。
該方法本質上和方法一一樣,是調用的ActiveX控件,好處是可以非常快捷的實現播放器的功能。
axVLCPlugin21.playlist.add("mms://new-media/publishingpoint1", "", " :mms-caching=1000");
axVLCPlugin21.playlist.play();
這種方式和前面的方法一樣,涉及到第三方程序的安裝。不過,使用VLC的好處是,它的安裝和更新比MediaPlayer的插件簡單一些。出問題的幾率也少一些。但一樣存在acitvex控件的安裝、注冊、更新和沖突問題。
三、使用LIB VLC庫
這種方式依然是依賴的VLC播放器的功能,不過它並不使用VLC的activex控件,通過pinvoke vlc的dll實現播放器的功能。相當於利用vlc的api實現了一個vlc的播放器。
Github上也有比較完善的對它的封裝:https://github.com/ZeBobo5/Vlc.DotNet。如果要詳細了解其結構可以參看園子里的這篇入門文章: c#萬能視頻播放器
這種方式比較成熟了,網上對libvlc的介紹非常多,集成起來還是非常容易的。出問題時相應的定位也比較容易,可以直接用vlc player對比。
這種方式比起直接使用VLC ActiveX來,開發起來要麻煩一些,但是可以實現一些更底層的控制。另外,由於不需要安裝部署和更新都是可控的。可以滿足絕大部分情況下的視頻播放需要。
四、使用FFMPEG庫
LibVLC的方式比雖然算簡單易用,但是如果我們想實現一些更底層的功能時,此時就要則可以使用ffmpeg庫了。實際上,vlc player的底層也是依賴於ffmpeg庫的實現的, 他們之間是這樣的一個關系。
使用ffmpeg的時,就擁有了更加底層的api了,此時可以實現更加強大的功能。並且它是跨平台的,對於移動平台的音視頻開發也是非常有幫助的。
關於ffmpeg的介紹,網上還是有比較多的文章的,不過它相關的內容也比較多,后續我也會寫一些文章介紹一些我使用過程中的一些心得。
如果只是想實現一個播放器的話,網上也有一些現成的封裝的。
https://github.com/unosquare/ffmediaelement
也有文章介紹這個庫如何使用:
https://github.com/DG-Wangtao/FFMEVideoPlayer
這個庫本身沒有什么大問題,基本上可以滿足大多數場景的使用。但我試用了一下,一些異常的情況下的處理還是不如vlc來的完善。
轉自:https://www.cnblogs.com/TianFang/p/7827988.html