首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过网络同步视频播放

通过网络同步视频播放
EN

Stack Overflow用户
提问于 2011-03-11 15:22:52
回答 3查看 2K关注 0票数 5

我已经制作了一个媒体播放器,它基本上可以通过文本文件播放任何预定的内容。播放器还可以在多台机器(PC)上播放完全相同的剪辑。问题出在同步上。同样的视频开始在每台机器上播放,但它们的延迟约为400ms,这看起来很糟糕,如果有声音,情况就更糟。

我现在所做的是:

一台机器被设置为主机器,所有其他机器被设置为从机器。主控决定将播放什么项目。它等待来自每个从设备的消息,一旦所有从设备被连接(或在超时之后),它广播需要被播放的文件的项id。然后,所有机器都开始播放该文件。

我还尝试了:

我认为文件加载时间可能是导致同步不匹配的主要驱动因素,所以我修改了代码以执行以下操作。

主控程序仍然决定播放哪个文件。它等待来自每个从设备的连接消息(或超时),并发送要播放的文件的项目id。所有机器都会开始播放该文件,但会立即暂停。然后,主设备再次等待来自每个从设备的就绪消息。一旦所有从机响应,主机就会向所有从机发送play消息。然后,所有机器继续该文件。

不幸的是,这并没有改善问题。我现在非常确定同步不匹配是由于网络延迟造成的。我如何补偿这一点呢?或者可以确定到每个从站的延迟?

所有的网络通信都是用winsock完成的。

任何想法或想法都是非常感谢的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-11 15:45:32

您可以使用已知的流协议,例如RTP (或其他)来完成此工作。通过网络读取文件(这似乎就是您正在做的)很容易出现网络延迟,如果所需的精度以毫秒为单位-您就会受到实时限制。

票数 1
EN

Stack Overflow用户

发布于 2011-03-11 16:06:33

据我所知,最接近完美同步的是这样。

部分解决方案:

Master:将带有时间戳的play消息发送给客户端。

客户端:收到play消息后,回复确认。读取时间戳,计算消息到达的时间,并根据该时间差延迟开始播放。

Master:收到确认消息后立即播放。

问题是你仍然会有多个确认,所以如果往返时间to的平均偏差太高,你仍然会有很大的不同步。一种解决方案可能是跟踪每个客户的某种平滑的往返时间估计器。

替代解决方案:

Master:当您发送播放消息时,发送一个开始时间(所有客户端中最高的往返时间)给客户端开始播放,并应将播放安排在提供的时间内。

客户端:收到play消息后,应在指定的时间内安排播放。

票数 2
EN

Stack Overflow用户

发布于 2011-06-16 00:29:59

你可以从主机ping从机器来获得延迟偏移量...如果都是本地的,可能不会有什么区别。

此外,您可能会循环播放您的消息来播放文件,因此这也会引入延迟,这取决于您首先与哪台机器交谈。

您可以同时向所有监听机器广播,以避免出现这种情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5270119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档