private VlcMedia(IVlcObject parentVlcObject, IntPtr pointer) { VlcInstance = parentVlcObject.VlcInstance; InstancePointer = pointer; EventManager = new VlcEventManager(this, _getEventManagerFunction.Delegate(InstancePointer)); _onMetaChanged = OnMetaChanged; _onSubItemAdded = OnSubItemAdded; _onDurationChanged = OnDurationChanged; _onParsedChanged = OnParsedChanged; _onFreed = OnFreed; _onStateChanged = OnStateChanged; _onMetaChangedHandle = GCHandle.Alloc(_onMetaChanged); _onSubItemAddedHandle = GCHandle.Alloc(_onSubItemAdded); _onDurationChangedHandle = GCHandle.Alloc(_onDurationChanged); _onParsedChangedHandle = GCHandle.Alloc(_onParsedChanged); _onFreedHandle = GCHandle.Alloc(_onFreed); _onStateChangedHandle = GCHandle.Alloc(_onStateChanged); HandleManager.Add(this); EventManager.Attach(EventTypes.MediaMetaChanged, _onMetaChanged, IntPtr.Zero); EventManager.Attach(EventTypes.MediaSubItemAdded, _onSubItemAdded, IntPtr.Zero); EventManager.Attach(EventTypes.MediaDurationChanged, _onDurationChanged, IntPtr.Zero); EventManager.Attach(EventTypes.MediaParsedChanged, _onParsedChanged, IntPtr.Zero); EventManager.Attach(EventTypes.MediaFreed, _onFreed, IntPtr.Zero); EventManager.Attach(EventTypes.MediaStateChanged, _onStateChanged, IntPtr.Zero); }
/// <summary> /// Provide a specified parameter to initialize a Vlc instance /// </summary> /// <param name="argv"></param> /// <exception cref="VlcCreateFailException">Can't create a Vlc instence, check your Vlc options.</exception> /// <exception cref="Exception">A delegate callback throws an exception.</exception> public Vlc(String[] argv) { InstancePointer = argv == null ? _newInstanceFunction.Delegate(0, IntPtr.Zero) : _newInstanceFunction.Delegate(argv.Length, InteropHelper.StringArrayToPtr(argv)); if (InstancePointer == IntPtr.Zero) { var ex = VlcError.GetErrorMessage(); throw new VlcCreateFailException(ex); } EventManager = new VlcEventManager(this, _getMediaEventManagerFunction.Delegate(InstancePointer)); _onVlmMediaAdded = OnVlmMediaAdded; _onVlmMediaRemoved = OnVlmMediaRemoved; _onVlmMediaChanged = OnVlmMediaChanged; _onVlmMediaInstanceStarted = OnVlmMediaInstanceStarted; _onVlmMediaInstanceStopped = OnVlmMediaInstanceStopped; _onVlmMediaInstanceStatusInit = OnVlmMediaInstanceStatusInit; _onVlmMediaInstanceStatusOpening = OnVlmMediaInstanceStatusOpening; _onVlmMediaInstanceStatusPlaying = OnVlmMediaInstanceStatusPlaying; _onVlmMediaInstanceStatusPause = OnVlmMediaInstanceStatusPause; _onVlmMediaInstanceStatusEnd = OnVlmMediaInstanceStatusEnd; _onVlmMediaInstanceStatusError = OnVlmMediaInstanceStatusError; _onVlmMediaAddedHandle = GCHandle.Alloc(_onVlmMediaAdded); _onVlmMediaRemovedHandle = GCHandle.Alloc(_onVlmMediaRemoved); _onVlmMediaChangedHandle = GCHandle.Alloc(_onVlmMediaChanged); _onVlmMediaInstanceStartedHandle = GCHandle.Alloc(_onVlmMediaInstanceStarted); _onVlmMediaInstanceStoppedHandle = GCHandle.Alloc(_onVlmMediaInstanceStopped); _onVlmMediaInstanceStatusInitHandle = GCHandle.Alloc(_onVlmMediaInstanceStatusInit); _onVlmMediaInstanceStatusOpeningHandle = GCHandle.Alloc(_onVlmMediaInstanceStatusOpening); _onVlmMediaInstanceStatusPlayingHandle = GCHandle.Alloc(_onVlmMediaInstanceStatusPlaying); _onVlmMediaInstanceStatusPauseHandle = GCHandle.Alloc(_onVlmMediaInstanceStatusPause); _onVlmMediaInstanceStatusEndHandle = GCHandle.Alloc(_onVlmMediaInstanceStatusEnd); _onVlmMediaInstanceStatusErrorHandle = GCHandle.Alloc(_onVlmMediaInstanceStatusError); HandleManager.Add(this); EventManager.Attach(EventTypes.VlmMediaAdded, _onVlmMediaAdded, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaRemoved, _onVlmMediaRemoved, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaChanged, _onVlmMediaChanged, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaInstanceStarted, _onVlmMediaInstanceStarted, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaInstanceStopped, _onVlmMediaInstanceStopped, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaInstanceStatusInit, _onVlmMediaInstanceStatusInit, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaInstanceStatusOpening, _onVlmMediaInstanceStatusOpening, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaInstanceStatusPlaying, _onVlmMediaInstanceStatusPlaying, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaInstanceStatusPause, _onVlmMediaInstanceStatusPause, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaInstanceStatusEnd, _onVlmMediaInstanceStatusEnd, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaInstanceStatusError, _onVlmMediaInstanceStatusError, IntPtr.Zero); }
private VlcMedia(IVlcObject parentVlcObject, void *pointer) { VlcInstance = parentVlcObject.VlcInstance; InstancePointer = pointer; VlcObjectManager.Add(this); EventManager = new VlcEventManager(this, LibVlcManager.GetFunctionDelegate <libvlc_media_event_manager>().Invoke(InstancePointer)); EventManager.Attach(EventType.MediaMetaChanged); EventManager.Attach(EventType.MediaSubItemAdded); EventManager.Attach(EventType.MediaDurationChanged); EventManager.Attach(EventType.MediaParsedChanged); EventManager.Attach(EventType.MediaFreed); EventManager.Attach(EventType.MediaStateChanged); EventManager.Attach(EventType.MediaSubItemTreeAdded); EventManager.VlcEventFired += OnVlcEventFired; }
private VlcMediaPlayer(IVlcObject parentVlcObject, void* pointer) { VlcInstance = parentVlcObject.VlcInstance; InstancePointer = pointer; VlcObjectManager.Add(this); EventManager = new VlcEventManager(this, LibVlcManager.GetFunctionDelegate<libvlc_media_player_event_manager>().Invoke(InstancePointer)); EventManager.Attach(EventType.MediaPlayerPlaying); EventManager.Attach(EventType.MediaPlayerPaused); EventManager.Attach(EventType.MediaPlayerOpening); EventManager.Attach(EventType.MediaPlayerBuffering); EventManager.Attach(EventType.MediaPlayerStopped); EventManager.Attach(EventType.MediaPlayerForward); EventManager.Attach(EventType.MediaPlayerBackward); EventManager.Attach(EventType.MediaPlayerEndReached); EventManager.Attach(EventType.MediaPlayerMediaChanged); EventManager.Attach(EventType.MediaPlayerNothingSpecial); EventManager.Attach(EventType.MediaPlayerPausableChanged); EventManager.Attach(EventType.MediaPlayerPositionChanged); EventManager.Attach(EventType.MediaPlayerSeekableChanged); EventManager.Attach(EventType.MediaPlayerSnapshotTaken); EventManager.Attach(EventType.MediaPlayerTimeChanged); EventManager.Attach(EventType.MediaPlayerTitleChanged); EventManager.Attach(EventType.MediaPlayerLengthChanged); EventManager.Attach(EventType.MediaPlayerEncounteredError); EventManager.Attach(EventType.MediaPlayerVout); EventManager.Attach(EventType.MediaPlayerScrambledChanged); EventManager.Attach(EventType.MediaPlayerESAdded); EventManager.Attach(EventType.MediaPlayerESDeleted); EventManager.Attach(EventType.MediaPlayerESSelected); EventManager.Attach(EventType.MediaPlayerCorked); EventManager.Attach(EventType.MediaPlayerUncorked); EventManager.Attach(EventType.MediaPlayerMuted); EventManager.Attach(EventType.MediaPlayerUnmuted); EventManager.Attach(EventType.MediaPlayerAudioVolume); EventManager.Attach(EventType.MediaPlayerAudioDevice); EventManager.Attach(EventType.MediaPlayerChapterChanged); EventManager.VlcEventFired += OnVlcEventFired; }
/// <summary> /// Load LibVlc dlls, and mapping all function. /// </summary> /// <param name="libVlcDirectory">directory of LibVlc</param> /// <exception cref="LibVlcLoadLibraryException"> /// Can't load LibVlc dlls, check the platform and LibVlc target platform /// (should be same, x86 or x64). /// </exception> /// <exception cref="TypeLoadException">A custom attribute type cannot be loaded. </exception> /// <exception cref="NoLibVlcFunctionAttributeException"> /// For LibVlcFunction, need LibVlcFunctionAttribute to get Infomation /// of function. /// </exception> /// <exception cref="FunctionNotFoundException">Can't find function in dll.</exception> /// <exception cref="VersionStringParseException">Can't parse libvlc version string, it must like "2.2.0-Meta Weatherwax".</exception> /// <exception cref="OverflowException"> /// At least one component of version represents a number greater than /// <see cref="F:System.Int32.MaxValue" />. /// </exception> public static void LoadLibVlc(String libVlcDirectory = null) { LibVlcDirectory = libVlcDirectory == null ? "" : libVlcDirectory; if (IsLibLoaded) { return; } try { FileInfo libcore = new FileInfo(Path.Combine(LibVlcDirectory, "libvlccore.dll")); FileInfo libvlc = new FileInfo(Path.Combine(LibVlcDirectory, "libvlc.dll")); LibVlcVCoreHandle = Win32Api.LoadLibrary(libcore.FullName); LibVlcHandle = Win32Api.LoadLibrary(libvlc.FullName); } catch (Win32Exception e) { throw new LibVlcLoadLibraryException(e); } _getVersionFunction = new LibVlcFunction <GetVersion>(); LibVlcVersion = new LibVlcVersion(GetVersion()); _getCompilerFunction = new LibVlcFunction <GetCompiler>(); _getChangesetFunction = new LibVlcFunction <GetChangeset>(); _freeFunction = new LibVlcFunction <Free>(); _releaseLibVlcModuleDescriptionFunction = new LibVlcFunction <ReleaseLibVlcModuleDescription>(); _releaseAudioOutputListFunction = new LibVlcFunction <ReleaseAudioOutputList>(); _releaseAudioDeviceListFunction = new LibVlcFunction <ReleaseAudioDeviceList>(); _releaseTrackDescriptionFunction = new LibVlcFunction <ReleaseTrackDescription>(); _releaseTracksFunction = new LibVlcFunction <ReleaseTracks>(); Vlc.LoadLibVlc(); VlcError.LoadLibVlc(); VlcEventManager.LoadLibVlc(); VlcMedia.LoadLibVlc(); VlcMediaPlayer.LoadLibVlc(); AudioEqualizer.LoadLibVlc(); }
/// <summary> /// 提供指定的参数初始化一个 Vlc 实例 /// </summary> /// <param name="argv"></param> /// <exception cref="VlcCreateFailException">Can't create a Vlc instence, check your Vlc options.</exception> /// <exception cref="Exception">A delegate callback throws an exception.</exception> public Vlc(String[] argv) { InstancePointer = argv == null ? _newInstanceFunction.Delegate(0, IntPtr.Zero) : _newInstanceFunction.Delegate(argv.Length, InteropHelper.StringArrayToPtr(argv)); if (InstancePointer == IntPtr.Zero) { var ex = VlcError.GetErrorMessage(); throw new VlcCreateFailException(ex); } EventManager = new VlcEventManager(this, _getMediaEventManagerFunction.Delegate(InstancePointer)); _onVlmMediaAdded = OnVlmMediaAdded; _onVlmMediaRemoved = OnVlmMediaRemoved; _onVlmMediaChanged = OnVlmMediaChanged; _onVlmMediaInstanceStarted = OnVlmMediaInstanceStarted; _onVlmMediaInstanceStopped = OnVlmMediaInstanceStopped; _onVlmMediaInstanceStatusInit = OnVlmMediaInstanceStatusInit; _onVlmMediaInstanceStatusOpening = OnVlmMediaInstanceStatusOpening; _onVlmMediaInstanceStatusPlaying = OnVlmMediaInstanceStatusPlaying; _onVlmMediaInstanceStatusPause = OnVlmMediaInstanceStatusPause; _onVlmMediaInstanceStatusEnd = OnVlmMediaInstanceStatusEnd; _onVlmMediaInstanceStatusError = OnVlmMediaInstanceStatusError; _onVlmMediaAddedHandle = GCHandle.Alloc(_onVlmMediaAdded); _onVlmMediaRemovedHandle = GCHandle.Alloc(_onVlmMediaRemoved); _onVlmMediaChangedHandle = GCHandle.Alloc(_onVlmMediaChanged); _onVlmMediaInstanceStartedHandle = GCHandle.Alloc(_onVlmMediaInstanceStarted); _onVlmMediaInstanceStoppedHandle = GCHandle.Alloc(_onVlmMediaInstanceStopped); _onVlmMediaInstanceStatusInitHandle = GCHandle.Alloc(_onVlmMediaInstanceStatusInit); _onVlmMediaInstanceStatusOpeningHandle = GCHandle.Alloc(_onVlmMediaInstanceStatusOpening); _onVlmMediaInstanceStatusPlayingHandle = GCHandle.Alloc(_onVlmMediaInstanceStatusPlaying); _onVlmMediaInstanceStatusPauseHandle = GCHandle.Alloc(_onVlmMediaInstanceStatusPause); _onVlmMediaInstanceStatusEndHandle = GCHandle.Alloc(_onVlmMediaInstanceStatusEnd); _onVlmMediaInstanceStatusErrorHandle = GCHandle.Alloc(_onVlmMediaInstanceStatusError); HandleManager.Add(this); EventManager.Attach(EventTypes.VlmMediaAdded, _onVlmMediaAdded, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaRemoved, _onVlmMediaRemoved, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaChanged, _onVlmMediaChanged, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaInstanceStarted, _onVlmMediaInstanceStarted, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaInstanceStopped, _onVlmMediaInstanceStopped, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaInstanceStatusInit, _onVlmMediaInstanceStatusInit, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaInstanceStatusOpening, _onVlmMediaInstanceStatusOpening, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaInstanceStatusPlaying, _onVlmMediaInstanceStatusPlaying, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaInstanceStatusPause, _onVlmMediaInstanceStatusPause, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaInstanceStatusEnd, _onVlmMediaInstanceStatusEnd, IntPtr.Zero); EventManager.Attach(EventTypes.VlmMediaInstanceStatusError, _onVlmMediaInstanceStatusError, IntPtr.Zero); }
private VlcMediaPlayer(IVlcObject parentVlcObject, IntPtr pointer) { VlcInstance = parentVlcObject.VlcInstance; InstancePointer = pointer; EventManager = new VlcEventManager(this, _getEventManagerFunction.Delegate(InstancePointer)); HandleManager.Add(this); _onPlaying = OnPlaying; _onPaused = OnPaused; _onOpening = OnOpening; _onBuffering = OnBuffering; _onStoped = OnStoped; _onForward = OnForward; _onBackward = OnBackward; _onEndReached = OnEndReached; _onMediaChanged = OnMediaChanged; _onNothingSpecial = OnNothingSpecial; _onPausableChanged = OnPausableChanged; _onPositionChanged = OnPositionChanged; _onSeekableChanged = OnSeekableChanged; _onSnapshotTaken = OnSnapshotTaken; _onTimeChanged = OnTimeChanged; _onTitleChanged = OnTitleChanged; _onVideoOutChanged = OnVideoOutChanged; _onLengthChanged = OnLengthChanged; _onEncounteredError = OnEncounteredError; _onPlayingHandle = GCHandle.Alloc(_onPlaying); _onPausedHandle = GCHandle.Alloc(_onPaused); _onOpeningHandle = GCHandle.Alloc(_onOpening); _onBufferingHandle = GCHandle.Alloc(_onBuffering); _onStopedHandle = GCHandle.Alloc(_onStoped); _onForwardHandle = GCHandle.Alloc(_onForward); _onBackwardHandle = GCHandle.Alloc(_onBackward); _onEndReachedHandle = GCHandle.Alloc(_onEndReached); _onMediaChangedHandle = GCHandle.Alloc(_onMediaChanged); _onNothingSpecialHandle = GCHandle.Alloc(_onNothingSpecial); _onPausableChangedHandle = GCHandle.Alloc(_onPausableChanged); _onPositionChangedHandle = GCHandle.Alloc(_onPositionChanged); _onSeekableChangedHandle = GCHandle.Alloc(_onSeekableChanged); _onSnapshotTakenHandle = GCHandle.Alloc(_onSnapshotTaken); _onTimeChangedHandle = GCHandle.Alloc(_onTimeChanged); _onTitleChangedHandle = GCHandle.Alloc(_onTitleChanged); _onVideoOutChangedHandle = GCHandle.Alloc(_onVideoOutChanged); _onLengthChangedHandle = GCHandle.Alloc(_onLengthChanged); _onEncounteredErrorHandle = GCHandle.Alloc(_onEncounteredError); EventManager.Attach(EventTypes.MediaPlayerPlaying, _onPlaying, IntPtr.Zero); EventManager.Attach(EventTypes.MediaPlayerPaused, _onPaused, IntPtr.Zero); EventManager.Attach(EventTypes.MediaPlayerOpening, _onOpening, IntPtr.Zero); EventManager.Attach(EventTypes.MediaPlayerBuffering, _onBuffering, IntPtr.Zero); EventManager.Attach(EventTypes.MediaPlayerStopped, _onStoped, IntPtr.Zero); EventManager.Attach(EventTypes.MediaPlayerForward, _onForward, IntPtr.Zero); EventManager.Attach(EventTypes.MediaPlayerBackward, _onBackward, IntPtr.Zero); EventManager.Attach(EventTypes.MediaPlayerEndReached, _onEndReached, IntPtr.Zero); EventManager.Attach(EventTypes.MediaPlayerMediaChanged, _onMediaChanged, IntPtr.Zero); EventManager.Attach(EventTypes.MediaPlayerNothingSpecial, _onNothingSpecial, IntPtr.Zero); EventManager.Attach(EventTypes.MediaPlayerPausableChanged, _onPausableChanged, IntPtr.Zero); EventManager.Attach(EventTypes.MediaPlayerPositionChanged, _onPositionChanged, IntPtr.Zero); EventManager.Attach(EventTypes.MediaPlayerSeekableChanged, _onSeekableChanged, IntPtr.Zero); EventManager.Attach(EventTypes.MediaPlayerSnapshotTaken, _onSnapshotTaken, IntPtr.Zero); EventManager.Attach(EventTypes.MediaPlayerTimeChanged, _onTimeChanged, IntPtr.Zero); EventManager.Attach(EventTypes.MediaPlayerTitleChanged, _onTitleChanged, IntPtr.Zero); EventManager.Attach(EventTypes.MediaPlayerVideoOutChanged, _onVideoOutChanged, IntPtr.Zero); EventManager.Attach(EventTypes.MediaPlayerLengthChanged, _onLengthChanged, IntPtr.Zero); EventManager.Attach(EventTypes.MediaPlayerEncounteredError, _onEncounteredError, IntPtr.Zero); }