public void GetStatus() { this.fps = LibVlcMethods.libvlc_media_player_get_fps(mediaPlayer); libvlc_state_t mpState = LibVlcMethods.libvlc_media_player_get_state(mediaPlayer); if ((mpState == libvlc_state_t.libvlc_Ended) && this.loop) { LibVlcMethods.libvlc_media_player_stop(mediaPlayer); currentFrame = 0; LibVlcMethods.libvlc_media_player_play(mediaPlayer); } mpState = LibVlcMethods.libvlc_media_player_get_state(mediaPlayer); this.isplaying = mpState == libvlc_state_t.libvlc_Playing || mpState == libvlc_state_t.libvlc_Buffering; //this.Position = Convert.ToSingle(LibVlcMethods.libvlc_media_player_get_position(mediaPlayer)); // this.Position = (float)currentFrame / this.fps; this.duration = Convert.ToSingle(LibVlcMethods.libvlc_media_player_get_length(mediaPlayer)) / 1000.0f; if (mpState == libvlc_state_t.libvlc_Ended) { this.Position = this.duration; } else { this.Position = Convert.ToSingle(LibVlcMethods.libvlc_media_player_get_position(mediaPlayer)) * this.duration; } }
public void SetPosition(float position) { libvlc_state_t mpState = LibVlcMethods.libvlc_media_player_get_state(mediaPlayer); if (mpState == libvlc_state_t.libvlc_Ended) { LibVlcMethods.libvlc_media_player_stop(mediaPlayer); LibVlcMethods.libvlc_media_player_play(mediaPlayer); LibVlcMethods.libvlc_media_player_set_time(mediaPlayer, (long)(position * 1000)); } else { LibVlcMethods.libvlc_media_player_set_time(mediaPlayer, (long)(position * 1000)); } }
/// <summary> /// 封装libvlc的快速播放逻辑,传递一个窗口句柄即可 /// 带自动重连功能 /// </summary> /// <param name="drawable"></param> public static void QuickPlay(string uri, IntPtr drawable) { IntPtr vlcPtr = libvlc.libvlc_new(0, IntPtr.Zero); IntPtr vlcMediaPtr = libvlc.libvlc_media_new_location(vlcPtr, uri); IntPtr vlcMediaPlayerPtr = libvlc.libvlc_media_player_new_from_media(vlcMediaPtr); libvlc.libvlc_media_player_set_hwnd(vlcMediaPlayerPtr, drawable); System.Threading.Tasks.Task.Factory.StartNew(() => { while (true) { libvlc_state_t state = libvlc_media_get_state(vlcMediaPtr); //Console.WriteLine("vlc_state = {0}", state); switch (state) { case libvlc_state_t.libvlc_Stopped: case libvlc_state_t.libvlc_NothingSpecial: case libvlc_state_t.libvlc_Error: { libvlc_media_player_stop(vlcMediaPlayerPtr); libvlc.libvlc_media_player_play(vlcMediaPlayerPtr); break; } case libvlc_state_t.libvlc_Ended: { // 停止和刷新控件 libvlc_media_player_stop(vlcMediaPlayerPtr); Win32API.UpdateWindow(drawable); break; } default: { break; } } Thread.Sleep(1000); } }); }