前言
本文主要講述,在WPF中,借助Vlc.DotNet調(diào)用VLC類庫,實(shí)現(xiàn)視頻播功能,下面我們先來做開發(fā)前的準(zhǔn)備工作。
準(zhǔn)備工作
首先,我們創(chuàng)建一個(gè)項(xiàng)目WpfVLC,然后,進(jìn)入Neget搜索Vlc.DotNet,得到如下界面:
我們選擇Vlc.DotNet.Wpf,點(diǎn)擊安裝(這里我已經(jīng)安裝了,所以圖中顯示為卸載)。
然后,我們?nèi)LC官網(wǎng),下載VLC播放器。
VLC官網(wǎng):http://www.videolan.org/ <http://www.videolan.org/>
因?yàn)槲业碾娔X是64位的,所以我下載64位的VLC版本,如下圖:
?下載完成后,正常安裝即可,下載的文件截圖如下:
安裝完成后,我們找到安裝的具體位置并打開,如下圖:
在文件夾內(nèi)我們找到文件libvlc.dll,libvlccore.dll和文件夾plugins,然后將他們復(fù)制出來。
現(xiàn)在我們回到我們剛剛創(chuàng)建的項(xiàng)目WpfVLC,進(jìn)入文件目錄,打開debug文件夾,然后我們在其目錄下創(chuàng)建一個(gè)文件夾libvlc,如下:
然后,在在liblic下建立一個(gè)文件夾win-x64,如下:
再然后,我們將剛剛復(fù)制的vlc的三個(gè)文件,放到這個(gè)文件夾下,如下:
到此,我們的準(zhǔn)備工作就完成了,現(xiàn)在開始編碼。
使用Vlc.DotNet播放視頻
現(xiàn)在,我們進(jìn)入項(xiàng)目的代碼開發(fā)。
首先我們將項(xiàng)目設(shè)置為64位項(xiàng)目,因?yàn)槲覀兪褂玫腣LC是64的。
然后,我們打開MainWindow頁面。
在頁面命名空間引入的地方加入Vlc.DotNet的命名空間。
xmlns:vlc="clr-namespace:Vlc.DotNet.Wpf;assembly=Vlc.DotNet.Wpf"
接著,我們在頁面布局中加入VlcControl控件和打開文件、播放、停止的按鈕,如下:
<DockPanel DockPanel.Dock="Bottom"> <StackPanel Height="50"
DockPanel.Dock="Bottom" Orientation="Horizontal"> <Button Name="btnOpen"
Content="打開文件" Click="open_Click" Width="80"></Button> <Button Name="btnPause"
Content="暫停" Click="pause_Click" Width="50"></Button> <Button Name="btnStop"
Content="停止" Click="stop_Click" Width="50"></Button> </StackPanel> </DockPanel>
<vlc:VlcControl x:Name="VlcControl" />
然后,我們編寫xaml.cs文件的代碼,如下:
public partial class MainWindow : Window { private string filePath; public
MainWindow() { InitializeComponent(); } private void Window_Loaded(object
sender, RoutedEventArgs e) { var currentAssembly = Assembly.GetEntryAssembly();
var currentDirectory = new FileInfo(currentAssembly.Location).DirectoryName;
var libDirectory = new DirectoryInfo(System.IO.Path.Combine(currentDirectory,
"libvlc", IntPtr.Size == 4 ? "win-x86" : "win-x64"));
this.VlcControl.SourceProvider.CreatePlayer(libDirectory); } private void
open_Click(object sender, RoutedEventArgs e) { OpenFileDialog ofd = new
OpenFileDialog(); ofd.Multiselect = false; ofd.Title = "請選擇視頻文件"; var result =
ofd.ShowDialog(); if (result == System.Windows.Forms.DialogResult.OK) {
filePath = ofd.FileName; try { btnPause.Content = "暫停";
this.VlcControl.SourceProvider.MediaPlayer.Play(new Uri(filePath)); } catch
(Exception ex) { } } } public void pause_Click(object sender, RoutedEventArgs
e) { if (btnPause.Content.ToString() == "播放") { btnPause.Content = "暫停";
this.VlcControl.SourceProvider.MediaPlayer.Play(); } else { btnPause.Content =
"播放"; this.VlcControl.SourceProvider.MediaPlayer.Pause(); } } private void
stop_Click(object sender, RoutedEventArgs e) { new Task(() => {
this.VlcControl.SourceProvider.MediaPlayer.Stop();//這里要開線程處理,不然會(huì)阻塞播放
}).Start(); } }
這樣,我們就完成了最基本的視頻播放、暫停、停止的功能。
可以看到,播放、暫停、停止的代碼非常簡單,就是調(diào)用控件的play,pause,stop函數(shù)即可。
因?yàn)閂LC非常優(yōu)秀,可以支持多種格式的文件播放,所以我們寫的這個(gè)播放器也就可以打開任意類型的視頻文件。
播放界面如下:
現(xiàn)在,加入Slider控制播放進(jìn)度和音量。
Slider樣式,參考如下文章:
WPF依賴屬性的正確學(xué)習(xí)方法 <https://www.cnblogs.com/kiba/p/11149147.html>
WPF滑塊控件(Slider)的自定義樣式 <https://www.cnblogs.com/kiba/p/11253686.html>
VlcControl控制播放進(jìn)度的方法很簡單,如下:
private void Slider1_DragCompleted(object sender,
System.Windows.Controls.Primitives.DragCompletedEventArgs e) { var position =
(float)(slider1.Value / slider1.Maximum); if (position == 1) { position =
0.99f; } this.VlcControl.SourceProvider.MediaPlayer.Position =
position;//Position為百分比,要小于1,等于1會(huì)停止 }
控制播放聲音的方法如下:
private void Slider2_DragCompleted(object sender,
System.Windows.Controls.Primitives.DragCompletedEventArgs e) {
//Audio.Volume:音量的百分比,值在0—200之間
this.VlcControl.SourceProvider.MediaPlayer.Audio.Volume = (int)slider2.Value; }
這樣我們的播放器就開發(fā)完成了。
最終界面如下:
播放其他視頻源
播放RTSP
通過上面的代碼編寫,我們了解到了,在C#里使用VLC播放視頻的代碼非常簡單,只要在Play函數(shù)中寫入地址即可。
那么播放RTSP自然是同理,只要在Play中寫入RTSP的地址即可,如下:
this.VlcControl.SourceProvider.MediaPlayer.Play(new
Uri(rtsp://192.168.1.111));
播放攝像頭
播放攝像頭在這里也很簡單,只是Play的入?yún)⑸晕⒁⒁庖幌录纯?,如下?br>string mrl = @"dshow:// "; string optVideo = @":dshow-vdev=攝像頭設(shè)備名"; //string
optAudio = @":dshow-adev=音頻設(shè)備名"; string size = ":dshow-size=800";
this.VlcControl.SourceProvider.MediaPlayer.Play(mrl, optVideo, size);
----------------------------------------------------------------------------------------------------
到此C#開發(fā)可播放攝像頭及任意格式視頻的播放器完成了。
代碼已經(jīng)傳到Github上了,歡迎大家下載。
Github地址:https://github.com/kiba518/WpfVLC <https://github.com/kiba518/WpfVLC>
----------------------------------------------------------------------------------------------------
注:此文章為原創(chuàng),任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處!
若您覺得這篇文章還不錯(cuò),請點(diǎn)擊下方的【推薦】,非常感謝!
https://www.cnblogs.com/kiba/p/11303137.html
<https://www.cnblogs.com/kiba/p/11303137.html>
?
熱門工具 換一換