예제 #1
0
        public async Task Run()
        {
            Core.Initialize(@"C:\Program Files\VideoLAN\VLC");

            _videoFormat    = VideoFormat;
            _lockCB         = LockVideo;
            _unlockCB       = UnlockVideo;
            _displayCB      = DisplayVideo;
            _cleanupVideoCB = CleanupVideo;

            var libVLC = new LibVLC();

            libVLC.Log += _libVLC_Log;
            var media = new Media(libVLC, "screen://", FromType.FromLocation);


            _mediaPlayer = new MediaPlayer(media);

            _mediaPlayer.SetVideoFormatCallbacks(_videoFormat, _cleanupVideoCB);
            _mediaPlayer.SetVideoCallbacks(_lockCB, _unlockCB, _displayCB);

            _mediaPlayer.EncounteredError += (sender, e) =>
            {
                Cleanup();
            };

            _mediaPlayer.EndReached += (sender, e) =>
            {
                Cleanup();
            };

            _mediaPlayer.Stopped += (sender, e) =>
            {
                Cleanup();
            };

            _mediaPlayer.Play();
            await Task.Delay(3000); //

            _mediaPlayer.Stop();    // crashes here
        }
예제 #2
0
        private void Init()
        {
            _mediaPlayer?.Dispose();

            _videoFormat    = VideoFormat;
            _lockCB         = LockVideo;
            _unlockCB       = UnlockVideo;
            _displayCB      = DisplayVideo;
            _cleanupVideoCB = CleanupVideo;

            _audioSetup   = AudioSetup;
            _processAudio = ProcessAudio;
            _cleanupAudio = CleanupAudio;
            _pauseAudio   = PauseAudio;
            _resumeAudio  = ResumeAudio;
            _flushAudio   = FlushAudio;
            _drainAudio   = DrainAudio;
            string overrideURL = null;

            if (_camera != null)
            {
                switch (_camera.Camobject.settings.sourceindex)
                {
                case 9:
                    var od = _camera.ONVIFDevice;
                    if (od != null)
                    {
                        var ep = od.StreamEndpoint;
                        if (ep != null)
                        {
                            var u = ep.Uri.Uri;
                            overrideURL = u;
                        }
                    }
                    break;
                }
            }

            FromType ftype = FromType.FromLocation;

            Seekable = false;
            try
            {
                var p = Path.GetFullPath(overrideURL ?? Source);
                Seekable = !string.IsNullOrEmpty(p);
                if (Seekable)
                {
                    ftype = FromType.FromPath;
                }
            }
            catch (Exception)
            {
                Seekable = false;
            }
            using (var media = new Media(LibVLC, overrideURL ?? Source, ftype))
            {
                Duration = Time = 0;

                foreach (var opt in _options)
                {
                    media.AddOption(opt);
                }

                _mediaPlayer = new MediaPlayer(media);
                _mediaPlayer.SetVideoFormatCallbacks(_videoFormat, _cleanupVideoCB);
                _mediaPlayer.SetVideoCallbacks(_lockCB, _unlockCB, _displayCB);

                if (!_ignoreAudio)
                {
                    _mediaPlayer.SetAudioFormatCallback(_audioSetup, _cleanupAudio);
                    _mediaPlayer.SetAudioCallbacks(_processAudio, _pauseAudio, _resumeAudio, _flushAudio, _drainAudio);
                }

                _mediaPlayer.EncounteredError += (sender, e) =>
                {
                    ErrorHandler?.Invoke("VLC Error");
                    _res  = ReasonToFinishPlaying.DeviceLost;
                    _quit = true;
                };

                _mediaPlayer.EndReached += (sender, e) =>
                {
                    _res  = ReasonToFinishPlaying.DeviceLost;
                    _quit = true;
                };

                _mediaPlayer.Stopped += (sender, e) =>
                {
                    _quit = true;
                };
            }
            _mediaPlayer.Play();
        }