Foscam IP摄像头:获取快照

时间:2015-07-29 14:51:49

标签: c# image video ip-camera

我正在尝试从我的Foscam FI9816P相机获取快照。 我正在使用以下地址:

http://[IPADDRESS]:[PORT]/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USER]&pwd=[PWD]

这可以在浏览器中正常工作,显示图像快照。

以编程方式,我一直在使用过去的另一台相机,提供(“原始”)JPG图像作为回复:

using (WebClient client = new WebClient())
{
    byte[] JpgFile = null;
    JpgFile = client.DownloadData(sWebCam);
    // ...
}

现在,这款新相机提供了一个“HTML页面”作为回复,其中包含图片链接作为嵌入式img标记:

<html><body><img src="../snapPic/Snap_20150729-164352.jpg"/></body></html>

现在,重点是如果我指向图像地址:

http://[IPADDRESS]:[PORT]/snapPic/Snap_20150729-164352.jpg

我收到 404 - 未找到错误。 我无法看到“幕后”发生的事情来获取图像;最重要的是,我不知道如何在C#中获得“原始”图像JPG。

修改[1]:

我有这个工作,解析html中的图像标签,并发送第二个“GET”请求:

sWebCam = String.Concat("http://", cConfig.WebcamIpAddress, "/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USER]&pwd=[PWD]");
try
{
    JpgFile = client.DownloadData(sWebCam);

    string sTmp = System.Text.Encoding.Default.GetString(JpgFile);
    sTmp = sTmp.Substring(sTmp.IndexOf("<img src=\"") + "<img src=\"".Length);
    sTmp = sTmp.Substring(0, sTmp.IndexOf("\"/>"));
    sTmp = sTmp.Replace("..", "");

    sWebCam = string.Concat("http://", cConfig.WebcamIpAddress, sTmp);
    JpgFile = client.DownloadData(sWebCam);
}

所以,我想知道为什么从浏览器(http://[IPADDRESS]:[PORT]/snapPic/Snap_20150729-164352.jpg)访问最终图像地址给出了404.这就是为什么我感到困惑的原因...

1 个答案:

答案 0 :(得分:2)

我面临同样的问题,因为snapPicture2函数应该返回“原始”图像(与snapPicture不同,返回它包含在HTML页面中),但由于涉嫌声称改变了它在FI9816P固件1.9.2.12中的行为bug(参考:http://foscam.us/forum/fi9816p-broken-snappicture2-bug-t13482.html)。

在我现有的系统中,我需要原始图像,这使我进一步调查输出NodeJS模块(在GitHub上可以使用btw:https://github.com/andreatondo/foscam-snapshot-nodejs)来解决问题。

为了回答您的问题,Foscam似乎将图像保存在 / snapPic / 路径中,仅用于提供请求所需的时间,然后将其删除。这就是当您尝试在HTML页面中使用链接时返回404的原因。

这只是为了确认您的方法是正确的,至少在Foscam将问题解决到下一次固件更新之前。