/// <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); } }
/// <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); } }