/Multimedia/Vlc/LibVlc/VlcMediaPlayer.cs
C# | 174 lines | 116 code | 16 blank | 42 comment | 6 complexity | 0f5ae4c807f15bbe630ac7358f06fc7a MD5 | raw file
Possible License(s): Apache-2.0
- using System;
-
- namespace Delta.Multimedia.Vlc.LibVlc
- {
- internal class VlcMediaPlayer : IDisposable
- {
- #region Drawable (Public)
- /// <summary>
- /// Get or set the drawing target for the media player.
- /// </summary>
- public IntPtr Drawable
- {
- get
- {
- return drawable;
- }
- set
- {
- VlcCore.libvlc_media_player_set_hwnd(handle, value);
- drawable = value;
- }
- }
- #endregion
-
- #region Media (Public)
- /// <summary>
- /// Get or set the current media item being played by this media player.
- /// </summary>
- public VlcMedia Media
- {
- get
- {
- IntPtr media = VlcCore.libvlc_media_player_get_media(handle);
- if (media == IntPtr.Zero)
- {
- return null;
- }
- return new VlcMedia(media);
- }
- set
- {
- VlcCore.libvlc_media_player_set_media(handle, value.Handle);
- }
- }
- #endregion
-
- #region VideoPosition (Public)
- /// <summary>
- /// Get the current position in the media playback in milliseconds.
- /// </summary>
- public long VideoPosition
- {
- get
- {
- return VlcCore.libvlc_media_player_get_time(handle);
- }
- }
- #endregion
-
- #region VideoLength (Public)
- /// <summary>
- /// Get the length of the current media item in milliseconds.
- /// </summary>
- public long VideoLength
- {
- get
- {
- return VlcCore.libvlc_media_player_get_length(handle);
- }
- }
- #endregion
-
- #region Volume (Public)
- /// <summary>
- /// Get or set the volume of the media playback.
- /// <para />
- /// The value is the volume in percents (0 = mute, 100 = 0dB).
- /// </summary>
- public int Volume
- {
- get
- {
- return VlcCore.libvlc_audio_get_volume(handle);
- }
- set
- {
- VlcCore.libvlc_audio_set_volume(handle, value);
- }
- }
- #endregion
-
- #region Private
-
- #region drawable (Private)
- private IntPtr drawable;
- #endregion
-
- #region handle (Private)
- /// <summary>
- /// The media player handle.
- /// </summary>
- private readonly IntPtr handle;
- #endregion
-
- #endregion
-
- #region Constructors
- /// <summary>
- /// Create a new vlc media player instance.
- /// </summary>
- /// <param name="media">The media item to create the player with.</param>
- public VlcMediaPlayer(VlcMedia media)
- {
- handle = VlcCore.libvlc_media_player_new_from_media(media.Handle);
- if (handle == IntPtr.Zero)
- {
- throw new VlcException();
- }
-
- //MethodInfo info = GetType().GetMethod("EventHandlerCallback",
- // BindingFlags.NonPublic | BindingFlags.Instance);
-
- //Delegate deleg = Delegate.CreateDelegate(
- // typeof(VlcCore.VlcEventHandlerDelegate), this, info, false);
- //VlcCore.AttachToEvent(handle, deleg,
- // VlcEventType.libvlc_MediaStateChanged);
- }
- #endregion
-
- #region IDisposable Members
- /// <summary>
- /// Free the native media player handle.
- /// </summary>
- public void Dispose()
- {
- VlcCore.libvlc_media_player_release(handle);
- }
- #endregion
-
- #region Play (Public)
- /// <summary>
- /// Play the current media item.
- /// </summary>
- public void Play()
- {
- int ret = VlcCore.libvlc_media_player_play(handle);
- if (ret == -1)
- {
- throw new VlcException();
- }
- }
- #endregion
-
- #region Pause (Public)
- /// <summary>
- /// Pause the current media item.
- /// </summary>
- public void Pause()
- {
- VlcCore.libvlc_media_player_pause(handle);
- }
- #endregion
-
- #region Stop (Public)
- /// <summary>
- /// Stop the current media item.
- /// </summary>
- public void Stop()
- {
- VlcCore.libvlc_media_player_stop(handle);
- }
- #endregion
- }
- }