title: ‘[RTSP]WPF用VLC显示RTSP视频’
date: 2017-11-30 22:48:38
tags:
WPF用VLC显示RTSP视频
场景
vlc是一个开源的解码库,有很多的版本当然也有WPF的版本,但是WPF其实是WinForm的基础上实现的。所有控件不自己处理的话,一直处于顶层。但它可以自带解码和显示的功能
操作
下载对VLC播放器,找到安装目录把libvlc.dll,libvlccore.dll,和plugins文件夹拿出来,插件看自己的需要,用多少加多少。一般方便管理我们都会在工程目录下新建一个文件夹如libvlc_x64,32位的可以x86。
之后我们引用这些dll
我们在xaml中添加VlcControl,代码如下
<Window x:Class=”TestVideo.MainWindow”
        xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”
        xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”
        xmlns:d=”http://schemas.microsoft.com/expression/blend/2008″
        xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006″
        xmlns:local=”clr-namespace:TestVideo”
        xmlns:wpf=”clr-namespace:Vlc.DotNet.Wpf;assembly=Vlc.DotNet.Wpf”
        mc:Ignorable=”d”
        Title=”MainWindow” Height=”350″ Width=”525″>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height=”*”/>
            <RowDefinition Height=”Auto”/>
            <RowDefinition Height=”Auto”/>
            <RowDefinition Height=”Auto”/>
            <RowDefinition Height=”Auto”/>
            <RowDefinition Height=”Auto”/>
        </Grid.RowDefinitions>
<wpf:VlcControl Grid.Row=”0″ x:Name=”myControl”/>
        <Button Grid.Row=”1″ Click=”OnPlayButtonClick”>Play</Button>
        <Button Grid.Row=”2″ Click=”OnForwardButtonClick” x:Name=”Forward”>Forward</Button>
        <Button Grid.Row=”3″ Click=”GetLength_Click” x:Name=”GetLength”>Get Length</Button>
        <Button Grid.Row=”4″ Click=”GetCurrentTime_Click” x:Name=”GetCurrentTime”>Get Current Time</Button>
        <Button Grid.Row=”5″ Click=”SetCurrentTime_Click” x:Name=”SetCurrentTime”>Set Current Time to 5s</Button>
    </Grid>
</Window> 
在播放前要指定引用插件和库所在的路径,我们在load里面,自己的工程不要写在这,会影响性成的。
  // Use 64 bits library
            this.myControl.MediaPlayer.VlcLibDirectory = new DirectoryInfo(System.IO.Path.Combine(Environment.CurrentDirectory, “libvlc_x64”));
            var options = new string[]
{
 // VLC options can be given here. Please refer to the VLC command line documentation.
};
            this.myControl.MediaPlayer.VlcMediaplayerOptions = options;
            // Load libvlc libraries and initializes stuff. It is important that the options (if you want to pass any) and lib directory are given before calling this method.
            this.myControl.MediaPlayer.EndInit(); 
我们可以做的操作就很多了。如下
        private void OnPlayButtonClick(object sender, RoutedEventArgs e)
        {
              myControl.MediaPlayer.Play(new Uri(“rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov”));
         //本地视频写写本地路径
        }
        private void OnForwardButtonClick(object sender, RoutedEventArgs e)
        {
            myControl.MediaPlayer.Rate = 2;
        }
        private void GetLength_Click(object sender, RoutedEventArgs e)
        {
            GetLength.Content = myControl.MediaPlayer.Length + ” ms”;
        }
        private void GetCurrentTime_Click(object sender, RoutedEventArgs e)
        {
            GetCurrentTime.Content = myControl.MediaPlayer.Time + ” ms”;
        }
        private void SetCurrentTime_Click(object sender, RoutedEventArgs e)
        {
            myControl.MediaPlayer.Time = 5000;
            SetCurrentTime.Content = myControl.MediaPlayer.Time + ” ms”;
        } 
效果如下
提示
就是视频的黑框,所以大小自己要处理好
wpf控件其实是winform来实现的
vlc解码前面会有一段预加载,
源码
所有的东西都有自己的优点和缺点,不要拿短来比长。做界面做样式只是一个模块,要有整体把握,不然软件或者网站都是问题,代码维护也是问题。
————————————————
版权声明:本文为CSDN博主「Ants-double」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liyangyang08/article/details/78682180