zoukankan      html  css  js  c++  java
  • [RTSP]WPF用VLC显示RTSP视频

    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

  • 相关阅读:
    IronPython初体验
    HOWTO: 部署时附带安装MSDE
    翻译:FileSystemWatcher Tips
    再见了 母校!
    招聘.net开发工程师(2名)和ASP开发工程师(1名)工作地点:北京
    年终感言提纲
    可以不讲,但不可以不懂:英语实用脏话精选
    一个混乱的时期
    异步消息的传递-回调机制
    搞c++的 大家看看
  • 原文地址:https://www.cnblogs.com/javalinux/p/14548125.html
Copyright © 2011-2022 走看看