Example #1
0
        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;
            }
        }
Example #2
0
        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));
            }
        }
Example #3
0
        /// <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);
                }
            });
        }