Ejemplo n.º 1
0
        /// <summary>
        /// 初始化视频捕捉器
        /// </summary>
        private void iniVideoCapturer()
        {
            canvasBitmap = new Bitmap(VideoSize.Width, VideoSize.Height);
            using (Graphics g = Graphics.FromImage(canvasBitmap))
                g.FillRectangle(Brushes.Bisque, 0, 0, canvasBitmap.Width, canvasBitmap.Height);

            gfx = cLocal.CreateGraphics();
            gfx.DrawImage(canvasBitmap, 0, 0, canvasBitmap.Width, canvasBitmap.Height);

            cam = new CamCapture();

            var deviceList = cam.GetDeviceList();                    //获得驱动列表

            selectedDeviceMetrics = cam.SelectDevice(deviceList[0]); //获得尺寸大小
            cam.SelectMetrics(selectedDeviceMetrics[0]);
            bool res = cam.Start();                                  //开始捕捉视频

            if (res == false)
            {
                //IMLibrary3.Global.MsgShow("没有可用的摄像头。");
            }
            metrics = cam.Metrics;//获得尺寸

            encoder           = new StreamCoders.Encoder.H264Encoder();
            encoder.Framerate = 11;
            encoder.SetInputResolution((uint)VideoSize.Width, (uint)VideoSize.Height);
            encoder.IFrameFrequency = 40;
            encoder.Bitrate         = 128000;
            encoder.PayloadType     = 103;
            res = encoder.Init();
            if (res == false)
            {
                //IMLibrary3.Global.MsgShow("无法初始化视频编码器。");
                return;
            }
            byte[] zeroBuffer = new byte[VideoSize.Width * VideoSize.Height * 3];
            byte[] initData   = encoder.EncodeToArray(zeroBuffer);

            decoder = new StreamCoders.Decoder.H264Decoder();
            decoder.SetInputResolution((uint)VideoSize.Width, (uint)VideoSize.Height);
            decoder.SetInputFrameRate(11);
            res = ((StreamCoders.Decoder.H264Decoder)decoder).Init(initData);
            if (res == false)
            {
                //IMLibrary3.Global.MsgShow("无法初始化视频解码器。");
                return;
            }

            timer1.Interval = (int)(1000.0 / 25);
            timer1.Start();
        }
Ejemplo n.º 2
0
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (cam != null)
            {
                byte[] buffer = cam.GetFrame();
                if (buffer == null)
                {
                    return;
                }
                Bitmap pBmp = StreamCoders.Tools.Visuals.ByteArrayToBitmap_RGB24((uint)metrics.Width, (uint)metrics.Height, buffer);
                //Console.WriteLine("metrics.Width:" + metrics.Width.ToString()+ "metrics.Height:" + metrics.Height.ToString());
                pBmp.RotateFlip(RotateFlipType.Rotate180FlipX);
                using (Graphics g = Graphics.FromImage(canvasBitmap))
                {
                    g.DrawImage(pBmp, 0, 0, canvasBitmap.Width, canvasBitmap.Height);
                    //g.DrawImage(pBmp, 0, 0, cLocal.Width,cLocal.Height);
                    gfx.DrawImage(canvasBitmap, new Point(0, 0));
                }
            }

            Bitmap      t1                = new Bitmap(canvasBitmap, new Size(VideoSize.Width, VideoSize.Height));
            Bitmap      temp              = t1.Clone(new RectangleF(0, 0, VideoSize.Width, VideoSize.Height), PixelFormat.Format24bppRgb);
            Rectangle   dimension         = new Rectangle(0, 0, temp.Width, temp.Height);
            BitmapData  picData           = temp.LockBits(dimension, ImageLockMode.ReadWrite, temp.PixelFormat);
            PixelFormat format            = temp.PixelFormat;
            IntPtr      pixelStartAddress = picData.Scan0;

            Byte[] rawData = new Byte[picData.Stride * VideoSize.Height];
            System.Runtime.InteropServices.Marshal.Copy(pixelStartAddress, rawData, 0, rawData.Length);
            temp.UnlockBits(picData);

            Byte[] asmFrame = encoder.EncodeToArray(rawData);
            if (asmFrame != null)
            {
                frameTransmit.sendData(IMLibrary3.Protocol.TransmitType.Video, asmFrame);//将视频数据编码后发送给对方
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 初始化视频捕捉器
        /// </summary>
        private void iniVideoCapturer()
        {
            canvasBitmap = new Bitmap(VideoSize.Width, VideoSize.Height);
            using (Graphics g = Graphics.FromImage(canvasBitmap))
                g.FillRectangle(Brushes.Bisque, 0, 0, canvasBitmap.Width, canvasBitmap.Height);

            gfx = cLocal.CreateGraphics();
            gfx.DrawImage(canvasBitmap, 0, 0, canvasBitmap.Width, canvasBitmap.Height);

            cam = new CamCapture();

            var deviceList = cam.GetDeviceList();//获得驱动列表
            selectedDeviceMetrics = cam.SelectDevice(deviceList[0]);//获得尺寸大小
            cam.SelectMetrics(selectedDeviceMetrics[0]);
            bool res = cam.Start();//开始捕捉视频
            if (res == false)
            {
                //IMLibrary3.Global.MsgShow("没有可用的摄像头。");
            }
            metrics = cam.Metrics;//获得尺寸

            encoder = new StreamCoders.Encoder.H264Encoder();
            encoder.Framerate = 11;
            encoder.SetInputResolution((uint)VideoSize.Width, (uint)VideoSize.Height);
            encoder.IFrameFrequency = 40;
            encoder.Bitrate = 128000;
            encoder.PayloadType = 103;
            res = encoder.Init();
            if (res == false)
            {
                //IMLibrary3.Global.MsgShow("无法初始化视频编码器。");
                return;
            } 
            byte[] zeroBuffer = new byte[VideoSize.Width * VideoSize.Height * 3];
            byte[] initData = encoder.EncodeToArray(zeroBuffer);

            decoder = new StreamCoders.Decoder.H264Decoder();
            decoder.SetInputResolution((uint)VideoSize.Width, (uint)VideoSize.Height);
            decoder.SetInputFrameRate(11);
            res = ((StreamCoders.Decoder.H264Decoder)decoder).Init(initData);
            if (res == false)
            {
                //IMLibrary3.Global.MsgShow("无法初始化视频解码器。");
                return;
            }

            timer1.Interval = (int)(1000.0 / 25);
            timer1.Start();
        }