Exemple #1
0
        public void StartVideoRx(int recvPort, string name)
        {
            _videoRxPipeline = new Pipeline("videorx-pipeline");
            Bin bin = (Bin)_videoRxPipeline;

            //bin.Bus.AddWatch(new BusFunc(BusCall));
            _videoRxPipeline.Bus.AddSignalWatch();
            _videoRxPipeline.Bus.Message += (o, args) => BusCall(args.Message);

            Element udpSrc             = ElementFactory.Make("udpsrc", "udp_src");
            Element rtpH263Depayloader = ElementFactory.Make("rtph263pdepay", "h263_deplayloader");
            Element h263Decoder        = ElementFactory.Make("ffdec_h263", "h263_decoder");
            Element cspFilter          = ElementFactory.Make("ffmpegcolorspace", "csp_filter_rx");

            Element screenSink = ElementFactory.Make("dshowvideosink", "video-sink_rx");

            if ((_videoRxPipeline == null) || (udpSrc == null) || (rtpH263Depayloader == null) || (h263Decoder == null) || (cspFilter == null) || (screenSink == null))
            {
                MessageBox.Show("Error Creating Gstreamer Elements for Recieving Video!");
            }
            else
            {
                udpSrc["port"] = recvPort;

                bin.Add(udpSrc, rtpH263Depayloader, h263Decoder, cspFilter, screenSink);
                Caps caps = Caps.FromString("application/x-rtp,clock-rate=90000,payload=96,encoding-name=H263-1998");

                if (!udpSrc.LinkFiltered(rtpH263Depayloader, caps))
                {
                    Console.WriteLine("link failed between udp_src and rtp_h263_depayloader");
                }

                if (!Element.Link(rtpH263Depayloader, h263Decoder, cspFilter, screenSink))
                {
                    Console.WriteLine("link failed between rtp_h263_depayloader and screen_sink");
                }

                Gst.Interfaces.XOverlayAdapter xadapter = new Gst.Interfaces.XOverlayAdapter(screenSink.Handle);

                VideoWindow.wfhost2.Dispatcher.Invoke(
                    System.Windows.Threading.DispatcherPriority.Normal,
                    new Action(
                        delegate
                {
                    VideoWindow.remote_video_label.Content = "Remote Video:" + name;
                    xadapter.XwindowId = (ulong)VideoWindow.video_rx_canvas.Handle;
                }));

                _videoRxPipeline.SetState(State.Playing);
            }
        }
Exemple #2
0
        private void btnStart_Click(object sender, EventArgs e)
        {
            // Tell d3dvideosink to render into our window.

            var overlay = new Gst.Interfaces.XOverlayAdapter(m_Sink.Handle);

            overlay.XwindowId = (ulong)videoPanel.Handle;



            m_Pipeline.SetState(State.Playing);



            //  m_Pipeline.DebugToDotFile("graph"); // Save pipeline to graph.dot
        }
Exemple #3
0
        public MainWindow()
            : base(WindowType.Toplevel)
        {
            BuildInterface ();

            pipeline = new Gst.Pipeline ();
            drawSink = Gst.ElementFactory.Make ("xvimagesink");
            camerabin = Gst.ElementFactory.Make ("camerabin");
            camerabin.Connect ("image-done", new Gst.SignalHandler (OnImageDone));
            pipeline.SetState (Gst.State.Null);

            overlayAdapter = new Gst.Interfaces.XOverlayAdapter (drawSink.Handle);
            overlayAdapter.XwindowId = gdk_x11_drawable_get_xid (drawingArea.GdkWindow.Handle);
            pipeline.Add (camerabin);

            if (camerabin.HasProperty ("viewfinder-sink")) {
                camerabin ["viewfinder-sink"] = drawSink;
            }

            if (camerabin.HasProperty ("filename")) {
                camerabin ["filename"] = "snapshot.png";
            }

            pipeline.SetState (Gst.State.Playing);
            this.ShowAll ();
        }
