我正在尝试从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。这就是我感到困惑的原始原因...

最佳答案

我遇到了同样的问题,因为snapPicture2函数应该返回“原始”图像(不同于snapPicture,而是返回包装在HTML页面中的图像),但是由于所谓的bug(参考)而更改了FI9816P固件1.9.2.12的行为。 :http://foscam.us/forum/fi9816p-broken-snappicture2-bug-t13482.html)。

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

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

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

10-08 06:13