嵌入不带视频 ID 的 YouTube 频道的当前直播

Posted

技术标签:

【中文标题】嵌入不带视频 ID 的 YouTube 频道的当前直播【英文标题】:Embed a YouTube channel's current live stream without the video ID 【发布时间】:2019-12-20 10:01:07 【问题描述】:

每次用户在 YouTube 上开始直播时,都会为该直播生成一个新 ID,以及相应的视频和网址。目前,如果我想嵌入直播,我可以使用 YouTube 的分享功能将视频添加到 iFrame 中的页面。

当用户停止流式传输时,实时流的嵌入会自动切换为显示该流的录制。但是,如果用户稍后再次开始广播,嵌入将继续显示旧的录制内容,而不是切换到新的流。这是因为嵌入中的视频 ID 是硬编码的,每个流都会生成一个新的视频 ID。

我的目标是创建一个嵌入,当用户流式传输时自动显示他们的实时流,并显示他们是在线还是离线的指示。是否有允许我执行此操作的嵌入 URL,或者 API 中的某些内容可能会有所帮助?

我想嵌入不只是我自己的其他流,因此我需要以一种不需要流媒体登录或在我的网站上进行身份验证的方式执行此操作。

【问题讨论】:

您最好搜索YouTube Data API,也许还搜索YouTube Live Streaming API,但我认为没有任何东西可以满足您的需求。在我看来,您实际上是在尝试将 YouTube 用作 Twitch;前者以视频为中心,后者以频道为中心。每个服务的 API 和嵌入都反映了这一点。 @IronFlare 我会尝试看看它,但我有点迷茫。因为这告诉我如何只得到我的,而不是得到其他人。我有一个示例网站,其中已经包含我正在寻找的内容,如果我以某种方式向您展示它会更容易解释吗? 【参考方案1】:

如果您知道 YouTube 频道的 ID,并且该频道流式传输设置为公开的直播,则具有此 URL 的 iframe 将显示它:

https://www.youtube.com/embed/live_stream?channel=YOUR_CHANNEL_ID_HERE

见https://***.com/a/39582176/470749

很遗憾,我还没有找到一种类似的简单方法来永久embed the YouTube chat 进行直播。

【讨论】:

【参考方案2】:

据我所知,YouTube API 中没有任何内置功能可以让您在不知道其 ID 的情况下自动嵌入频道的当前直播。也就是说,可以通过编写自定义 API 并将其托管在您自己的服务器上来自行实现。

我知道这看起来是一项艰巨的任务,因此我在下面列出了一些粗略的步骤来帮助您入门。

    在您自己的服务器上设置端点。你可以接受一个 channelId 参数或硬编码之一,取决于可扩展性 你想要这样。 查询YouTube's search endpoint1 以获取指定的channelIdeventType=live。对此的 HTTPS 请求将如下所示:
    https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=[CHANNEL_ID]&eventType=live&maxResults=1&order=date&type=video&key=[YOUR_API_KEY]
    检查search JSON 响应。如果它返回任何结果 (data.pageInfo.totalResults > 0),您就知道该频道正在直播。 如果频道是直播的,请根据查询响应中的视频 ID (data.items[0].id.videoId) 将请求直接重定向到直播视频的嵌入 URL。 如果频道未直播,请根据需要创建一个占位符,或再次请求搜索 eventType=completed 以获取过去的广播,eventType=upcoming 以获取已安排的广播,或删除 eventType 参数以获取最近的视频。

一旦您拥有可以响应和重定向请求的服务器,您就可以在您的页面中嵌入一个直接指向您的 API URL 的 iFrame。您的服务器将处理逻辑并使用重定向自动将 iFrame 更改为 YouTube 视频播放器,而无需您执行客户端逻辑或公开您的 API 密钥2


1 与所有 YouTube API 请求一样,search#list 查询将计入您的每日配额。如果您打算将此端点设为高流量端点,您可以向 YouTube 请求增加配额,或者在您的终端实施缓存解决方案以减少您发出的请求数量。

2 GCP(谷歌云平台),您将使用它来管理您对 YouTube 数据 API 的访问,在您需要时可以很好地防止 API 密钥被盗在客户端公开它。话虽这么说,最佳做法是尽可能将其仅存储在服务器上,以保密您的密钥。

【讨论】:

天哪,听起来太棒了!非常感谢你,很抱歉我的菜鸟问题。我正在尝试学习如何做到这一点。我将如何首先设置服务器?你有更简单的联系方式吗? :) “Noobish”问题是学习过程的一部分,所以没有问题!首先,查看What should I do when someone answers my question? 并按照那里的说明进行操作。至于如何创建服务器,这是一个非常广泛的话题,不太适合 Stack Overflow,更不用说 cmets。我使用 Node.js 进行服务器端开发,所以我最有资格谈论它。有许多不同的选项,但如果您想使用 Node.js,docs 可以帮助您入门。 我想我明白你的意思,我会用什么来编码或写这个?我知道你说找个服务器来做?你有什么更容易联系的地方吗?如果没有也没关系:( @TheDuckPone 就我个人而言,我建议您查看Node.js Documentation 以了解如何开始使用这样的东西。您可以免费下载 Node.js 并将其安装在本地计算机上以了解如何使用它。一旦您对此感到相对满意,如果您需要,可以使用一些服务免费托管您完成的代码。这种服务的一个很好的例子(在我看来,不是附属的)是Glitch。 @TheDuckPone 作为附录,对于第一次学习 Node.js 的人(作为初学者并不丢人!),你可能不想开始构建 this 项目。在 Google 和 Node.js 文档的帮助下,我会从简单开始逐步积累您的经验。 Stack Overflow 不是一个提供长期、一对一指导的地方,所以人们不会真正分享联系信息,包括我自己。如果您完全迷失了方向,有很多教程可以学习 Node 或任何其他类似的后端框架。

以上是关于嵌入不带视频 ID 的 YouTube 频道的当前直播的主要内容,如果未能解决你的问题,请参考以下文章

如何嵌入带有 4000 多个视频的缩略图的 youtube 频道

如何将 youtube 频道嵌入网站?

获取 youtube 频道上所有上传视频的带有 id 的 XML

在网站上动态嵌入 youtube 频道的最佳方式是啥(首选 wordpress)

如何从 Youtube 频道获取所有视频 ID

如何从频道 ID 获取 YouTube 视频 URL