从相机保存网络摄像头而不冻结应用程序

本文关键字:冻结 应用程序 摄像头 相机 保存 网络 | 更新日期: 2023-09-27 18:24:40

嘿,我正在尝试保存网络摄像头的视频并将其保存为未压缩。但是,任何时候单击保存按钮,应用程序都会冻结,直到保存完成。如有任何建议,我将不胜感激。我正在使用网络摄像头"FLea 3"的托管代码(来自灰点)

    private void button1_Click(object sender, EventArgs e)
    {
       uint k_numImages = 100;
       // ManagedAVIRecorder aviRecorder = new ManagedAVIRecorder();
       // List<ManagedImage> imageList = new List<ManagedImage>();

            List<ManagedImage> imageList = new List<ManagedImage>();
            ManagedImage rawImage = new ManagedImage(m_rawImage);
           for (int imageCnt = 0; imageCnt < k_numImages; imageCnt++)
       // while (m_grabImages == true)
            {
                m_camera.RetrieveBuffer(rawImage);
                ManagedImage tempImage = new ManagedImage(rawImage);
                imageList.Add(tempImage);
             }

            if (m_grabImages==true)
            {
           //Encoding bit
            string aviFileName;

            AviOption option = new AviOption();
            option.frameRate = 24;
            aviFileName = String.Format("SaveCSharp-aviuncompressed");
            aviRecorder.AVIOpen(aviFileName, option);
           // aviFileName = String.Format("SaveCSharp-h264");
          //  H264Option option = new H264Option();
          //  option.frameRate = 24;
          //  option.bitrate = 20000000;
          //  option.height = Convert.ToInt32(m_rawImage.rows);
           // option.width = Convert.ToInt32(m_rawImage.cols);
         //   aviRecorder.AVIOpen(aviFileName, option);
         for (int imageCnt = 0; imageCnt < imageList.Count; imageCnt++)
                {
                    aviRecorder.AVIAppend(imageList[imageCnt]);

                }
             aviRecorder.AVIClose();
            }


        }
    private void button2_Click(object sender, EventArgs e)
    {
    //  aviRecorder.AVIClose();
    }
    }

   }

从相机保存网络摄像头而不冻结应用程序

您很可能希望在另一个线程上运行记录操作。然而,这会变得有点棘手,因为你必须来回向记录器线程传递消息,例如告诉它什么时候停止。