Aforge视频捕获并保存在本地磁盘中

时间:2014-04-23 12:30:06

标签: c# video-capture aforge

我想将从网络摄像头捕获的视频保存到本地磁盘。我编写的代码显示了网络摄像头,但它无法保存到本地磁盘中。错误创建压缩流失败。。我该怎么办?

            writer = new AVIWriter("wmv3");
            writer.FrameRate = 30;
            writer.Open("video.avi", Convert.ToInt32(640), Convert.ToInt32(480)); // ERROR İS HERE **Failed creating compressed stream.**

            //Create NewFrame event handler
            //(This one triggers every time a new frame/image is captured
            videoSource.NewFrame += new AForge.Video.NewFrameEventHandler(videoSource_NewFrame);

            //Start recording
            videoSource.Start();


        }
    }       
    void videoSource_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
    {

        //Cast the frame as Bitmap object and don't forget to use ".Clone()" otherwise
        //you'll probably get access violation exceptions
        pictureBoxVideo.BackgroundImage = (Bitmap)eventArgs.Frame.Clone();
        writer.AddFrame((Bitmap)eventArgs.Frame.Clone());
    }

2 个答案:

答案 0 :(得分:0)

您是否考虑过网络摄像头流的大小?我也遇到同样的问题。我知道您将视频大小设置为640和480,但来自网络摄像头的视频流大小(我猜)将永远不会相同。我还猜你把你的容器如picturebox或imagebox设置为640和480,但这并不意味着视频流是相同的。我使用savedialog来检查网络摄像头出来的视频流,然后猜猜是什么?大小将是(648,486)。谁会设置这么奇怪的数字集?但我将我的代码设置为:

  

writer.Open(" video.avi",Convert.ToInt32(648),Convert.ToInt32(486));

它工作正常!

我不知道你的其余代码是否正确,但我确定我的错误是在大小的集合中:)

答案 1 :(得分:0)

四年后,我遇到了同样的问题。几个小时后,我想出了是否没有为编解码器指定wmv3并将其空白writer = new AVIWriter();留空,那么一切正常。

AVIWriter write = new AVIWriter();
write.Open("newTestVideo.avi", Convert.ToInt32(320), Convert.ToInt32(240));
Bitmap bit = new Bitmap(320, 240);
for (int tt = 0; tt < 240; tt++) {
    bit.SetPixel(tt, tt, System.Drawing.Color.FromArgb((int)(UnityEngine.Random.value * 255f), (int)(UnityEngine.Random.value * 255f), (int)(UnityEngine.Random.value * 255f)));
    write.AddFrame(bit);
}
write.Close();