• 【LibVLCSharp、WPF】播放udp视频流


    一、在VLC中开启推送UDP流

     

     

     

     

     

    再打开一个VLC测试一下:

     

    注意:测试可以正常接收到UDP流之后要把上面这步打开的VLC关闭或停止播放,否则在下面的代码中无法播放(原因暂时没搞清楚,被坑了好久)

    XAML

    <Window x:Class="Test.Vlc.Udp.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:Test.Vlc.Udp"
            mc:Ignorable="d"
            xmlns:vlc="clr-namespace:LibVLCSharp.WPF;assembly=LibVLCSharp.WPF"
            Title="MainWindow" Height="450" Width="800">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <vlc:VideoView Background="LightBlue" x:Name="VideoViewer"/>
            <WrapPanel Grid.Row="1" HorizontalAlignment="Center">
                <Button Height="30" Width="100"  x:Name="Play" Content="播放" Click="Play_Click"/>
                <Button Height="30" Width="100"  x:Name="Stop" Content="停止" Click="Stop_Click" Margin="30,0"/>
            </WrapPanel>
        </Grid>
    </Window>

    CS

    using LibVLCSharp.Shared;
    using System;
    using System.Threading.Tasks;
    using System.Windows;
    
    namespace Test.Vlc.Udp
    {
        /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private async void Play_Click(object sender, RoutedEventArgs e)
            {
                await Task.Run(() =>
                {
                    Core.Initialize();
                    var _libvlc = new LibVLC();
                    _libvlc.Log += _libvlc_Log;
    
                    Application.Current.Dispatcher.Invoke(() => VideoViewer.MediaPlayer = new LibVLCSharp.Shared.MediaPlayer(_libvlc));
    
                    var _media = new Media(_libvlc, "udp://@127.0.0.1:1234", FromType.FromLocation); //var _media = new Media(_libvlc, "udp://@localhost:1234", FromType.FromLocation);
                     //_media.AddOption(":access=udp");
                     //_media.AddOption(":demux=mp4v");
    
                     //var _media = new Media(_libvlc, "rtsp://localhost:8554/111", FromType.FromLocation);
                     //_media.AddOption(":access=rtsp-tcp");
                    _media.AddOption(":clock-synchro=0");
                    _media.AddOption(":live-caching=0");
                    _media.AddOption(":network-caching=1000");
                    _media.AddOption(":file-caching=0");
                    _media.AddOption(":grayscale");
                    Application.Current.Dispatcher.Invoke(() => VideoViewer.MediaPlayer.Play(_media));
    
                });
            }
    
            private void _libvlc_Log(object sender, LogEventArgs e)
            {
                Console.WriteLine(e.FormattedLog);
            }
    
            private void Stop_Click(object sender, RoutedEventArgs e)
            {
                VideoViewer.MediaPlayer?.Stop();
                VideoViewer.MediaPlayer?.Dispose();
            }
        }
    }

  • 相关阅读:
    沙尘天气,但还是要坚持锻炼
    为了欧冠,堕落两天
    NRF24L01测试板子完成了
    昨天参加ti的研讨会了
    自我安慰一下
    功率W与dBm的对照表及关系
    短时间提高英语口语方法
    看了一个星期的欧洲杯,熬阿
    最近比较忙,项目较累
    后台获取js赋给服务器控件的值
  • 原文地址:https://www.cnblogs.com/144823836yj/p/15317915.html
Copyright © 2020-2023  润新知