如何使用 php fsockopen 连接到 TP c200 网络摄像机

问题描述 投票:0回答:1

我无法弄清楚将视频从 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);
}
?>
camera ip video-streaming fsockopen
1个回答
0
投票

已解决*** 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 网页,则后一个示例将起作用。

© www.soinside.com 2019 - 2024. All rights reserved.