前言html
本文主要講述,在WPF中,藉助Vlc.DotNet調用VLC類庫,實現視頻播功能,下面咱們先來作開發前的準備工做。git
準備工做github
首先,咱們建立一個項目WpfVLC,而後,進入Neget搜索Vlc.DotNet,獲得以下界面:ide
咱們選擇Vlc.DotNet.Wpf,點擊安裝(這裏我已經安裝了,因此圖中顯示爲卸載)。函數
而後,咱們去VLC官網,下載VLC播放器。工具
VLC官網:http://www.videolan.org/佈局
由於個人電腦是64位的,因此我下載64位的VLC版本,以下圖:post
下載完成後,正常安裝便可,下載的文件截圖以下:學習
安裝完成後,咱們找到安裝的具體位置並打開,以下圖:優化
在文件夾內咱們找到文件libvlc.dll,libvlccore.dll和文件夾plugins,而後將他們複製出來。
如今咱們回到咱們剛剛建立的項目WpfVLC,進入文件目錄,打開debug文件夾,而後咱們在其目錄下建立一個文件夾libvlc,以下:
而後,在在liblic下創建一個文件夾win-x64,以下:
再而後,咱們將剛剛複製的vlc的三個文件,放到這個文件夾下,以下:
到此,咱們的準備工做就完成了,如今開始編碼。
使用Vlc.DotNet播放視頻
如今,咱們進入項目的代碼開發。
首先咱們將項目設置爲64位項目,由於咱們使用的VLC是64的。
而後,咱們打開MainWindow頁面。
在頁面命名空間引入的地方加入Vlc.DotNet的命名空間。
1
|
xmlns:vlc=
"clr-namespace:Vlc.DotNet.Wpf;assembly=Vlc.DotNet.Wpf"
|
接着,咱們在頁面佈局中加入VlcControl控件和打開文件、播放、中止的按鈕,以下:
1
2
3
4
5
6
7
8
|
<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文件的代碼,以下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
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();
//這裏要開線程處理,否則會阻塞播放
}).Start();
}
}
|
這樣,咱們就完成了最基本的視頻播放、暫停、中止的功能。
能夠看到,播放、暫停、中止的代碼很是簡單,就是調用控件的play,pause,stop函數便可。
由於VLC很是優秀,能夠支持多種格式的文件播放,因此咱們寫的這個播放器也就能夠打開任意類型的視頻文件。
播放界面以下:
如今,加入Slider控制播放進度和音量。
Slider樣式,參考以下文章:
VlcControl控制播放進度的方法很簡單,以下:
1
2
3
4
5
6
7
8
9
|
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會中止
}
|
控制播放聲音的方法以下:
1
2
3
4
5
|
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;
}
|
這樣咱們的播放器就開發完成了。
最終界面以下:
播放其餘視頻源
播放RTSP
經過上面的代碼編寫,咱們瞭解到了,在C#裏使用VLC播放視頻的代碼很是簡單,只要在Play函數中寫入地址便可。
那麼播放RTSP天然是同理,只要在Play中寫入RTSP的地址便可,以下:
1
|
this
.VlcControl.SourceProvider.MediaPlayer.Play(
new
Uri(rtsp:
//192.168.1.111));
|
播放攝像頭
播放攝像頭在這裏也很簡單,只是Play的入參稍微要注意一下便可,以下:
1
2
3
4
5
|
string
mrl =
@"dshow:// "
;
string
optVideo =
@":dshow-vdev=攝像頭設備名"
;
//string optAudio = @":dshow-adev=音頻設備名";
string
size =
":dshow-size=800"
;
this
.VlcControl.SourceProvider.MediaPlayer.Play(mrl, optVideo, size);
|
----------------------------------------------------------------------------------------------------
到此C#開發可播放攝像頭及任意格式視頻的播放器完成了。
代碼已經傳到Github上了,歡迎你們下載。
Github地址:https://github.com/kiba518/WpfVLC
----------------------------------------------------------------------------------------------------
注:此文章爲原創,任何形式的轉載都請聯繫做者得到受權並註明出處!
若您以爲這篇文章還不錯,請點擊下方的【推薦】,很是感謝!
本文已獨家受權給腳本之家(ID:jb51net)公衆號發佈!