コード例 #1
0
ファイル: VlcPlayer.cs プロジェクト: deccer/SpyUO
        /// <summary>
        /// Loads media from file.
        /// </summary>
        /// <param name="filePath">File to load.</param>
        public void LoadFromFile(string filePath)
        {
            _Length = 0;

            if (IsPlaying)
            {
                Stop();
            }

            if (_Player != IntPtr.Zero)
            {
                _ReleasePlayer(_Player);
                _Player = IntPtr.Zero;
            }

            if (_Media != IntPtr.Zero)
            {
                _ReleaseMedia(_Media);
                _Media = IntPtr.Zero;
            }

            _Media = _CreateMediaFromPath(_Instance, filePath);

            if (_Media == IntPtr.Zero)
            {
                throw new Exception("Error opening media");
            }

            if (_Player == IntPtr.Zero)
            {
                _Player = _CreateMediaPlayerFromMedia(_Media);

                if (_Player == IntPtr.Zero)
                {
                    throw new Exception("Cannot create media player from media");
                }

                _EventManager = _GetEventManager(_Player);

                if (_EventManager == IntPtr.Zero)
                {
                    throw new Exception("Cannot get instance event manager");
                }

                _TimeChanged       = OnTimeChanged;
                _TimeChangedHandle = GCHandle.Alloc(_TimeChanged);
                _EventAttach(_EventManager, VlcEvent.MediaPlayerPositionChanged, _TimeChanged, IntPtr.Zero);
                _Stopped       = OnStopped;
                _StoppedHandle = GCHandle.Alloc(_Stopped);
                _EventAttach(_EventManager, VlcEvent.MediaPlayerStopped, _Stopped, IntPtr.Zero);
            }
        }
コード例 #2
0
ファイル: VlcPlayer.cs プロジェクト: deccer/SpyUO
        /// <summary>
        /// Loads media from memory.
        /// </summary>
        /// <param name="data">Data to load.</param>
        public void LoadFromMemory(byte[] data)
        {
            _Length = 0;

            if (IsPlaying)
            {
                Stop();
            }

            if (_Player != IntPtr.Zero)
            {
                _ReleasePlayer(_Player);
                _Player = IntPtr.Zero;
            }

            if (_Media != IntPtr.Zero)
            {
                _ReleaseMedia(_Media);
                _Media = IntPtr.Zero;
            }

            if (_FileStreamPath == null)
            {
                _FileStreamPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
            }

            // Fugly walkaround for imem (stupid callbacks)
            if (_FileStream == null)
            {
                _FileStream = File.Open(_FileStreamPath, FileMode.Create, FileAccess.Write, FileShare.Read);
            }

            _FileStream.Seek(0, SeekOrigin.Begin);
            _FileStream.Write(data, 0, data.Length);
            _FileStream.Flush();

            _Media = _CreateMediaFromPath(_Instance, _FileStreamPath);

            if (_Media == IntPtr.Zero)
            {
                throw new Exception("Error opening media");
            }

            if (_Player == IntPtr.Zero)
            {
                _Player = _CreateMediaPlayerFromMedia(_Media);

                if (_Player == IntPtr.Zero)
                {
                    throw new Exception("Cannot create media player from media");
                }

                _EventManager = _GetEventManager(_Player);

                if (_EventManager == IntPtr.Zero)
                {
                    throw new Exception("Cannot get instance event manager");
                }

                _TimeChanged       = OnTimeChanged;
                _TimeChangedHandle = GCHandle.Alloc(_TimeChanged);
                _EventAttach(_EventManager, VlcEvent.MediaPlayerPositionChanged, _TimeChanged, IntPtr.Zero);
                _Stopped       = OnStopped;
                _StoppedHandle = GCHandle.Alloc(_Stopped);
                _EventAttach(_EventManager, VlcEvent.MediaPlayerStopped, _Stopped, IntPtr.Zero);
            }
        }