c#中的nVlc包装器

本文关键字:包装 nVlc 中的 | 更新日期: 2023-09-27 18:09:33

我在C#中使用nVLC包装器。我只是想知道,在哪里我可以提到从UDP多播中选择特定程序流的参数。参数如下:——program=1

using System;
using System.ComponentModel;
using System.Windows.Forms;
using Declarations;
using Declarations.Events;
using Declarations.Media;
using Declarations.Players;
using Implementation;
using System.Linq;
namespace nVLC_Demo_WinForms
{
    public partial class Form1 : Form
    {
        IMediaPlayerFactory m_factory;
        IDiskPlayer m_player;
        IMedia m_media;
        string output =
  @":sout=#transcode:file{dst=C:''Users''Abdul''Desktop''test''lakha.mp4}";

        public Form1()
        {
            InitializeComponent();
            m_factory = new MediaPlayerFactory(true);
            m_player = m_factory.CreatePlayer<IDiskPlayer>();
            m_player.Events.PlayerPositionChanged += new EventHandler<MediaPlayerPositionChanged>(Events_PlayerPositionChanged);
            m_player.Events.TimeChanged += new EventHandler<MediaPlayerTimeChanged>(Events_TimeChanged);
            m_player.Events.MediaEnded += new EventHandler(Events_MediaEnded);
            m_player.Events.PlayerStopped += new EventHandler(Events_PlayerStopped);
            m_player.WindowHandle = panel1.Handle;
            trackBar2.Value = m_player.Volume > 0 ? m_player.Volume : 0;
            UISync.Init(this);
        }
        void Events_PlayerStopped(object sender, EventArgs e)
        {
            UISync.Execute(() => InitControls());
        }
        void Events_MediaEnded(object sender, EventArgs e)
        {
            UISync.Execute(() => InitControls());
        }
        private void InitControls()
        {
            trackBar1.Value = 0;
            lblTime.Text = "00:00:00";
            lblDuration.Text = "00:00:00";
        }
        void Events_TimeChanged(object sender, MediaPlayerTimeChanged e)
        {
            UISync.Execute(() => lblTime.Text = TimeSpan.FromMilliseconds(e.NewTime).ToString().Substring(0, 8));
        }
        void Events_PlayerPositionChanged(object sender, MediaPlayerPositionChanged e)
        {
            UISync.Execute(() => trackBar1.Value = (int)(e.NewPosition * 100));
        }
        private void LoadMedia()
        {
            OpenFileDialog ofd = new OpenFileDialog();
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = ofd.FileName;
            }
        }
        void Events_StateChanged(object sender, MediaStateChange e)
        {
            UISync.Execute(() => label1.Text = e.NewState.ToString());
        }
        void Events_DurationChanged(object sender, MediaDurationChange e)
        {
            UISync.Execute(() => lblDuration.Text = TimeSpan.FromMilliseconds(e.NewDuration).ToString().Substring(0, 8));
        }
        private void button5_Click(object sender, EventArgs e)
        {
            LoadMedia();
        }
        private void button3_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(textBox1.Text))
            {
                m_media = m_factory.CreateMedia<IMedia>(textBox1.Text, output);
                m_media.Events.DurationChanged += new EventHandler<MediaDurationChange>(Events_DurationChanged);
                m_media.Events.StateChanged += new EventHandler<MediaStateChange>(Events_StateChanged);
                m_media.Events.ParsedChanged += new EventHandler<MediaParseChange>(Events_ParsedChanged);
                m_player.Open(m_media);
                m_media.Parse(true);
                m_player.Play();
            }
            else
            {
                //errorProvider1.SetError(textBox1, "Please select media path first !");
            }
        }
        void Events_ParsedChanged(object sender, MediaParseChange e)
        {
            Console.WriteLine(e.Parsed);
        }
        private void trackBar2_Scroll(object sender, EventArgs e)
        {
            m_player.Volume = trackBar2.Value;
        }
        private void trackBar1_Scroll(object sender, EventArgs e)
        {
            m_player.Position = (float)trackBar1.Value / 100;
        }
        private void button4_Click(object sender, EventArgs e)
        {
            m_player.Stop();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            m_player.Pause();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            m_player.ToggleMute();
            button1.Text = m_player.Mute ? "Unmute" : "Mute";
        }
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            errorProvider1.Clear();
        }
        private class UISync
        {
            private static ISynchronizeInvoke Sync;
            public static void Init(ISynchronizeInvoke sync)
            {
                Sync = sync;
            }
            public static void Execute(Action action)
            {
                Sync.BeginInvoke(action, null);
            }
        }
        private void lblDuration_Click(object sender, EventArgs e)
        {
        }
    }
}

c#中的nVlc包装器

我知道这是一个有点晚的答复,阿卜杜勒,但我有同样的问题。答案是,VLC的参数可以在MediaPlayerFactory构造函数中传递。有一个重写可以接受参数的字符串列表。