Ejemplo n.º 1
0
 private void AcqForm_FormClosed(object sender, FormClosedEventArgs e)
 {
     // TODO: fixed media-related operations cause null reference
     try
     {
         _player.Stop();
         _player.Dispose();
     }
     catch { }
     try
     {
         _media.Dispose();
     }
     catch { }
 }
Ejemplo n.º 2
0
        private void RecordingForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (_ffmpeg != null)
            {
                _ffmpeg.StandardInput.WriteLine("q");
                _ffmpeg.WaitForExit(5000);
                if (!_ffmpeg.HasExited)
                {
                    try
                    {
                        _ffmpeg.Kill();
                    }
                    catch
                    { }
                }
                _ffmpeg.Dispose();
                _ffmpeg = null;

                if (_player.IsPlaying)
                {
                    MessageBox.Show("文件已成功保存为:" + myController.CommonDataPool.VideoPath + '\\' + _start.ToString("yyyyMMddHHmmss"));
                }
            }
            _player.Stop();
            _player.Dispose();
            _media.Dispose();
        }
Ejemplo n.º 3
0
        private void DisposePlayer()
        {
            if (_mFactory == null)
            {
                return;
            }
            try
            {
                _mPlayer.Dispose();
            }
            catch { }
            try
            {
                _mFactory.Dispose();
            }
            catch { }
            try
            {
                _mMedia.Dispose();
            }
            catch { }

            _mPlayer  = null;
            _mFactory = null;
            _mMedia   = null;
        }
Ejemplo n.º 4
0
 public void Dispose()
 {
     try {
         _player.Dispose();
     } catch (Exception ex) {
         Logging.Write(ex);
     }
 }
Ejemplo n.º 5
0
 protected virtual void Dispose(bool disposing)
 {
     if (!disposing)
     {
         return;
     }
     DisposeMedia();
     _factory.Dispose();
     _player.Dispose();
 }
Ejemplo n.º 6
0
 private static void SafeDisposePlayer(IVideoPlayer player)
 {
     if (player != null)
     {
         player.Stop();
         player.WindowHandle = IntPtr.Zero;
         player.Dispose();
         player = null;
     }
 }
Ejemplo n.º 7
0
        public MediaListPlayer(IntPtr hMediaLib, IMediaList mediaList)
        {
            m_mediaList        = mediaList;
            m_hMediaListPlayer = LibVlcMethods.libvlc_media_list_player_new(hMediaLib);
            LibVlcMethods.libvlc_media_list_player_set_media_list(m_hMediaListPlayer, ((INativePointer)m_mediaList).Pointer);
            m_mediaList.Dispose();

            m_videoPlayer = new VideoPlayer(hMediaLib);
            LibVlcMethods.libvlc_media_list_player_set_media_player(m_hMediaListPlayer, ((INativePointer)m_videoPlayer).Pointer);
            m_videoPlayer.Dispose();
        }
Ejemplo n.º 8
0
        public MediaListPlayer(IntPtr hMediaLib, IMediaList mediaList)
        {
            m_mediaList = mediaList;
             m_hMediaListPlayer = LibVlcMethods.libvlc_media_list_player_new(hMediaLib);
             LibVlcMethods.libvlc_media_list_player_set_media_list(m_hMediaListPlayer, ((INativePointer)m_mediaList).Pointer);
             m_mediaList.Dispose();

             m_videoPlayer = new VideoPlayer(hMediaLib);
             LibVlcMethods.libvlc_media_list_player_set_media_player(m_hMediaListPlayer, ((INativePointer)m_videoPlayer).Pointer);
             m_videoPlayer.Dispose();
        }
Ejemplo n.º 9
0
        protected override void OnClosing(CancelEventArgs e)
        {
            ThreadPool.QueueUserWorkItem(delegate
            {
                m_sourcePlayer.Stop();
                m_renderPlayer.Stop();
                m_inputMedia.Dispose();
                m_renderPlayer.Dispose();
                m_sourcePlayer.Dispose();
            });

            base.OnClosing(e);
        }
Ejemplo n.º 10
0
 /// <summary>
 /// Disposes of object resources.
 /// </summary>
 /// <param name="disposeManagedResources">If true, managed resources should be
 /// disposed of in addition to unmanaged resources.</param>
 protected virtual void Dispose(bool disposeManagedResources)
 {
     if (disposeManagedResources)
     {
         m_factory.Dispose();
         m_player.Dispose();
         m_equalizer.Dispose();
         m_media.Dispose();
         m_media_preview.Dispose();
         m_memRender.Dispose();
         m_media_list.Dispose();
         m_list_player.Dispose();
         m_media_list_preview.Dispose();
         m_list_preview_player.Dispose();
     }
 }
