ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

go2rtc 接入 Hikvision ISAPI 双向音频:原理与配置实战指南

go2rtc 接入 Hikvision ISAPI 双向音频:原理与配置实战指南 go2rtc 接入 Hikvision ISAPI 双向音频原理与配置实战指南【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc本指南围绕 go2rtc 的isapi模块展开讲解如何为海康威视Hikvision摄像机启用基于 ISAPI 协议的双向音频two-way audio / backchannel能力。读完本文你将掌握isapi://源地址的配置方法、它与 RTSP 主流的组合关系以及 go2rtc 底层通过 HTTP Digest 认证与 ISAPI TwoWayAudio 接口完成音频上行推流的完整实现细节。模块定位只做回传音频的辅助源在 go2rtc 的模块清单internal/README.md中isapi模块被明确标注为模块格式formats协议protocolsinputoutputingesttwo-wayisapialaw,mulawhttpyes该模块是 go2rtc v1.3.0 新增的能力其官方说明非常明确该源类型仅支持针对海康威视 ISAPI 协议的回传音频backchannel audio。因此它必须作为第二个源与提供音视频拉流的 RTSP 协议源配合使用而不能独立承担完整视频流任务。从源码看模块注册入口位于 internal/isapi/init.go通过streams.HandleFunc(isapi, ...)注册isapi://协议处理器实际连接逻辑委托给 pkg/isapi 包中的isapi.Dial(source)。配置方法RTSP ISAPI 双源组合isapi源的使用方式是在streams配置中为同一路流同时列出 RTSP 源与 ISAPI 源。官方配置示例internal/isapi/README.mdstreams: hikvision1: - rtsp://admin:password192.168.1.123:554/Streaming/Channels/101 - isapi://admin:password192.168.1.123:80/配置要点RTSP 源负责视频画面与摄像机麦克风采集的音频下行流地址格式为rtsp://用户名:密码主机:554/Streaming/Channels/101101表示主码流第 1 通道H.264 格式如需 H.265 主码流可尝试102子码流通常为201等具体取决于设备固件。ISAPI 源只负责回传通道地址格式为isapi://用户名:密码主机:80/。其中:80/是设备的 HTTP ISAPI 服务端口海康设备默认 80路径部分为空即可Dial内部会把 URL 的 scheme 强制改写为http并清空路径见 pkg/isapi/client.go。两个源共用同一组设备账号密码且顺序无关——go2rtc 的流引擎会按需把 ISAPI 源作为sendonly只发送方向的音频生产者接入。双源为什么可行流引擎的方向匹配机制go2rtc 流引擎在 internal/streams/add_consumer.go 中处理生产者与消费者的媒体方向匹配当生产者媒体方向为recvonly只接收如 RTSP 下行音视频时从生产者取轨道交给消费者当生产者媒体方向为sendonly只发送即 ISAPI 回传音频时反向从消费者取recvonly轨道即用户端的麦克风音频再通过prod.AddTrack(...)注入 ISAPI 生产者最终写入摄像机。这正是 ISAPI 源只做回传、不做拉流的架构基础视频和下行音频走 RTSP上行麦克风音频走 ISAPI两者在流引擎中按方向互补对接。源码级原理ISAPI 回传通道的完整调用链1. 连接探测与编码协商DialClient.Dial()pkg/isapi/client.go完成两个关键工作请求GET /ISAPI/System/TwoWayAudio/channels获取设备支持的双向音频通道列表XML 响应。用字符串解析从 XML 中提取audioCompressionType与通道id并把编码映射为 go2rtc 内部编解码器设备上报的audioCompressionTypego2rtc 编解码器对应音频格式G.711ulawCodecPCMUpcmuG.711 μ-law8 kHzG.711alawCodecPCMApcmaG.711 A-law8 kHz其他值不支持直接返回—映射后生成的媒体信息为Kindaudio、Directionsendonly、ClockRate8000。注意Dial阶段并不建立真正的音频连接只是确认设备支持回传并完成编码协商。2. 打开与关闭回传通道Open / CloseOpen()pkg/isapi/client.go按顺序执行先发一次PUT .../channels/{id}/close。源码注释说明原因海康 ISAPI 在上一次回传未关闭时例如曾在摄像机测试按钮或 curl 上占用过通道会拒绝新的 open 请求而 close 请求即使在音频已关闭时也可以发送因此先关后开更稳妥。发送PUT .../channels/{id}/open正式开启回传通道。发送PUT .../channels/{id}/audioDataContent-Type: application/octet-stream、Content-Length: 0借助 pkg/tcp/request.go 的tcp.WithConn()从 HTTP 请求上下文中取出底层net.Conn保存为c.conn——这条永不结束的 HTTP PUT 长连接就是音频上行管道。阻塞读取 1 字节直到连接被关闭即通道被外部关闭或网络断开。Close()pkg/isapi/client.go则发送PUT .../channels/{id}/close关闭通道。3. 音频数据注入AddTrack当用户端麦克风音频如 WebRTC 上行音频轨接入时AddTrack()pkg/isapi/backchannel.go创建core.NewSender并注册 RTP 包处理回调每当收到一个 RTP 包就把packet.Payload裸 G.711 采样数据直接写入前面保存的c.conn实现向摄像机实时推流同时累计c.send字节数用于状态展示。4. 生命周期与状态上报Start()调用Open()打开通道Stop()关闭 sender、发送 close 请求并关闭连接pkg/isapi/backchannel.go。MarshalJSON把连接状态序列化为 WebUI 可读的信息协议http、格式isapi、发送字节数、远端地址等。关键支撑HTTP Digest 认证适配海康设备的 ISAPI 接口通常要求 Digest 认证而 go2rtc 的 pkg/tcp/request.go 对此做了两处针对性适配对/ISAPI/路径禁用 Basic 认证头源码注释明确写道 Hikvision wont answer on Basic auth with any headers即海康设备收到带 Basic 头的请求会直接拒绝因此首次请求必须不带任何 Authorization 头。收到 401 后自动完成 Digest 握手从WWW-Authenticate解析realm、nonce、qop计算HA1/HA2与response支持qop简单摘要与qopauth带nc、cnonce两种模式然后重放请求。这意味着isapi://admin:password...中的账号密码会自动用于 Digest 认证无需任何额外配置。适用场景与使用限制适用海康威视及兼容 ISAPI 的海康 OEM 设备摄像机需要双向语音对讲时用它作为 RTSP 流的音频回传补充。限制仅支持回传音频不提供视频/下行音频拉流必须与 RTSP 源组合仅支持 G.711 μ-lawpcmu与 A-lawpcma两种 8 kHz 编码其他编码如 AAC、Opus设备上报后会被忽略编解码器需由设备端在 TwoWayAudio channels 响应中声明否则无法协商成功回传通道一次只能被一个客户端占用若设备端通道被其他应用如测试按钮、其他对讲客户端占用go2rtc 的先关后开策略会自动尝试释放。验证与排障建议若 ISAPI 源配置成功流启动时 go2rtc 会先执行Dial()探测通道若设备不支持回传或编码不支持Dial()返回空媒体列表此时应检查设备 ISAPI 接口是否启用、账号是否具备对讲权限。可通过 go2rtc WebUI 的流探测stream probe查看该流是否出现sendonly方向的音频轨道以此确认回传通道协商结果。若上行无声音优先检查audioCompressionType是否为 G.711 系列、摄像机回传通道是否被占用、以及 RTSP 源的下行音频编码是否能与对端如浏览器 WebRTC匹配。通过以上配置与原理你可以把任意支持 ISAPI 的海康设备接入 go2rtc 的对讲链路让浏览器或其他 WebRTC 客户端与摄像机实现真正的双向语音通话。【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表