Пример #1
0
        private void VideoLoadedTimer_Tick(object sender, EventArgs e)
        {
            _videoLoadedTimer.Stop();
            const int mpvEventFileLoaded = 8;
            int       l = 0;

            while (l < 10000)
            {
                Application.DoEvents();
                try
                {
                    if (_mpvHandle != IntPtr.Zero)
                    {
                        var eventIdHandle = _mpvWaitEvent(_mpvHandle, 0);
                        var eventId       = Convert.ToInt64(Marshal.PtrToStructure(eventIdHandle, typeof(int)));
                        if (eventId == mpvEventFileLoaded)
                        {
                            break;
                        }
                    }
                    l++;
                }
                catch
                {
                    return;
                }
            }
            Application.DoEvents();
            OnVideoLoaded?.Invoke(this, null);
            Application.DoEvents();
            Pause();
        }
Пример #2
0
        private void OnCopyData(object sender, EventArgs e)
        {
            var message    = (Message)sender;
            var cds        = (NativeMethods.CopyDataStruct)Marshal.PtrToStructure(message.LParam, typeof(NativeMethods.CopyDataStruct));
            var command    = cds.dwData.ToUInt32();
            var param      = Marshal.PtrToStringAuto(cds.lpData);
            var multiParam = param.Split('|');

            switch (cds.dwData.ToUInt32())
            {
            case MpcHcCommand.Connect:
                _positionTimer.Stop();
                _mpcHandle = (IntPtr)Convert.ToInt64(Marshal.PtrToStringAuto(cds.lpData));
                SendMpcMessage(MpcHcCommand.OpenFile, _videoFileName);
                _positionTimer.Start();
                break;

            case MpcHcCommand.PlayMode:
                _playMode = param;
                if (param == ModePlay && _loaded == 0)
                {
                    _loaded = 1;
                    if (!HijackMpcHc())
                    {
                        Application.DoEvents();
                        HijackMpcHc();
                    }
                }
                break;

            case MpcHcCommand.NowPlaying:
                if (_loaded == 1)
                {
                    _loaded            = 2;
                    _durationInSeconds = double.Parse(multiParam[4], CultureInfo.InvariantCulture);
                    Pause();
                    Resize(_initialWidth, _initialHeight);
                    if (OnVideoLoaded != null)
                    {
                        OnVideoLoaded.Invoke(this, new EventArgs());
                    }
                    SendMpcMessage(MpcHcCommand.SetSubtitleTrack, "-1");
                }
                break;

            case MpcHcCommand.NotifyEndOfStream:
                if (OnVideoEnded != null)
                {
                    OnVideoEnded.Invoke(this, new EventArgs());
                }
                break;

            case MpcHcCommand.CurrentPosition:
                _positionInSeconds = double.Parse(param, CultureInfo.InvariantCulture);
                break;
            }
        }
Пример #3
0
 private void VideoLoaderRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
 {
     if (OnVideoLoaded != null)
     {
         try
         {
             OnVideoLoaded.Invoke(_quartzFilgraphManager, new EventArgs());
         }
         catch { }
     }
     _videoEndTimer = null;
 }
Пример #4
0
        private void VideoLoadedTimer_Tick(object sender, EventArgs e)
        {
            _videoLoadedTimer.Stop();
            int i = 0;

            while (!IsPlaying && i < 50)
            {
                System.Threading.Thread.Sleep(100);
                i++;
            }
            Pause();
            _libvlc_video_set_spu?.Invoke(_mediaPlayer, -1); // turn of embedded subtitles
            OnVideoLoaded?.Invoke(_mediaPlayer, new EventArgs());
        }
Пример #5
0
        private void VideoLoadedTimer_Tick(object sender, EventArgs e)
        {
            int i = 0;

            while (!IsPlaying && i < 50)
            {
                System.Threading.Thread.Sleep(100);
                i++;
            }
            NativeMethods.libvlc_media_player_pause(_mediaPlayer);
            _videoLoadedTimer.Stop();

            if (OnVideoLoaded != null)
            {
                OnVideoLoaded.Invoke(_mediaPlayer, new EventArgs());
            }
        }
Пример #6
0
        private void VideoLoadedTimer_Tick(object sender, EventArgs e)
        {
            _videoLoadedTimer.Stop();
            int i     = 0;
            int state = VlcState;

            while (!IsPlaying && i < 50)
            {
                System.Threading.Thread.Sleep(100);
                i++;
                state = VlcState;
            }
            Pause();

            if (OnVideoLoaded != null)
            {
                OnVideoLoaded.Invoke(_mediaPlayer, new EventArgs());
            }
        }
Пример #7
0
        private void OnCopyData(object sender, EventArgs e)
        {
            var message    = (Message)sender;
            var cds        = (NativeMethods.CopyDataStruct)Marshal.PtrToStructure(message.LParam, typeof(NativeMethods.CopyDataStruct));
            var command    = cds.dwData.ToUInt32();
            var param      = Marshal.PtrToStringAuto(cds.lpData);
            var multiParam = new string[0];

            if (param != null)
            {
                multiParam = param.Split('|');
            }

            switch (command)
            {
            case MpcHcCommand.Connect:
                _positionTimer.Stop();
                _mpcHandle = (IntPtr)Convert.ToInt64(Marshal.PtrToStringAuto(cds.lpData));
                SendMpcMessage(MpcHcCommand.OpenFile, _videoFileName);
                _positionTimer.Start();
                break;

            case MpcHcCommand.PlayMode:
                _playMode = param;
                if (param == ModePlay && _loaded == 0)
                {
                    _loaded = 1;
                    if (!HijackMpcHc())
                    {
                        Application.DoEvents();
                        HijackMpcHc();
                    }
                }
                Application.DoEvents();
                HideMpcPlayerWindow();
                break;

            case MpcHcCommand.NowPlaying:
                if (_loaded == 1)
                {
                    _loaded = 2;

                    _durationInSeconds = 5000;
                    double d;
                    if (multiParam.Length >= 5 && double.TryParse(multiParam[4].Replace(",", ".").Trim(), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out d))
                    {
                        _durationInSeconds = d;
                    }
                    else if (multiParam.Length >= 1 && double.TryParse(multiParam[multiParam.Length - 1].Replace(",", ".").Trim(), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out d))
                    {
                        _durationInSeconds = d;
                    }

                    Pause();
                    Resize(_initialWidth, _initialHeight);
                    if (OnVideoLoaded != null)
                    {
                        OnVideoLoaded.Invoke(this, new EventArgs());
                    }
                    SendMpcMessage(MpcHcCommand.SetSubtitleTrack, "-1");

                    // be sure to hide MPC
                    _hideMpcTimerCount     = 20;
                    _hideMpcTimer.Interval = 100;
                    _hideMpcTimer.Tick    += (o, args) =>
                    {
                        _hideMpcTimer.Stop();
                        if (_hideMpcTimerCount > 0)
                        {
                            Application.DoEvents();
                            HideMpcPlayerWindow();
                            _hideMpcTimerCount--;
                            _hideMpcTimer.Start();
                        }
                    };
                    _hideMpcTimer.Start();
                }
                break;

            case MpcHcCommand.NotifyEndOfStream:
                if (OnVideoEnded != null)
                {
                    OnVideoEnded.Invoke(this, new EventArgs());
                }
                break;

            case MpcHcCommand.CurrentPosition:
                if (!string.IsNullOrWhiteSpace(param))
                {
                    double d;
                    if (double.TryParse(param.Replace(",", "."), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out d))
                    {
                        _positionInSeconds = d;
                    }
                }
                break;
            }
        }