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, 内核驱动, 并发处理, 摄像机控制, 无后门, 物联网控制, 直播设备, 网络协议, 逆向工具, 音视频技术