Not sure this will solve your problem, but when you create the event handler for the NewFrame event
VideoStream[i].NewFrame += new NewFrameEventHandler(VideoStream_NewFrame1);
you will end up using the same method for both cameras.
This means that you need to make use of the sender parameter to figure out which camera is calling the method.
[Updated]
using AForge.Video;
public MJPEGStream[] VideoStream = new MJPEGStream[2];
private string[] MetaUrl = {"http://192.168.0.3/video.cgi?","http://192.168.0.2/video.cgi?"};
private PictureBox[] boxes;
private void Form1_Load(object sender, EventArgs e)
{
boxes = new PictureBox[VideoStream.Length];
for (int i = 0; i < VideoStream.Length; i++)
{
VideoStream[i] = new MJPEGStream();
VideoStream[i].Source = MetaUrl[i];
VideoStream[i].Login = "admin";
VideoStream[i].Password = "";
boxes[i].Tag = VideoStream[i];
}
}
[Updated]
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < VideoStream.Length; i++)
{
VideoStream[i].Start();
VideoStream[i].NewFrame += new NewFrameEventHandler(VideoStream_NewFrame1);
}
}
private void VideoStream_NewFrame1(object sender, NewFrameEventArgs eventArgs)
{
[Updated]
MJPEGStream vs = (sender as MJPEGStream);
if (vs != null)
{
Bitmap FrameData = new Bitmap(eventArgs.Frame);
foreach (PictureBox box in boxes)
{
if ((MJPEGStream)box.Tag == vs)
{
box.Image = FrameData;
break;
}
}
}
}
If the class MJPEGStream contains a Tag property, it would be easier to use that.