1. 所用工具

工具 说明
phpstudy 提供 Apache 运行环境
Sunny-Ngrok 将本机 80 端口映射到公网域名
ESP32-CAM 模块 内网部署的视频流设备
Apache Proxy 模块 实现请求反向代理和转发

    

2.  搭建相关环境
2. 1 使用Sunny-Ngrok注册并认证

(Sunny-Ngrok内网转发内网穿透 - 国内内网映射服务器)

(Sunny-Ngrok使用教程 · Sunny-Ngrok说明文档)

这种方式会收取一定认证费用

选择合适的服务器,这里可以选择免费的

**这里的名称和域名可按需填写,可以直接使用本地的80端口

点击查看状态,可以发现他并不在线,现在下载客户端(Sunny-Ngrok内网转发)

接下来找到启动命令,并保存下来

保存的命令写入启动工具中,等待连接即可,连接成功后,返回查看此时的隧道状态,

即为开启完成了。

2.2 下载小皮面板,一键搭建服务

启动面板,配置网站,选择和Sunny-Ngrok相同的端口,打开套件Apache

此处打开网站

2.3 现在配置Apache相关文件,打开并找到httpd.conf文件

确保 Apache 的以下模块已经启用(取消注释(#)即可):

  • mod_proxy

  • mod_proxy_http

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_http_module modules/mod_proxy_http.so

并在文件结尾加上

<VirtualHost *:80>
    ServerName 此处填上你的隧道域名(Sunny-Ngrok内网穿透服务)->(隧道管理)->(赠送域名)

    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy *>
        Require all granted
    </Proxy>

     # 先写 /stream 的代理规则(更精确)
    ProxyPass        /stream http://192.168.1.9:81/stream
    ProxyPassReverse /stream http://192.168.1.9:81/stream

    # 然后写 / 根路径代理
    ProxyPass        / http://192.168.1.9/
    ProxyPassReverse / http://192.168.1.9/
</VirtualHost>

3. 修改配置文件
3. 1在这里,你需要修改相关代理ip,具体方法是通过串口助手配置ssid等
指令 说明 例子 备注
sta_ssid: 要连接的 WiFi 名称 sta_ssid:yahboom yahboom 是要连接的 WiFi 名称
sta_pd: 要连接的 WiFi 密码 sta_pd:12345678 12345678 是对应 WiFi 的密码

通过sta_ip获取ip地址,此时你已经可以在同一内网中访问该地址了

访问sta_ip地址,点击下方的Start Stream即可

观察源码可以看到这里

document.addEventListener('DOMContentLoaded', function (event) {
var baseHost = document.location.origin
var streamUrl = baseHost + ':81'
const startStream = () => {
view.src = `${streamUrl}/stream`
show(viewContainer)
streamButton.innerHTML = 'Stop Stream'
  • var streamUrl = baseHost + ':81'
    这行代码把当前网页地址(例如 http://192.168.1.9)加上端口 :81,拼接出视频流服务器的地址:
    streamUrl = 'http://192.168.1.9:81'

  • view.src = ${streamUrl}/stream``
    这行代码在刚才拼好的地址后面再加上 /stream,变成完整的视频流地址(例如:http://192.168.1.9:81/stream),然后将这个地址设置给一个图像控件 view,这样网页上就能看到来自摄像头的图像了。

这也是为什么httpd.conf中,你需要加上这句的原因

 # 先写 /stream 的代理规则(更精确)
    ProxyPass        /stream http://192.168.1.9:81/stream
    ProxyPassReverse /stream http://192.168.1.9:81/stream

现在,你可以通过隧道域名+/stream的方式查看,是否有图像传回

最后,使用其他设备的流量或者连接其他wifi来模拟外网,来看一下是否可以读取到视频呢?

4. 你可能遇见的问题
问题现象 可能原因 解决方案
502 Bad Gateway 内网设备未响应 / IP 配错 / 不支持 chunked 确保 192.168.1.9:81/stream 在本地可访问,可以使用curl -v http://192.168.1.9/查看
页面跳转到 phpstudy 默认页 Apache 虚拟主机未正确匹配 确保配置中 ProxyPass / http://192.168.1.9/ 正确写入或者直接删除index,并 重启Apache
/stream 加载不出视频 多开了网页 仅仅只使用一个网页访问
页面显示 Nothing matches the given URI 请求 URI 路径 ESP32 未处理 确认 ESP32 的 HTTP 服务监听 /stream 路径
反代 /stream 显示 index 页面 Apache 未区分路径优先级 确保 /streamProxyPass 写在 / 前面
访问根路径显示旧页面 浏览器缓存 清理浏览器缓存或强制刷新(Ctrl + F5)
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