WPF播放器

最近由于工作需要,需要做一个播放软件,在网上参考了很多例子,园子里有很多代码。其中最多的就是wpf自带的MediaElement控件,或者VLC视频播放器。

先附我自己查询资料的链接:

MediaEmelent控件例子

http://www.cnblogs.com/gnielee/archive/2010/05/06/wpf4-media-player-mediaelement.html

http://blog.zhigui.org/2011/04/wpf-simple-player/

VLC

http://www.cnblogs.com/Gavin001/archive/2013/05/01/3053465.html

由于我电脑可能是Ghost系统 或者由于被优化了。我发现我的MediaElement无法播放任何视频。通过控制面板关闭媒体中心之后,再也打不开了。真是坑!!!

只能放弃自带控件,查到有一个VLC的NET版。so。。。

附vlc.dotnet的github链接

https://github.com/ZeBobo5/Vlc.DotNet

首先,自己在nuget里面下载所需要的扩展:

完成之后 就看示例代码咯,github里面是有example的

 1 <Window x:Class="Vlc.DotNet.Wpf.Samples.MainWindow"
 2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 5         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 6         xmlns:local="clr-namespace:Vlc.DotNet.Wpf.Samples"
 7         xmlns:wpf="clr-namespace:Vlc.DotNet.Wpf;assembly=Vlc.DotNet.Wpf"
 8         mc:Ignorable="d"
 9         Title="MainWindow" Height="350" Width="525">
10     <Grid>
11         <Grid.RowDefinitions>
12             <RowDefinition Height="*"/>
13             <RowDefinition Height="Auto"/>
14             <RowDefinition Height="Auto"/>
15             <RowDefinition Height="Auto"/>
16             <RowDefinition Height="Auto"/>
17             <RowDefinition Height="Auto"/>
18         </Grid.RowDefinitions>
19 
20         <wpf:VlcControl Grid.Row="0" x:Name="myControl"/>
21 
22         <Button Grid.Row="1" Click="OnPlayButtonClick">Play</Button>
23         <Button Grid.Row="2" Click="OnForwardButtonClick" x:Name="Forward">Forward</Button>
24         <Button Grid.Row="3" Click="GetLength_Click" x:Name="GetLength">Get Length</Button>
25         <Button Grid.Row="4" Click="GetCurrentTime_Click" x:Name="GetCurrentTime">Get Current Time</Button>
26         <Button Grid.Row="5" Click="SetCurrentTime_Click" x:Name="SetCurrentTime">Set Current Time to 5s</Button>
27     </Grid>
28 </Window>

首先加上 xmlns:wpf="clr-namespace:Vlc.DotNet.Wpf;assembly=Vlc.DotNet.Wpf"

