增加远程、本地查看摄像头功能

This commit is contained in:
iRankoo
2026-08-15 19:17:12 +08:00
parent b54ad411c0
commit f3a99f9467
11 changed files with 2346 additions and 289 deletions
+103 -2
View File
@@ -23,7 +23,7 @@
export ATHENA_HOST='ws://laolang.duckdns.org:7899'
export API_HOST='http://laolang.duckdns.org:7898'
export MAPBOX_TOKEN='pk.eyJ1Ijoiam5ld2IiLCJhIjoiY2xxNW8zZXprMGw1ZzJwbzZneHd2NHljbSJ9.gV7VPRfbXFetD-1OVF0XZg'
export MAPBOX_TOKEN='<自己注册>'
cd /data/openpilot
exec ./launch_openpilot.sh
@@ -51,7 +51,108 @@ exec ./launch_openpilot.sh
#### 5. 暴露端口和运行docker
sudo docker run -p 7899:7899 -p 7898:7898 -p 7888:7888 -p 1201:1201 -p 5888:5888 opsvr:v1
#### 6.Star me. Thank you.如果觉得很复杂,可以直接看第二步,使用我的服务器。
#### 6. 在 openpilot 中启用 H.264 实时画面
(1) 确保准备好以下文件,并复制到设备的
`/data/openpilot/selfdrive/fp/`
```text
SConscript
main.cc
streamup845.cc
streamup845.h
viewer.html
websocket_server.py
```
其中 `main.cc``h264_streamer` 的程序入口,缺少它将无法生成
`selfdrive/fp/h264_streamer`。当前发布包如果没有该文件,需要从对应的
openpilot/dragonpilot H.264 实现中补齐。
骁龙 845(C3/C3X,构建架构为 `larch64`)使用
`streamup845.cc`。其他 Linux PC/AMD 平台需要同时提供
`streamup.cc``streamup.h`
(2) 在 `/data/openpilot/selfdrive/SConscript` 中增加:
```python
SConscript(['fp/SConscript'])
```
(3) 在 `/data/openpilot/system/manager/process_config.py` 的进程列表中增加:
```python
NativeProcess("h264_streamer", "selfdrive/fp", ["./h264_streamer"], always_run),
PythonProcess("websocket_server", "selfdrive.fp.websocket_server", always_run),
```
(4) 在 `/data/continue.sh` 中配置远端 WebSocket 服务。`ATHENA_HOST`
必须指向服务端 `config.txt``ws_bind` 公网地址:
```bash
export ATHENA_HOST='ws://your-domain.example:7899'
# 可选配置,以下为默认值
export H264_WS_PORT='8089'
export H264_WS_FPS='20'
export H264_WS_BITRATE='2000000'
export H264_REMOTE_MAX_LATENCY='1.5'
```
通常不要设置 `H264_WS_HOST`。它同时用于设备本地
`websocket_server.py` 的监听地址,以及 `h264_streamer` 连接本地服务。
不设置时,Python 服务监听 `0.0.0.0:8089`,编码器连接
`127.0.0.1:8089`。不要将它设置为公网服务器地址,也不要显式设置为
`0.0.0.0`
(5) 重新编译并确认生成可执行文件:
```bash
cd /data/openpilot
scons -j$(nproc) selfdrive/fp/h264_streamer
ls -l selfdrive/fp/h264_streamer
```
如果当前 openpilot 版本不支持指定单个目标,可以直接运行:
```bash
scons -j$(nproc)
```
(6) 服务端需要满足以下条件:
- 使用支持 H.264 实时画面的新版 `opserver`
- `config.txt``athena_host`/`ws_bind` 的公网端口可从设备和浏览器访问。
- 防火墙、Docker 和路由器同时放行 `http_bind``ws_bind`,例如 TCP
`7898` 和 TCP `7899`
- 网页必须连接 `ws_bind` 对应的 WebSocket 端口。如果网页从
`http://domain:7898` 打开,而脚本使用 `location.host`,它会错误连接
`7898`。应通过反向代理把 H.264 WebSocket 请求转发到 `7899`,或者在
网页中明确使用 `ws_bind` 的公网地址。
- HTTPS 页面必须使用 `wss://`,不能连接明文 `ws://`;推荐使用 Nginx、
Caddy 等为 HTTP 和 WebSocket 提供同一 HTTPS 域名。
- 浏览器需要支持 WebCodecs H.264,建议使用新版 Chrome 或 Edge。
(7) 重启后检查进程和端口:
```bash
sudo reboot
# 重连 SSH 后执行
pgrep -af 'h264_streamer|websocket_server'
ss -lntp | grep 8089
```
局域网测试:
```text
http://<设备IP>:8089/viewer.html
```
广域网测试:打开服务端网页,输入正确的 Dongle ID,再选择 Road Cam 或
Wide Cam。必须先确保设备的 `DongleId` 不为空,并且与网页输入值一致。
#### 7.Star me. Thank you.如果觉得很复杂,可以直接看第二步,使用我的服务器。
# openpilot-server for english