コード例 #1
0
ファイル: Player.cs プロジェクト: vvvv/VL.GStreamer
 public void Dispose()
 {
     videosink.NewPreroll -= Videosink_NewPreroll;
     videosink.NewSample  -= Videosink_NewSample;
     videosink.Dispose();
     audiosink.Dispose();
     videoFrames.Dispose();
     bus.Message -= Bus_Message;
     bus.RemoveSignalWatch();
     bus.Dispose();
     // Free resources
     playbin.SetState(State.Null);
     playbin.Dispose();
 }
コード例 #2
0
        public void LoadVideo(string uri)
        {
            if (gstThread != null)
            {
                isrunning = false;
                gstThread.Join();
                gstThread = new Thread(new ThreadStart(KeepPolling));
            }

            if (playBin != null)
            {
                playerState = VideoPlayerState.STOPPED;
                Console.WriteLine("STOPPED");

                //Dispose playbin2 and appsink
                playBin.SetState(State.Null);
                playBin.Dispose();
                appSink.SetState(State.Null);
                appSink.Dispose();

                //Create playbin2 and appsink
                playBin = new PlayBin2();

                appSink      = ElementFactory.Make("appsink", "sink") as AppSink;
                appSink.Caps = new Caps("video/x-raw-yuv", new object[] {});
                //appSink.Caps = new Caps("video/x-raw-rgb", new object[] { "bpp", 24 });
                appSink.Drop       = true;
                appSink.MaxBuffers = 8;
                playBin.VideoSink  = appSink;
            }
            else
            {
                //Create playbin2 and appsink
                playBin      = new PlayBin2();
                appSink      = ElementFactory.Make("appsink", "sink") as AppSink;
                appSink.Caps = new Caps("video/x-raw-yuv", new object[] {});
                //appSink.Caps = new Caps("video/x-raw-rgb", new object[] { "bpp", 24 });
                appSink.Drop       = true;
                appSink.MaxBuffers = 8;
                playBin.VideoSink  = appSink;
            }

            //init variables
            texturesOK = false;
            width      = 0;
            height     = 0;

            //Set file uri
            string validUri = uri;

            if (!validUri.StartsWith("file://"))
            {
                validUri = "file://" + uri;
            }
            playBin.Uri = validUri;
            StateChangeReturn sr = playBin.SetState(State.Playing);

            Console.WriteLine(sr.ToString());
            playerState = VideoPlayerState.LOADING;
            Console.WriteLine("LOADING:" + validUri);

            if (gstThread == null)
            {
                gstThread = new Thread(new ThreadStart(KeepPolling));
            }

            isrunning = true;
            //Start polling thread...future thought, using async queue?
            gstThread.Start();

            return;
        }