Ejemplo n.º 1
0
 private void timerRTCSend_Tick(object sender, EventArgs e)
 {
     foreach (var v in OnlinePeerList)
     {
         DllImport.DataChannelSendText(v.Value.peerconn, "Hello RTC Server," + send_test_num++ + ",server peerconn.num:" + OnlinePeerList.Count);
     }
 }
Ejemplo n.º 2
0
 void OnRenderLocal(IntPtr yuv, int w, int h)
 {
     lock (staticform.pictureBoxLocal)
     {
         if (bgrBuffremote == null)
         {
             bgrBuffremote = new byte[w * 3 * h];
         }
         if (DllImport.EncodeI420toBGR24(yuv, w, h, bgrBuffremote, true) == 0)
         {
             if (remoteImg == null)
             {
                 var bufHandle = GCHandle.Alloc(bgrBuffremote, GCHandleType.Pinned);
                 remoteImg = new Bitmap((int)w, (int)h, (int)w * 3, PixelFormat.Format24bppRgb, bufHandle.AddrOfPinnedObject());
             }
         }
     }
     try
     {
         Invoke(renderRemote, this);
     }
     catch // don't throw on form exit
     {
     }
 }
Ejemplo n.º 3
0
        private void Form1_Load(object sender, EventArgs e)
        {
            staticform = this;

            staticform.comboBoxVideo.Items.Add("请选择摄像头");
            DllImport.GetVideoDevices(set_devcie_callback);

            _set_global_callback = set_global_callback;
            DllImport.set_global_callback(_set_global_callback);
            DllImport.InitWebRtc();

            startPeerconn();

            System.Windows.Forms.Timer timertcsend = new System.Windows.Forms.Timer();
            timertcsend.Interval = 1000;
            timertcsend.Tick    += timerRTCSend_Tick;
            timertcsend.Start();

            System.Windows.Forms.Timer timerVirtualCam = new System.Windows.Forms.Timer();
            timerVirtualCam.Interval = 1000 / captureFps;
            timerVirtualCam.Tick    += timerVirtualCam_Tick;
            timerVirtualCam.Start();
        }
Ejemplo n.º 4
0
        private void timerVirtualCam_Tick(object sender, EventArgs e)
        {
            if (img == null)
            {
                var bufHandle = GCHandle.Alloc(imgBuf, GCHandleType.Pinned);
                imgBufPtr = bufHandle.AddrOfPinnedObject();
                img       = new Bitmap(screenWidth, screenHeight, screenWidth * 3, PixelFormat.Format24bppRgb, imgBufPtr);
                g         = Graphics.FromImage(img);
            }
            g.Clear(Color.DarkBlue);

            var rc = RectangleF.FromLTRB(0, 0, img.Width, img.Height);

            g.DrawString(string.Format("{0}", DateTime.Now.ToString("hh:mm:ss.fff")), fBig, Brushes.LimeGreen, rc, sfTopRight);

            foreach (var v in OnlinePeerList)
            {
                unsafe
                {
                    var imgbuf = (IntPtr)imgBufPtr.ToPointer();
                    DllImport.EncodeI420(v.Value.peerconn, imgbuf, screenWidth, screenHeight, 1, 0, true);
                }
            }
        }
Ejemplo n.º 5
0
 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
 {
     wsclient.Close();
     DllImport.UninitWebRtc();
 }
Ejemplo n.º 6
0
        void startPeerconn()
        {
            wsclient = new WebSocket("ws://" + exthost + ":9000");

            wsclient.OnOpen += (wsender, wse) =>
            {
                string smsg = JsonConvert.SerializeObject(new
                {
                    command = "__UserCreate",
                    udata   = new { UserID = UserID, Password = Password }
                });

                wsclient.Send(smsg);
            };
            wsclient.OnMessage += (wsender, wse) =>
            {
                Hashtable ht      = JsonConvert.DeserializeObject <Hashtable>(wse.Data);
                var       command = ht["command"].ToString();
                switch (command)
                {
                case "__OnLoginSuccessful":
                {
                }
                break;

                case "__OnError":
                {
                    this.BeginInvoke(new MethodInvoker(delegate()
                        {
                            label1.Text = ht["info"].ToString();
                        }));
                }
                break;

                case "__Offer":
                {
                    tagpeer objpeer = new tagpeer();
                    objpeer._OnRenderLocal = OnRenderLocal;
                    objpeer.peerconn       = DllImport.CreatPeerConnection(ht["socketId"].ToString(), objpeer._OnRenderLocal, null, screenWidth, screenHeight);
                    DllImport.AddServerConfig(objpeer.peerconn, StunIP1, "", "");
                    DllImport.AddServerConfig(objpeer.peerconn, StunIP2, "", "");
                    if (!string.IsNullOrEmpty(videoDevice) && videoDevice != "请选择摄像头")
                    {
                        if (!DllImport.OpenVideoCaptureDevice(objpeer.peerconn, videoDevice))
                        {
                            MessageBox.Show("摄像头打开失败");
                        }
                    }
                    object sdp = JsonConvert.DeserializeObject <Hashtable>(ht["desc"].ToString())["sdp"];
                    if (DllImport.StartPeerConnection(objpeer.peerconn))
                    {
                        OnlinePeerList.TryAdd(ht["socketId"].ToString(), objpeer);
                        DllImport.OnOfferRequest(objpeer.peerconn, sdp.ToString());
                    }
                }
                break;
                }
            };

            wsclient.Connect();
        }