在没有视频 ID 的情况下嵌入 YouTube 频道的当前直播

The*_*one 8 youtube-api youtube-livestreaming-api

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

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

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

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

Rya*_*yan 6

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

https://www.youtube.com/embed/live_stream?channel=YOUR_CHANNEL_ID_HERE
Run Code Online (Sandbox Code Playgroud)

/sf/answers/2770752351/

不幸的是,我还没有找到一种类似的简单方法来永久嵌入该直播的 YouTube 聊天


Iro*_*are 4

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

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

  1. 在您自己的服务器上设置端点。您可以接受 channelId参数或硬编码参数,具体取决于您希望其可扩展程度。
  2. 查询YouTube 的search端点1以获取指定的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]
  3. 检查searchJSON 响应。如果它返回任何结果 ( data.pageInfo.totalResults > 0),您就知道该频道处于直播状态。
  4. 如果频道是直播频道,则根据查询响应 ( ) 中的视频 ID,将请求直接重定向到直播视频的嵌入 URL data.items[0].id.videoId
  5. 如果频道未直播,请创建您认为合适的占位符,或发出第二个请求来搜索eventType=completed过去的广播、eventType=upcoming计划的广播,或删除eventType参数以获取最新的视频。

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


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

2 GCP(Google 云平台)可用于管理对 YouTube 数据 API 的访问,当您必须在客户端公开 API 密钥时,它可以很好地防止 API 密钥被盗。话虽这么说,最佳实践是尽可能将密钥存储在服务器上,以保证密钥的机密性。