【发布时间】:2019-10-09 12:03:10
【问题描述】:
我想在多个设备上同步媒体播放。所有播放器都将媒体文件存储在本地,因此不应涉及流式传输。
我当前的实现是使用 UDP 多播,其中 MASTER 发送其当前播放位置,SLAVE 检查其自己的位置是否在可接受的范围内(+/- 50 毫秒)。如果没有,从机调整播放速度(0.9x 或 1.1x)以赶上,直到它再次在范围内。如果距离太远,它会寻找 MASTER 位置。
这很好用,而且我还有一个使用 HTML5 视频和通过 WebSockets 同步的概念证明。
现在在客户端的配置中手动设置主/从角色,但我希望客户端自动协商它们各自的角色。
TL;DR;
我怎样才能对哪个客户端是主客户端进行一些自动协商?如果主设备断开连接,所有其他客户端应继续播放,其中一个应承担主设备角色并开始发送其播放位置。
我已经尝试过以下协议:
- 启动时,客户端发送 PING
- master 会用 PONG 回复每个 PING 消息
- 如果 2 秒内没有收到 PONG,则客户端变为 MASTER
此解决方案的问题是多个客户端可能同时承担 MASTER 角色。
【问题讨论】:
-
谢谢,我试图找到合适的术语,但显然是领导选举en.wikipedia.org/wiki/Leader_election。现在我还有一些阅读要做。
标签: c# synchronization udp directshow multicast