Foscam IP 摄像机:获取快照
Foscam IP camera: get snapshot
我正在尝试从我的 Foscam FI9816P 相机获取快照。
我正在使用以下地址:
http://[IPADDRESS]:[PORT]/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USER]&pwd=[PWD]
这在浏览器中运行良好,显示图像快照。
以编程方式,我过去一直在使用另一台相机,提供 ("raw") JPG 图像作为响应:
using (WebClient client = new WebClient())
{
byte[] JpgFile = null;
JpgFile = client.DownloadData(sWebCam);
// ...
}
现在,这个新相机提供 "HTML page" 作为响应,包含图像 link 作为嵌入的 img
标签:
<html><body><img src="../snapPic/Snap_20150729-164352.jpg"/></body></html>
现在,重点是如果我指向图片地址:
http://[IPADDRESS]:[PORT]/snapPic/Snap_20150729-164352.jpg
我收到 404 - 未找到 错误。
我看不到发生了什么事 "behind the scenes" 来获取图像;最重要的是,我不知道如何在 C# 中获取 "raw" 图片 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 函数应该 return "raw" 图像(与 snapPicture 不同,returning 而不是它包裹在 HTML页),但由于所谓的错误(参考:http://foscam.us/forum/fi9816p-broken-snappicture2-bug-t13482.html)而更改了 FI9816P 固件 1.9.2.12 中的行为。
在我现有的系统中,我需要原始图像,这促使我进一步调查输出一个 NodeJS 模块(顺便说一句,在 GitHub: https://github.com/andreatondo/foscam-snapshot-nodejs 上可用)来解决这个问题。
为了回答您的问题,Foscam 似乎只是在满足您的请求所需的时间内将图像保存在 /snapPic/ 路径中,然后将其删除。这就是当您尝试在 HTML 页面中使用 link 时 return 返回 404 的原因。
这只是为了确认您的方法是正确的,至少在 Foscam 在下一次固件更新中解决问题之前是这样。
使用wget
下载:
wget -m -p -k "http://192.168.8.108:88/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=XXX&pwd=XXX"
我正在尝试从我的 Foscam FI9816P 相机获取快照。 我正在使用以下地址:
http://[IPADDRESS]:[PORT]/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USER]&pwd=[PWD]
这在浏览器中运行良好,显示图像快照。
以编程方式,我过去一直在使用另一台相机,提供 ("raw") JPG 图像作为响应:
using (WebClient client = new WebClient())
{
byte[] JpgFile = null;
JpgFile = client.DownloadData(sWebCam);
// ...
}
现在,这个新相机提供 "HTML page" 作为响应,包含图像 link 作为嵌入的 img
标签:
<html><body><img src="../snapPic/Snap_20150729-164352.jpg"/></body></html>
现在,重点是如果我指向图片地址:
http://[IPADDRESS]:[PORT]/snapPic/Snap_20150729-164352.jpg
我收到 404 - 未找到 错误。 我看不到发生了什么事 "behind the scenes" 来获取图像;最重要的是,我不知道如何在 C# 中获取 "raw" 图片 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 函数应该 return "raw" 图像(与 snapPicture 不同,returning 而不是它包裹在 HTML页),但由于所谓的错误(参考:http://foscam.us/forum/fi9816p-broken-snappicture2-bug-t13482.html)而更改了 FI9816P 固件 1.9.2.12 中的行为。
在我现有的系统中,我需要原始图像,这促使我进一步调查输出一个 NodeJS 模块(顺便说一句,在 GitHub: https://github.com/andreatondo/foscam-snapshot-nodejs 上可用)来解决这个问题。
为了回答您的问题,Foscam 似乎只是在满足您的请求所需的时间内将图像保存在 /snapPic/ 路径中,然后将其删除。这就是当您尝试在 HTML 页面中使用 link 时 return 返回 404 的原因。
这只是为了确认您的方法是正确的,至少在 Foscam 在下一次固件更新中解决问题之前是这样。
使用wget
下载:
wget -m -p -k "http://192.168.8.108:88/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=XXX&pwd=XXX"