【问题标题】:Play YouTube video in sync across multiple clients跨多个客户端同步播放 YouTube 视频
【发布时间】:2012-11-27 10:53:24
【问题描述】:

你好 Stack Overflow 社区,

我是一个相当新手的编码员,但我一直在设计一个项目,该项目看起来每天都变得越来越复杂,我不知道从哪里开始。

从 Synchtube 和 Phonoblaster 获得灵感,我希望为我的网站创建一些东西,让访问者可以实时同步地观看我策划的 YouTube 视频和播放列表。

因为我希望能够将它放在我自己的网站的上下文中,我不能使用上面列出的已经这样做的服务 - 所以我想弄清楚如何推出自己的。

在 Stack Overflow 和其他博客上已经写了一些关于此主题的内容: HEREHERE

因为我仍然认为自己是一个新手程序员,而且我在 Google 和 Stack 上找到的很多信息往往都超过 1 或 2 年,所以我仍然不确定从哪里开始,或者这些信息是否是过时的。具体来说,我应该学习哪些语言和工具。

从我目前收集到的信息来看,Javascript、Node.JS 和 YouTube API 之类的东西将构成它的症结所在。我以前没有使用过任何这些,但有兴趣看看其他有经验的编码人员是否会有他们自己的建议或想法,他们可以为我指明方向。

感谢您抽出时间阅读这篇文章! 希望很快能收到你们中的一些人的消息:)

非常感谢。

【问题讨论】:

  • 我很难相信这是可能的,但我有兴趣看到有直接经验的人的答案。
  • 我不知道确切的实现,但也许你可以向客户端发送服务器推送,告诉它播放视频。当然,这会涉及到诸如 cometd 或长轮询技术之类的东西,但事实是服务器需要以某种方式告诉客户端何时播放。如果你想专门同步播放,也许你可以让服务器在不久的将来设置一个播放时间,也许是服务器发出消息后的 2 秒。只是一个想法。
  • 这个问题很模糊,但你走在正确的轨道上。如果我今天这样做,我可能会使用 Node.js 和一些用于 WebSocket 抽象的库,例如 Socket.IO
  • 我会考虑看看您是否可以在 youtube(或其他类似服务)上发布自己的直播。实时视频似乎是同步最终客户端的自然方式,您可以控制源。
  • @BrandonTilley - Socket.IO 看起来非常有趣。正如Geuis在他的详细回复中所暗示的那样,这可能是关键! :) 非常感谢您的想法。

标签: javascript api node.js youtube


【解决方案1】:

部分听起来像是您需要来自 Youtube 的直播。你可以在这里找到更多信息。 https://support.google.com/youtube/bin/answer.py?hl=en&answer=2474026

如果你能做到这一点,那么在任意数量的用户之间同步播放就像在浏览器中嵌入你的流的常规 youtube 嵌入一样简单。

回顾过去,如果您想在任意数量的用户之间同步视频播放,第一个大问题是学习如何为视频设置时间。幸运的是,使用 hashbang #t=seconds 很容易。

例如:http://www.youtube.com/watch?v=m38RdUGqBPM&feature=g-high-rec#t=619s 将在视频的第 619 秒开始播放此 HuskyStarcraft 视频。

下一步是拥有一些跟踪当前时间的后端服务器。带有 Socket.io 的 Node.js 难以置信地 易于设置。 Socket.io 是一个很棒的库,它通过长轮询等方式优雅地处理来自 Web 套接字的并发连接,并且即使在非常旧的浏览器上也能很好地工作。请注意,websockets 甚至不是必需的,但它将是您最现代和最全面的方法。否则它的黑客和东西。

一种可行的方法如下。

User1 访问您的网站并首先开始播放视频。您页面上的脚本会向您的服务器发送一个 XHR 请求,上面写着“视频在 X 时间开始”。然后 X 被存储为开始时间。

此时,您可以走 2 条路线。您可以使用 Youtube API 的客户端脚本来轮询视频并每秒获取其当前状态。如果状态或时间发生变化,请向服务器发送另一个请求以更新状态。

另一个简单的方法是加载 User2+ 的页面,然后发送一个 XHR 请求,询问视频播放时间。服务器发回来自 User1 的开始时间之间的差异,然后客户端脚本在 youtube 播放器上为 User2+ 设置“t”hashbang。这使您可以同步开始时间,但如果任何用户暂停或倒带视频,这些状态不会得到更新。不过,随后的页面刷新可能会这样做。

整个应用程序的复杂性完全取决于您想要的要求。如果它只是同步开始时间,那么路线#2 应该工作得很好。不需要套接字,并且很容易使用 jQuery 或直接使用 javascript。

如果您需要真正同步的体验,任何用户都可以开始/停止/暂停/快进/倒带视频,那么您正在考虑使用已建立的库解决方案或编写自己的解决方案。

抱歉,这个答案有点开放式,但你的问题也是如此。 =)

【讨论】:

  • 非常感谢您花费时间和精力来回答我的半 vegue 问题 :) 澄清一下,直播视频流是最初想法的一部分,但由于多种原因,我我决定改为探索这条道路,这是我真正想要建立的东西。
  • 我将在下周探索 Node.JS 和 Socket.io - 并记录我最终构建的任何内容 - 当然如果你想听的话。我认为这个概念很简单——你解释了它是如何在幕后完美运作的。让我们希望构建它也不是那么难!谢谢!
  • 我很想看看你想出什么。很高兴能提供帮助。
  • 过去@copyflake 的爆炸。这个项目结果如何?差不多十年后,你是 nodejs 之神吗?软件工程师?
猜你喜欢
  • 2012-01-15
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 2011-05-26
  • 2019-02-28
  • 1970-01-01
相关资源
最近更新 更多