Ejemplo n.º 11
0
        public void GetDuration(string filePath)
        {
            IMedia       media  = m_factory.CreateMedia <IMediaFromFile>(filePath);
            IVideoPlayer player = m_factory.CreatePlayer <IVideoPlayer>();

            m_memRender = player.CustomRenderer;
            m_memRender.SetFormat(new BitmapFormat(1, 1, ChromaType.RV24));
            media.Events.DurationChanged += new EventHandler <MediaDurationChange>(Events_GetTimeDuration);
            media.Parse(true);
            player.Play();
            player.Stop();

            Thread.Sleep(100);
            player.Dispose();
            m_memRender.Dispose();
            media.Dispose();
        }
Ejemplo n.º 12
0
 private void StopPlayer()
 {
     if (_player != null)
     {
         _player.Stop();
         _player.Dispose();
         _player = null;
     }
     if (_media != null)
     {
         _media.Dispose();
         _media = null;
     }
     if (_factory != null)
     {
         _factory.Dispose();
         _factory = null;
     }
 }
Ejemplo n.º 13
0
 private void RecordingForm_FormClosed(object sender, FormClosedEventArgs e)
 {
     if (_ffmpeg != null)
     {
         _ffmpeg.StandardInput.WriteLine("q");
         _ffmpeg.WaitForExit(5000);
         if (!_ffmpeg.HasExited)
         {
             try
             {
                 _ffmpeg.Kill();
             }
             catch
             { }
         }
         _ffmpeg.Dispose();
         _ffmpeg = null;
     }
     _player.Stop();
     _player.Dispose();
     _media.Dispose();
 }
Ejemplo n.º 14
0
        private void WorkerThread()
        {
            bool file = false;

            try
            {
                if (File.Exists(_source))
                {
                    file = true;
                }
            }
            catch
            {
            }



            if (_mFactory == null)
            {
                var args = new List <string>
                {
                    "-I",
                    "dumy",
                    "--ignore-config",
                    "--no-osd",
                    "--disable-screensaver",
                    "--plugin-path=./plugins"
                };
                if (file)
                {
                    args.Add("--file-caching=3000");
                }
                try
                {
                    var l2 = args.ToList();
                    l2.AddRange(_arguments);

                    l2        = l2.Distinct().ToList();
                    _mFactory = new MediaPlayerFactory(l2.ToArray());
                }
                catch (Exception ex)
                {
                    MainForm.LogExceptionToFile(ex);
                    MainForm.LogMessageToFile("VLC arguments are: " + String.Join(",", args.ToArray()));
                    MainForm.LogMessageToFile("Using default VLC configuration.");
                    _mFactory = new MediaPlayerFactory(args.ToArray());
                }
                GC.KeepAlive(_mFactory);
            }

            if (file)
            {
                _mMedia = _mFactory.CreateMedia <IMediaFromFile>(_source);
            }
            else
            {
                _mMedia = _mFactory.CreateMedia <IMedia>(_source);
            }

            _mMedia.Events.DurationChanged += EventsDurationChanged;
            _mMedia.Events.StateChanged    += EventsStateChanged;

            if (_mPlayer != null)
            {
                try
                {
                    _mPlayer.Dispose();
                }
                catch
                {
                }
                _mPlayer = null;
            }


            _mPlayer = _mFactory.CreatePlayer <IVideoPlayer>();
            _mPlayer.Events.TimeChanged += EventsTimeChanged;

            var fc = new Func <SoundFormat, SoundFormat>(SoundFormatCallback);

            _mPlayer.CustomAudioRenderer.SetFormatCallback(fc);
            var ac = new AudioCallbacks {
                SoundCallback = SoundCallback
            };

            _mPlayer.CustomAudioRenderer.SetCallbacks(ac);
            _mPlayer.CustomAudioRenderer.SetExceptionHandler(Handler);

            _mPlayer.CustomRenderer.SetCallback(FrameCallback);
            _mPlayer.CustomRenderer.SetExceptionHandler(Handler);
            GC.KeepAlive(_mPlayer);

            _needsSetup = true;
            _stopping   = false;
            _mPlayer.CustomRenderer.SetFormat(new BitmapFormat(FormatWidth, FormatHeight, ChromaType.RV24));
            _mPlayer.Open(_mMedia);
            _mMedia.Parse(true);

            _mPlayer.Delay = 0;

            _framesReceived = 0;
            Duration        = Time = 0;
            LastFrame       = DateTime.MinValue;


            //check if file source (isseekable in _mPlayer is not reliable)
            Seekable = false;
            try
            {
                var p = Path.GetFullPath(_mMedia.Input);
                Seekable = !String.IsNullOrEmpty(p);
            }
            catch (Exception)
            {
                Seekable = false;
            }
            _mPlayer.WindowHandle = IntPtr.Zero;
            _mPlayer.Play();



            _stopEvent.WaitOne();

            if (!Seekable && !_stopRequested)
            {
                if (PlayingFinished != null)
                {
                    PlayingFinished(this, ReasonToFinishPlaying.DeviceLost);
                }
                if (AudioFinished != null)
                {
                    AudioFinished(this, ReasonToFinishPlaying.DeviceLost);
                }
            }
            else
            {
                if (PlayingFinished != null)
                {
                    PlayingFinished(this, ReasonToFinishPlaying.StoppedByUser);
                }
                if (AudioFinished != null)
                {
                    AudioFinished(this, ReasonToFinishPlaying.StoppedByUser);
                }
            }

            DisposePlayer();
        }
