AForge.Video.FFMPEG.dll

时间:2017-05-11 19:09:16

标签: .net visual-c++ ffmpeg access-violation aforge

我有一个相机类,在这个课程中我使用了一个计时器,在我的tick事件中,我使用AForge.Net的C ++ / Cli中的VideoFileWriter保存视频(x86,.net framework:v4。 6)。
这不应该发生,因为这是托管代码。但即使我在try catch块中包装,程序也因AccessViolationException而崩溃。我已经验证Image不是null。与VideoFileWriter有关。这种情况会在应用开始到运行30分钟之间的任何时间发生。

  

未处理的类型' System.AccessViolationException'   发生在AForge.Video.FFMPEG.dll中   附加信息:尝试读取或写入受保护的内存。   这通常表明其他内存已损坏。

在Visual Studio的输出中,我看到了

  

test.exe中的0x0C4D689F(swscale-2.dll)抛出异常:0xC0000005:访问冲突写入位置0x09F83D80。   抛出异常:' System.AccessViolationException'在   AForge.Video.FFMPEG.dll

代码:

 private: System::Void Video_Recorder_Tick(System::Object^  sender, System::Timers::ElapsedEventArgs^  e)
  {
      Bitmap^ save = ConvertMatToBitmap(image); //function to convert opencv's Mat to .net's Bitmap        
      if(writer!= nullptr)
       writer->WriteVideoFrame(save);
       delete save;
   }

  VideoFileWriter ^writer = gcnew VideoFileWriter();

  private: Void load_VideoWriter()
  {
    writer->Open("C:/video.avi", 640, 480, 10, VideoCodec::Default);        
  }

Visual Studio显示writer

的值很少
  

BitRate 400000
  编解码器默认值
  FrameRate 10
  高度480
  IsOpen是真的   宽度640


如果有人需要更多信息,请告诉我 调用堆栈没有多大帮助

enter image description here

令我惊讶的是,互联网上没有人有这个问题! 代码似乎很直接,可能是什么问题?

1 个答案:

答案 0 :(得分:2)

将编解码器指定为AForge.Video.FFMPEG.VideoCodec.MPEG4,该错误应消失。