C#中的nVlc包装器

时间:2014-06-21 10:56:13

标签: c# vlc

我在nVLC中使用C#包装器。我只想知道在哪里可以提到从UDP Multicast中选择特定程序流的论点。参数如: - 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)
        {

        }

    }
}

1 个答案:

答案 0 :(得分:2)

我意识到这是一个迟到的回复,阿卜杜勒,但我遇到了同样的问题。答案是,VLC的参数可以在MediaPlayerFactory构造函数中传递。有一个覆盖接受一个字符串参数列表。