我无法弄清楚将视频从 Tapo c200 流式传输到我的网页的语法。我使用 Apache 服务器成功地在我的 PC 和树莓派上运行了 php 代码,该服务器对在 MJPEG 流媒体上运行的树莓派摄像头进行流传输。
**成功**
我的树莓派摄像头使用 MJPEG-streamer 应用程序配置为 IP 摄像头。它在 wifi 网络上的定义为:
http://192.168.1.129:8080/?action=stream
以下 fsockopen 脚本使用以下 php 代码成功到达此相机,并通过 html 中的“src = 调用下面的脚本”将其显示在我的网页上
<?php
$server = "192.168.1.129"; // camera server address
$port = 8080; // camera server port
$url = "/?action=stream"; // image url on server
set_time_limit(0);
$fp = fsockopen($server, $port, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br>\n"; // error handling
} else {
$urlstring = "GET ".$url." HTTP/1.0\r\n\r\n";
fputs ($fp, $urlstring);
while ($str = trim(fgets($fp, 4096)))
header($str);
fpassthru($fp);
fclose($fp);
}
?>
失败
我已经检查了 Tapo 相机的文档,要调用它,需要一个 id 和一个密码,我也在应用程序中的相机设置中设置了这些
要访问此相机,我发现了以下语法:-
1920x1080:rtsp://管理员:[电子邮件受保护]:554/stream1
但我似乎无法弄清楚如何使 fsockopen 代码工作。这是我微弱的尝试
<?php
$server = "192.168.1.181"; // camera server address
$port = 8090; // camera server port
$url = "1920x1080:rtsp://administrator:[email protected]:554/stream1";
set_time_limit(0);
$fp = fsockopen($server, $port, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br>\n"; // error handling
} else {
$urlstring = "GET ".$url." HTTP/1.0\r\n\r\n";
fputs ($fp, $urlstring);
while ($str = trim(fgets($fp, 4096)))
header($str);
fpassthru($fp);
fclose($fp);
}
?>
已解决*** TAPO 摄像头物超所值,锐利,夜视效果出色。我只是想将流媒体源包含到自定义 html 网页中。该摄像头在 VLC、iSPY/AgentDVR、甚至 Python 中运行良好,但简单地作为图像流式传输到自定义 HTML 网页是我最初的问题。
经过一番搜索,我发现安装好的AgentDVR无需打开,通过http引用就可以访问
例如 http://192.168.1.244:8090/video.mjpg?oid=1&size=1050x590
其中 oid=1 指安装在 AgentDVR 上的摄像机编号
需要 php 套接字来提供服务器连接,因此上面的 php 示例将变为
<?php
$server = "192.168.1.244"; // computer where AgentDVR is installed
$port = 8090; // camera server port
$url = "/video.mjpg?oid=1&size=1050x590";
set_time_limit(0);
$fp = fsockopen($server, $port, $errno, $errstr, 30);`
etc......... (as above)
将上述代码放入php文件中,例如DVR.php
HTML 看起来像这样
<img src="DVR.php">
但为什么不简单地使用
<img src="http://192.168.1.244:8090/video.mjpg?oid=1&size=1050x590">
就像我的网页使用https认证的域名一样,网络浏览器会阻止对http地址的调用(安全原因)并拒绝显示摄像头流。如果您使用的是 http 网页,则后一个示例将起作用。