然后加上 <wpf:VlcControl Grid.Row="0" x:Name="myControl"/>

 1 using System;
 2 using System.IO;
 3 using System.Reflection;
 4 using System.Windows;
 5 
 6 namespace Vlc.DotNet.Wpf.Samples
 7 {
 8     /// <summary>
 9     /// Interaction logic for MainWindow.xaml
10     /// </summary>
11     public partial class MainWindow : Window
12     {
13         public MainWindow()
14         {
15             InitializeComponent();
16             myControl.MediaPlayer.VlcLibDirectoryNeeded += OnVlcControlNeedsLibDirectory;
17         }
18 
19         private void OnVlcControlNeedsLibDirectory(object sender, Forms.VlcLibDirectoryNeededEventArgs e)
20         {
21             var currentAssembly = Assembly.GetEntryAssembly();
22             var currentDirectory = new FileInfo(currentAssembly.Location).DirectoryName;
23             if (currentDirectory == null)
24                 return;
25             if (AssemblyName.GetAssemblyName(currentAssembly.Location).ProcessorArchitecture == ProcessorArchitecture.X86)
            //vlc的dll路径,自己下载vlc播放器里面的libvlc.dll libvlccore.dll以及plugins文件夹
26                 e.VlcLibDirectory = new DirectoryInfo(Path.Combine(currentDirectory, @"..\..\..\lib\x86\"));
27             else
28                 e.VlcLibDirectory = new DirectoryInfo(Path.Combine(currentDirectory, @"..\..\..\lib\x64\"));
29         }
30 
31         private void OnPlayButtonClick(object sender, RoutedEventArgs e)
32         {
33             myControl.MediaPlayer.Play(new Uri("http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_480p_surround-fix.avi"));
34             //myControl.MediaPlayer.Play(new FileInfo(@"..\..\..\Vlc.DotNet\Samples\Videos\BBB trailer.mov"));
35         }
36 
37         private void OnForwardButtonClick(object sender, RoutedEventArgs e)
38         {
39             myControl.MediaPlayer.Rate = 2;
40         }
41 
42         private void GetLength_Click(object sender, RoutedEventArgs e)
43         {
44             GetLength.Content = myControl.MediaPlayer.Length + " ms";
45         }
46 
47         private void GetCurrentTime_Click(object sender, RoutedEventArgs e)
48         {
49             GetCurrentTime.Content = myControl.MediaPlayer.Time + " ms";
50         }
51 
52         private void SetCurrentTime_Click(object sender, RoutedEventArgs e)
53         {
54             myControl.MediaPlayer.Time = 5000;
55             SetCurrentTime.Content = myControl.MediaPlayer.Time + " ms";
56         }
57     }
58 }

代码地址为:https://github.com/ZeBobo5/Vlc.DotNet/blob/master/src/Samples/Vlc.DotNet.Wpf.Samples/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏游戏杂谈

Android判断用户的网络类型(2/3/4G、wifi)

很多时候需要先判断当前用户的网络,才会继续之后的一些处理逻辑。但网络类型获取这一块,我用我自己的的手机调试时遇到一些问题,这里记录一下。

15020
来自专栏用户2442861的专栏

Android游戏开发十日通(6)- 太空大战

http://blog.csdn.net/silangquan/article/details/16921035

14320
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(53)-工作流设计-我的批阅

前言:由于工作原因工作流一直没时间更新,虽然没有更新,但是批阅和申请差不多,改变一下数据的状态字段就行,有几个园友已经率先完成了 说句实话,一个工作流用文章表达...

369110
来自专栏hbbliyong

项目重构--使用策略模式

  大家先看下下面这段代码有什么感受? using System; using System.Collections.Generic; using Syste...

40190
来自专栏ascii0x03的安全笔记

IE的BHO通过IHTMLDocument2接口获得网页源代码

参考了凤之焚的专栏:http://blog.csdn.net/lion_wing/article/details/769742 但是他的源码有些问题,即IHTM...

35250
来自专栏菩提树下的杨过

Silverlight Telerik控件学习:GridView双向绑定

做过WinForm数据库开发的人,一定有类似经历:DataGrid绑定后,如果允许行编辑,数据一顿修改后,想批量保存修改后的结果,通常是将DataGrid的所有...

23850
来自专栏WOLFRAM

Mathematica带您一起迎接五一

19640
来自专栏施炯的IoT开发专栏

//build->//learn->//publish

在今年的Build大会上,微软发布了Windows Phone 8.1,以及universal Windows apps开发策略。在接下来的两个月中,会有两个全...

208100
来自专栏菩提树下的杨过

ExtJs学习笔记(3)_GridPanel[XML做数据源]

这一节,将学习到除了用JSON做GridPanel的数据源外,还可以使用XML 一。静态示例 1.xml文件内容: <?xml version="1.0...

23880
来自专栏一“技”之长

iOS使用UIImagePickerController调用系统相机、相册与图库

        UIImagePickerController是系统封装好的一个导航视图控制器,使用其开发者可以十分方便的进行相机相册相关功能的调用。UIIma...

29610

扫码关注云+社区

领取腾讯云代金券