c# - 网络媒体同步 - 主/从协商
问题描述
我想在多个设备上同步媒体播放。所有播放器都将媒体文件存储在本地,因此不应涉及流式传输。
我当前的实现是使用 UDP 多播,其中 MASTER 发送其当前播放位置,SLAVE 检查其自己的位置是否在可接受的范围内(+/- 50ms)。如果没有,从机调整播放速度(0.9x 或 1.1x)以赶上,直到它再次在范围内。如果距离太远,它会寻求 MASTER 位置。
这很好用,而且我还有一个使用 HTML5 视频和通过 WebSockets 同步的概念证明。
主/从角色现在在客户端的配置中手动设置,但我希望客户端自动协商他们各自的角色。
TL;博士;
我怎样才能对哪个客户端是主客户端进行一些自动协商?如果主设备断开连接,所有其他客户端应继续播放,其中一个应承担主设备角色并开始发送其播放位置。
我已经尝试过以下协议:
- 启动时,客户端发送 PING
- 主人会用 PONG 回复每条 PING 消息
- 如果 2 秒内没有收到 PONG,则客户端成为 MASTER
此解决方案的问题是多个客户端可能同时承担 MASTER 角色。
解决方案
发送 PING 时,包含一个随机生成的整数。使用 PONG 回复时,请包含该号码。决定成为主人后,重复这三个步骤,但如果有人回复的 PONG 低于你,则改为成为奴隶。
推荐阅读
- node.js - mongoose.watch() 字段的名称自行更改
- sql-server - SCOPE_IDENTITY 返回 null,直到在 MS Access 中引发错误
- javascript - 当布尔值从假变为真时,如何在反应 16 中显示不同的 div?
- go - Golang 从 yaml 文件中提取值
- javascript - 尝试使用 Jest 对来自联合模块(webpack 5)的导入进行单元测试时出现“找不到模块”
- java - 嵌套for循环倒半金字塔
- azure - AKS 中的 Ocelot API 网关实现
- .htaccess - htaccess - 从文件中获取 IP 地址
- java - Spring Webflux - 反应式 Cassandra - 配置 ConsistencyLevel
- c# - N 层应用程序中的异常处理