能否适配rn-samsung-tv-remote实现多品牌电视WiFi遥控?
一、修改rn-samsung-tv-remote库适配飞利浦的可行性及入手点
可以修改,但核心是替换协议层逻辑——三星和飞利浦的WiFi遥控通信协议完全不同,前者基于自定义TCP数据包,后者多采用REST/HTTP或WebSocket协议。入手步骤:
拆解原库核心流程
先梳理rn-samsung-tv-remote的关键逻辑:设备扫描(SSDP)→ TCP连接建立 → 配对认证 → 按键指令发送。把这些模块拆分为独立的可替换组件。替换设备发现逻辑
你已通过react-native-wifi-p2p找到飞利浦设备,需补充确认电视的服务端口(飞利浦常用端口为1925、8000)。可替换原库的SSDP扫描逻辑为你现有的wifi-p2p扫描,或添加SSDP扫描(搜索urn:schemas-philips-com:device:TV:1类型设备)。替换认证与指令发送逻辑
- 认证:飞利浦电视需要用户在设备上确认配对,流程为:发送
GET http://<tv-ip>:1925/1/pair/request请求配对,电视显示PIN后,发送POST http://<tv-ip>:1925/1/pair/grant携带PIN和设备信息完成认证。 - 指令:替换原库的TCP数据包发送为HTTP POST请求,比如发送按键指令:
fetch(`http://${tvIp}:1925/1/input`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ method: 'input', params: { key: 'KEY_UP' } }) })
常用按键值参考:
KEY_UP、KEY_DOWN、KEY_LEFT、KEY_RIGHT、KEY_OK、KEY_VOLUMEUP、KEY_VOLUMEDOWN、KEY_MUTE等。- 认证:飞利浦电视需要用户在设备上确认配对,流程为:发送
二、无需修改原库的替代实现思路
如果修改库成本过高,可直接基于飞利浦官方协议实现,或采用以下方案:
1. 纯React Native原生实现(优先推荐)
- 设备发现:使用
react-native-ssdp扫描飞利浦TV设备,或继续用react-native-wifi-p2p获取设备IP。 - 指令发送:用React Native内置的
fetch或react-native-websocket发送HTTP/WebSocket指令,无需依赖第三方遥控库。 - 注意:需确保飞利浦电视开启「网络遥控」功能(路径:设置 → 网络 → 远程控制 → 开启)。
2. 跨平台通用遥控框架
若截止日期紧张,可考虑使用支持多品牌的跨平台遥控解决方案,比如集成基于Python的pywebostv(需通过React Native的原生模块桥接调用),该库支持飞利浦、LG等多个品牌的电视遥控,可快速实现核心功能。
3. 硬件辅助方案(备选)
若软件实现遇阻,可使用红外转WiFi模块(如BroadLink RM系列),通过模块发送红外指令控制电视,React Native只需调用模块的API即可,无需对接电视的网络协议。
三、针对你已发现飞利浦设备后的指令发送步骤
- 获取电视的IP地址(从
getAvailablePeers()返回的设备信息中提取)。 - 测试电视端口连通性:用手机浏览器访问
http://<tv-ip>:1925/1/system,若返回设备信息则说明协议端口正常开放。 - 发送配对请求:调用
fetch发送GET请求到http://<tv-ip>:1925/1/pair/request,电视会显示配对PIN码。 - 完成配对:发送POST请求携带PIN码:
fetch(`http://${tvIp}:1925/1/pair/grant`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ method: 'grant', params: { pin: '1234', // 电视显示的PIN device: { name: 'MyRemote', id: 'unique-device-id' } } }) }) - 发送遥控指令:配对成功后,即可发送前文的按键指令。
内容的提问来源于stack exchange,提问作者marcelo colombo

