magichao326/panasonic-hc-x2-control
GitHub: magichao326/panasonic-hc-x2-control
一个零依赖的 Python 库,用于通过网络远程控制松下 HC-X2 / HC-X20 摄像机并接收实时遥测数据。
Stars: 1 | Forks: 0
# 松下 HC-X2 / HC-X20 遥控器 (HC-ROP / P2Control)
一个无依赖的 Python 客户端,用于通过网络远程控制 **松下 HC-X2 和
HC-X20** 摄像机,使用与松下官方 HC ROP 应用相同的 **HC-ROP / P2Control**
协议。
可以通过 TCP 控制白平衡、R/B 增益、光圈、对焦、变焦、增益、快门、录制、
tally、音频和菜单,并读取通过 UDP 推送的实时遥测数据(光圈 / 对焦 / 变焦 /
镜头型号 / gamma / 色温 / 录制事件)。
已在真实的 **HC-X2** 和 **HC-X20** 机身上进行测试。该协议在
大部分 HC-X / AG-CX 系列中通用,因此 HC-X1500 / HC-X2000 / AG-CX10 等
很可能兼容(此处未测试,欢迎反馈)。
## 功能
- **零依赖** - 纯 Python 标准库(`socket`、`hashlib`、
`struct`、`threading`)。支持 Python 3.8+。
- **单次握手认证** - 采用 HTTP Digest 风格登录,随后重复使用 auth token 和
session ID,因此每条命令只需一次往返交互。
- **实时 UDP 遥测** - 后台监听器将 `0x06` 光学和
`0x0A` 摄像机状态数据包解码为合并的 state dict(光圈、以米为单位的对焦、
以毫米为单位的变焦、镜头型号、gamma、ND、色温、WB channel、R/B 增益、pedestal)。
- **录制事件** - 解码 `0x00` 事件数据包(RecordingBegin/End、
片段/存储卡更新)和 `0x01` 时间码,因此您可以获得推送通知,而
无需轮询。
- **Keep-alive + 自动重连** - 处理 12-20 秒的 session 超时窗口。
- WB / gain / pedestal / iris / focus / zoom / shutter /
gamma / 录制 / tally / audio / 菜单的高级封装,以及原始的 `cam_ctl()` 逃生舱口
用于执行约 260 个已记录的 `$Cmd` 命令中的任何一个。
- 为 HC-X2 镜头测量的 **光圈内部值到 F-stop 的量化表**。
请参阅 [PROTOCOL.md](PROTOCOL.md) 获取完整的命令参考和
逆向工程说明。
## 快速开始
```
git clone https://github.com/magichao326/panasonic-hc-x2-control.git
cd panasonic-hc-x2-control
# 无需 pip install - 仅使用标准库
python3 hcrop_client.py
```
在摄像机上,启用 **NETWORK > IP REMOTE**,设置 **HC ROP PORT**(默认
49152)并创建一个 **USER ACCOUNT**(用户名 <= 31 个字符,密码 8-15 个字符)。
请使用这些凭据,不要使用任何管理员默认值。
```
from hcrop_client import HCROPClient
cam = HCROPClient("192.168.1.50", "your_user", "your_password")
cam.connect()
print(cam.device_info) # {'model': 'HC-X2', 'serial': ..., 'udp_port': 49153}
print(cam.get_full_state()) # live telemetry from UDP push
# 白平衡 / 色彩
cam.trigger_awb() # auto white balance (point a white card first)
cam.set_wb_preset("A")
cam.set_red_gain(30) # -200..200 (auto-switches WB to Ach/Bch if needed)
cam.set_blue_gain(-15)
# 曝光
cam.set_iris(4000) # internal 2970 (F1.8) .. 8174 (closed)
cam.set_auto_iris(False)
cam.gain_step(+1) # master gain is step-only, roughly +3 dB
cam.set_shutter_mode("FIX")
# 对焦 / 变焦(连续,带符号速度)
cam.set_auto_focus(False)
cam.set_focus_speed(-3) # -6 near .. +6 far, 0 stops
cam.set_zoom_speed(4) # -8 wide .. +8 tele, 0 stops
# 录制
cam.rec_toggle() # start/stop trigger
for e in cam.get_recent_events():
print(e) # {'name': 'RecordingBegin', ...}
cam.disconnect()
```
请参阅 [`examples/multi_camera.py`](examples/multi_camera.py) 了解如何同时驱动多个
机身(多机位同步是官方应用无法做到的主要功能)。
## 协议概览
| Channel | Transport | 用途 |
|---|---|---|
| Control | TCP 49152 | XML 命令(`$Cmd:=Val `) |
| Telemetry | UDP 49153 (端口+1) | 摄像机推送二进制状态;每 5 秒通过 3 字节的 `0xff 0x01 0xff` 心跳保活 |
| 实时预览 | UDP (动态) | H.264 baseline / MJPEG 监视流(此处未实现) |
认证是简化的 HTTP Digest:`HA1 = MD5(user:realm:pass)`,
`token = MD5(HA1:nonce)`。握手过程为 Login -> Realm/Nonce -> Auth + Query env
-> Auth + `$Connect:=On` + `$MyName` -> SessionID,此后将重复使用 token 和
session ID。
松下官方的 **P2 Device Control Protocol & Command** 规范(Rev 1.00,
2019)可公开下载且无需登录,其中记录了基础命令集,
尽管它早于 HC-X2/X20 发布,并未列出它们:
`https://eww.pass.panasonic.co.jp/pro-av/support/content/guide/DEF/P2Protocol_and_Command.zip`
## 免责声明
不隶属于松下,也未获得其认可。“HC-X2”、“HC-X20”、“HC-ROP”和
“P2”是其各自所有者的商标。这是一项独立的
社区逆向工程工作,按“原样”提供以用于互操作性。本
处未重新分发任何松下受版权保护的文档;仅引用了公开
可用的链接。使用风险自负。
## 许可证
MIT - 请参阅 [LICENSE](LICENSE)。
标签:HC-ROP, Python, 内核驱动, 并发处理, 摄像机控制, 无后门, 物联网控制, 直播设备, 网络协议, 逆向工具, 音视频技术