C#调用Aforge.net库对多个摄像头进行录像的问题

jisuixian1287 2016-08-23 01:55:59
在c#中调用Aforge.net对多个摄像头进行录像时,首先根据摄像头数目,对Panel进行分屏,然后动态的生成对应数目的videoSourcePlayer,放入Panel中。然后打开多个摄像头并进行录像。
但是这样做的过程中有个问题,由于videoSourcePlayer是动态创建的,故无法对每个videoSourcePlayer添加对应的newFrame函数进行视频采集,本人的做法是遍历所有设备依次调用record_camera函数。
private void record_camera(CameraDA da, int palyer_num)//CameraDA 储存摄像头信息,plyer_num为videoSourcePlayer序号
{
string videoFileName = string.Empty;
videoFileName = _videoPath.TrimEnd('\\') + "\\" + da.Name.Replace(" ", "_") + "\\" + DateTime.Now.ToString("yyyy-MM-dd hh-mm-ss") + ".avi";

_videoWrite = new VideoFileWriter();
da.my_video_writer = _videoWrite;
if ((panel1.Controls[palyer_num] as VideoSourcePlayer).IsRunning)
{
if (CurrentInfo.cameralist[palyer_num].my_devices != null)
{
// this.videoSourcePlayer1.NewFrame += new AForge.Controls.VideoSourcePlayer.NewFrameHandler(this.videoSourcePlayer1_NewFrame);

CurrentInfo.cameralist[palyer_num].my_devices.NewFrame += _videoDevices_NewFrame;
CurrentInfo.cameralist[palyer_num].my_devices.Start();
_videoWrite.Open(videoFileName, 640, 480,30, VideoCodec.MPEG4);
}
}
}
void _videoDevices_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
//throw new NotImplementedException();
Bitmap bmp = eventArgs.Frame;
_videoWrite.WriteVideoFrame(bmp);
bmp.Dispose();
}
现在发现的问题是,每当采集到一帧视频信息就会进入 _videoDevices_NewFrame,不管是哪个摄像头的。但是videoWrite却是全局变量,故无法分辨是对哪个摄像头的视频文件进行存储。
请问各位当对多个摄像头进行录像时(数目未定)大家一般如何处理?
...全文
1072 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sing丶鑫 2016-09-01
  • 打赏
  • 举报
回复
我现在也遇调用多个USB摄像头只显示一个

1,451

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计/Flash/Silverlight 开发 图象工具使用
社区管理员
  • 图象工具使用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