Ejemplo n.º 15
0
 protected override void Dispose(bool disposing)
 {
     m_videoPlayer.Dispose();
     LibVlcMethods.libvlc_media_list_player_release(m_hMediaListPlayer);
 }
Ejemplo n.º 16
0
        private void WorkerThread()
        {
            bool file = false;

            try
            {
                if (File.Exists(Source))
                {
                    file = true;
                }
            }
            catch
            {
                // ignored
            }

            if (_mFactory == null)
            {
                var args = new List <string>
                {
                    "-I",
                    "dumy",
                    "--ignore-config",
                    "--no-osd",
                    "--disable-screensaver",
                    "--plugin-path=./plugins"
                };
                if (file)
                {
                    args.Add("--file-caching=3000");
                }
                try
                {
                    var l2 = args.ToList();
                    l2.AddRange(_arguments);

                    l2        = l2.Distinct().ToList();
                    _mFactory = new MediaPlayerFactory(l2.ToArray());
                }
                catch (Exception ex)
                {
                    Logger.LogException(ex, "VLC Stream");
                    Logger.LogMessage("VLC arguments are: " + string.Join(",", args.ToArray()), "VLC Stream");
                    Logger.LogMessage("Using default VLC configuration.", "VLC Stream");
                    _mFactory = new MediaPlayerFactory(args.ToArray());
                }
                GC.KeepAlive(_mFactory);
            }

            var vss = Source;

            if (!_modeAudio)
            {
                vss = Tokenise(vss);
            }

            _mMedia = file ? _mFactory.CreateMedia <IMediaFromFile>(vss) : _mFactory.CreateMedia <IMedia>(vss);

            _mMedia.Events.DurationChanged += EventsDurationChanged;
            _mMedia.Events.StateChanged    += EventsStateChanged;

            if (_mPlayer != null)
            {
                try
                {
                    _mPlayer?.Dispose();
                }
                catch
                {
                    // ignored
                }
                _mPlayer = null;
            }


            _mPlayer = _mFactory.CreatePlayer <IVideoPlayer>();
            _mPlayer.Events.TimeChanged += EventsTimeChanged;

            var fc = new Func <SoundFormat, SoundFormat>(SoundFormatCallback);

            _mPlayer.CustomAudioRenderer.SetFormatCallback(fc);
            var ac = new AudioCallbacks {
                SoundCallback = SoundCallback
            };

            _mPlayer.CustomAudioRenderer.SetCallbacks(ac);
            _mPlayer.CustomAudioRenderer.SetExceptionHandler(Handler);

            if (!_modeAudio)
            {
                _mPlayer.CustomRenderer.SetCallback(FrameCallback);
                _mPlayer.CustomRenderer.SetExceptionHandler(Handler);
            }
            GC.KeepAlive(_mPlayer);

            _needsSetup = true;
            _mPlayer.CustomRenderer.SetFormat(new BitmapFormat(_source.settings.vlcWidth, _source.settings.vlcHeight, ChromaType.RV24));
            _mPlayer.Open(_mMedia);
            _mMedia.Parse(true);

            _mPlayer.Delay = 0;

            Duration  = Time = 0;
            LastFrame = DateTime.MinValue;


            //check if file source (isseekable in _mPlayer is not reliable)
            Seekable = false;
            try
            {
                var p = Path.GetFullPath(_mMedia.Input);
                Seekable = !string.IsNullOrEmpty(p);
            }
            catch (Exception)
            {
                Seekable = false;
            }
            _mPlayer.WindowHandle = IntPtr.Zero;

            _videoQueue = new ConcurrentQueue <Bitmap>();
            _audioQueue = new ConcurrentQueue <byte[]>();


            _mPlayer.Play();
            _abort = new ManualResetEvent(false);
            EventManager();

            if (Seekable)
            {
                PlayingFinished?.Invoke(this, new PlayingFinishedEventArgs(ReasonToFinishPlaying.StoppedByUser));
                AudioFinished?.Invoke(this, new PlayingFinishedEventArgs(ReasonToFinishPlaying.StoppedByUser));
            }
            else
            {
                PlayingFinished?.Invoke(this, new PlayingFinishedEventArgs(_res));
                AudioFinished?.Invoke(this, new PlayingFinishedEventArgs(_res));
            }

            DisposePlayer();
            _abort.Close();
        }