Exemple #4
0
        private void btnStart_Click(object sender, EventArgs e)
        {

            // Tell d3dvideosink to render into our window.

            var overlay = new Gst.Interfaces.XOverlayAdapter(m_Sink.Handle);

            overlay.XwindowId = (ulong)videoPanel.Handle;



            m_Pipeline.SetState(State.Playing);



          //  m_Pipeline.DebugToDotFile("graph"); // Save pipeline to graph.dot

        }
Exemple #5
0
        public void StartVideoTx(string destIP, int destPort)
        {
            VideoWindow.Dispatcher.Invoke(
                System.Windows.Threading.DispatcherPriority.Normal,
                new Action(
                    () => VideoWindow.Show()));

            Element cameraSrc;

            _videoTxPipeline = new Pipeline("videotx-pipeline");
            Bin bin = (Bin)_videoTxPipeline;

            //bin.Bus.AddWatch(new BusFunc(BusCall));
            _videoTxPipeline.Bus.AddSignalWatch();
            _videoTxPipeline.Bus.Message += (o, args) => BusCall(args.Message);


            if ((cameraSrc = ElementFactory.Make("videotestsrc", "video_src_tx")) == null)
            {
                Console.WriteLine("Could not create webcam-source");
            }

            Element cspFilter  = ElementFactory.Make("ffmpegcolorspace", "filter_tx");
            Element cspFilter2 = ElementFactory.Make("ffmpegcolorspace", "filter2_tx");
            Element screenSink = ElementFactory.Make("dshowvideosink", "video-sink_tx");
            Element tee        = ElementFactory.Make("tee", "tee_tx");

            Element screenQueue = ElementFactory.Make("queue", "screen-queue_tx");
            Element udpQueue    = ElementFactory.Make("queue", "udp-queue_tx");

            Element h263Encoder      = ElementFactory.Make("ffenc_h263p", "ffenc_h263p_tx");
            Element rtpH263Payloader = ElementFactory.Make("rtph263ppay", "rtp_payloader_tx");
            Element udpSink          = ElementFactory.Make("udpsink", "udp_sink_tx");

            if ((_videoTxPipeline == null) || (cameraSrc == null) || (screenSink == null) || (cspFilter == null) || (cspFilter2 == null) || (h263Encoder == null) ||
                (rtpH263Payloader == null) || (udpSink == null) || (udpQueue == null) || (screenQueue == null))
            {
                MessageBox.Show("Error Creating Gstreamer Elements for sending video!");
            }
            else
            {
                udpSink["host"] = destIP;
                udpSink["port"] = destPort;

                bin.Add(cameraSrc, screenSink, cspFilter, cspFilter2, tee, h263Encoder, rtpH263Payloader, udpSink, udpQueue, screenQueue);
                Caps caps = Caps.FromString("video/x-raw-rgb,width=" + _settings.videocall_width + ",height=" + _settings.videocall_height);

                if (!cameraSrc.LinkFiltered(tee, caps))
                {
                    Console.WriteLine("link failed between camera_src and tee");
                }

                if (!Element.Link(tee, cspFilter, screenQueue, screenSink))
                {
                    Console.WriteLine("link failed between tee and screen_sink");
                }

                if (!Element.Link(tee, cspFilter2, udpQueue, h263Encoder, rtpH263Payloader, udpSink))
                {
                    Console.WriteLine("link failed between tee and udp_sink");
                }

                Gst.Interfaces.XOverlayAdapter xadapter = new Gst.Interfaces.XOverlayAdapter(screenSink.Handle);

                VideoWindow.wfhost1.Dispatcher.Invoke(
                    System.Windows.Threading.DispatcherPriority.Normal,
                    new Action(
                        delegate
                {
                    VideoWindow.local_video_label.Content = "Local Video: " + _settings.ims_public_user_identity;
                    xadapter.XwindowId = (ulong)VideoWindow.video_tx_canvas.Handle;
                }));

                _videoTxPipeline.SetState(State.Playing);
            }
        }