Flutter中借助Bonsoir识别Google Cast设备能力的方法问询
问题描述
- 在Flutter应用中使用Bonsoir 2.0.0,通过
_googlecast._tcp服务类型发现可用Google Cast设备,已成功检测到设备,但需要像Android Cast库的CastDevice那样,按音视频全支持、仅视频、仅音频等设备能力过滤设备。 - 当前Bonsoir包无此内置功能,已获取到设备服务信息(如下方示例),其中包含
cd字段,不确定该字段是否与设备能力相关,寻求解决建议。
仅音频设备的服务信息示例:
{ "service.name":"Google-Nest-Mini-f085fd9042490e01a04233c8bf333778", "service.type":"_googlecast._tcp", "service.port":8009, "service.attributes":{ "bs":"FA8FCA78A8D0", "cd":"5810A9FF37B193370398E3678764CF83", "rs":"", "st":"0", "md":"Google Nest Mini", "fn":"Office speaker", "nf":"1", "ic":"/setup/icon.png", "id":"f085fd9042490e01a04233c8bf333778", "rm":"", "ca":"199172", "ve":"05" }, "service.ip":"192.168.*.**" }
解决建议
- 利用
cd字段判断能力:cd是Google Cast设备的Capabilities Digest,是设备支持能力列表的SHA-1哈希值。你可以:- 收集已知设备类型的
cd值(比如Chromecast的音视频全支持、Nest Mini的仅音频),建立映射表做快速匹配。 - 反向解析哈希对应的原始能力:原始能力字符串包含
video_out、audio_out等标识,将这些标识按特定顺序拼接后做SHA-1哈希,即可与cd字段比对。
- 收集已知设备类型的
- 通过设备型号辅助过滤:
md字段是设备型号(如示例中的Google Nest Mini),这类设备本身定位为音频设备,可结合型号名称做初步筛选,但精度不如cd字段。 - 调用设备HTTP接口获取精准能力:Cast设备的8009端口提供REST接口,发送
GET请求到http://[设备IP]:8009/setup/eureka_info,返回的JSON数据中capabilities字段会直接列出设备支持的能力(例如["audio_out"]或["video_out", "audio_out"]),这是最可靠的方式。
内容的提问来源于stack exchange,提问作者Raghu Mudem
相关产品推荐
相关产品推荐

