前段时间有一个小需求,场景是装着Ubuntu的笔记本放在书桌上连着音箱用网页版的网易云音乐放歌,每次睡觉前我都要从床上爬起来去手动暂停播放,十分影响舒适度。于是便希望有种方法能够通过手机远程控制播放器的暂停……

实现

由于播放器是基于Web的且我没有开发手机app的条件,于是便准备从Web着手,首选的通信方式当然是WebSocket。实现的方法是写一个Chrome的小插件,用来在网页中注入JS代码,而这段JS的功能就是与中继服务器建立WebSocket连接,并通过解析接收到的指令对网页上的元素进行对应的操作,比如click暂停/播放、下一首、上一首等按钮。

有一个比较关键的地方就是中继服务器实现的对于WebSocket发送内容的中继。我采用了Gorilla的WebSocket库,并在其examples/chat上进行的修改,加入了Channel的功能,即只要连上同样的URL就是加入同一个频道,来实现中继通信。
于是最终的流程就是:

  1. 在中继服务器上建立Web Server
  2. 控制端访问获取控制页面,页面上的JS使用WebSocket加入Channel A
  3. 被控制端在需要控制的网页注入JS,同样加入Channel A
  4. 控制端与被控制端建立通信

源代码:github

拓展

可以作为网页遥控器来使用,比如控制基于Web的PPT等。

后记

直到我后来发现了peer.js,才发现自己走到沟里去了……