go2rtc 的 HomeKit Server 怎么把 H264 摄像头导出到 Apple Home?
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
如果你的摄像头已经在 go2rtc 的streams列表里(RTSP、ONVIF、WebRTC 等来源都行),想让它出现在 iPhone、Apple TV 或 Apple Home 中,go2rtc 的 HomeKit Server 模块可以直接完成这件事:它在本地创建一个 HomeKit 摄像头设备,把指定 stream 的媒体流封装成 HomeKit 协议对外提供。HomeKit Server 从 go2rtc v1.7.0 开始提供,配置本身只有两行起,真正的工作量在于让媒体流的编码满足 HomeKit 的硬性限制。
开始前必须满足的两个编码限制
HomeKit 摄像头对媒体编码只接受一种组合(见 internal/homekit/README.md):
- 视频:H264
- 音频:OPUS
如果源摄像头原生输出 H264 + OPUS,直接导出即可;否则需要靠 ffmpeg 转码补齐,这部分在后面的完整配置里给出来。
另外注意 HomeKit Server 依赖 SRTP 模块:homekit源在初始化时会检查 SRTP server,缺失时直接报错(homekit: can't work without SRTP server,见 internal/homekit/homekit.go)。SRTP 默认启用并监听:8443(见 internal/app/README.md 的 Defaults 一节、internal/srtp/README.md),通常不需要额外配置。
配置方法
go2rtc 默认在当前工作目录查找go2rtc.yaml(也可用-c指定,见 internal/app/README.md)。
最小配置(源摄像头已支持 H264):
streams: dahua1: rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0 homekit: dahua1: # same stream ID from streams list, default PIN - 19550224homekit下的 key 必须和streams里的 stream ID 完全一致;如果 stream 不存在,启动日志会出现[homekit] missing stream: <id>警告并跳过该条目(见 internal/homekit/homekit.go),所以配好后先看一眼日志确认没有这条警告。
完整配置(摄像头不输出 H264、或音频不是 OPUS 时):
streams: dahua1: - rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0 - ffmpeg:dahua1#video=h264#hardware # if your camera doesn't support H264, important for HomeKit - ffmpeg:dahua1#audio=opus # only OPUS audio supported by HomeKit homekit: dahua1: # same stream ID from streams list pin: 12345678 # custom PIN, default: 19550224 name: Dahua camera # custom camera name, default: generated from stream ID device_id: dahua1 # custom ID, default: generated from stream ID device_private: dahua1 # custom key, default: generated from stream ID各字段的用途(以 internal/homekit/README.md 和 internal/homekit/homekit.go 为准):
| 字段 | 作用 | 默认值 |
|---|---|---|
pin | Apple Home 配对时使用的 PIN | 19550224 |
name | 摄像头在 Home 中显示的名称 | 由 stream ID 生成 |
device_id | 设备标识,影响生成的 MAC 风格 ID | 由 stream ID 生成 |
device_private | 设备私钥种子 | 由 stream ID 生成 |
pin未配置时代码会回落到默认值19550224(internal/homekit/homekit.go)。name、device_id、device_private只在你想固定设备身份时配置,保证 Home 里的名称和配对信息在重启后稳定。
启动并在 Apple Home 中配对
保存
go2rtc.yaml后启动 go2rtc。HomeKit Server 启动时会通过 mDNS 发布_hap服务(发布在 api 端口上,见 internal/homekit/homekit.go、internal/homekit/server.go 中的 mDNS 条目),Apple 设备在同一局域网内即可发现它。通过 API 查看设备当前状态,拿到配对用 PIN:
GET http://localhost:1984/api/homekit?id=dahua1接口返回的 JSON 字段定义见 internal/homekit/server.go:未配对时会包含
setup_code(即 PIN)和setup_id;字段示例输出(值仅为说明字段结构,非固定预期):{ "name": "Dahua camera", "device_id": "AA:BB:CC:DD:EE:FF", "paired": 0, "setup_code": "19550224", "setup_id": "A1B2" }在 iPhone 的「家庭」App 中添加配件,输入上面拿到的 PIN(未配对时就是
pin的值,默认19550224)完成配对。配对成功后再次
GET /api/homekit?id=dahua1,返回中paired变为非 0,且不再出现setup_code字段——配对信息以pairings列表写回go2rtc.yaml的homekit.<stream>.pairings下(见 internal/homekit/server.go 的AddPair/PatchConfig)。之后重启 go2rtc 不需要重新配对。在 Apple Home 中打开该摄像头,即可看到来自
dahua1这个 stream 的画面。
排查与限制
- 日志出现
[homekit] missing stream: xxx:homekit下的 key 与streams中的 ID 不一致,或 stream 本身没配。修正 ID 后重启。 - Home 里设备显示离线:Server 端会按配对数量更新 mDNS 状态标志,代码注释明确提示「true status is important, or device may be offline in Apple Home」(internal/homekit/server.go);如果刚配对完就显示离线,先确认 go2rtc 与 Apple 设备在同一网络、mDNS 可达。
- 音频听不到或报错:再确认流里最终是 OPUS;源是 AAC/其他音频时必须走
ffmpeg:xxx#audio=opus这条转码链。 - 不输出 H264 的摄像头:必须走
ffmpeg:xxx#video=h264#hardware(或同类的#video=h264链),这是 HomeKit 的硬性要求,不是可选项。 - 多台 HomeKit 摄像头共享一个端口:代码注释说明单端口多摄像头「ONLY for Apple devices」,其他不发送 host header 的客户端不受支持(见 internal/homekit/homekit.go)。按 Apple Home 使用没有影响。
如果你反过来——想把已有的 HomeKit 摄像头(Aqara、Eve、Eufy 等)接入 go2rtc 再导出到 Apple Home,那是 internal/homekit/README.md 中「Proxy HomeKit camera」描述的代理模式,属于另一条配置路径,本文不展开。
相关文档:internal/homekit/README.md、internal/srtp/README.md、internal/app/README.md
【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考