嵌入YouTube频道的当前直播流,而不添加视频ID

时间:2019-08-13 20:06:53

标签: youtube-api youtube-livestreaming-api

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

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

我的目标是创建一个嵌入内容,该嵌入内容将在用户流式传输时自动显示其实时流,并显示用户处于在线还是离线状态。是否有一个允许我执行此操作的嵌入URL,或者API中是否有可能有所帮助?

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

2 个答案:

答案 0 :(得分:0)

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

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

  1. 在您自己的服务器上设置端点。你可以接受 channelId参数或硬编码参数,具体取决于可扩展性 您希望做到这一点。
  2. YouTube's search endpoint 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. 检查search JSON响应。如果返回任何结果(data.pageInfo.totalResults > 0),则表明该频道已上线。
  4. 如果该频道是直播频道,则根据查询响应(data.items[0].id.videoId中视频的ID,将请求直接重定向到您服务器的直播视频的嵌入URL。
  5. 如果该频道不在直播中,请创建一个合适的占位符,或再次请求搜索eventType=completed以获取过去的广播,eventType=upcoming以获取预定的广播,或删除{{ 1}}参数以获取最新的视频。

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


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

2 GCP(Google云平台)可用于管理对YouTube数据API的访问,它在需要时可以很好地防止API密钥被盗在客户端公开它。话虽如此,最佳实践是通过仅在可能的情况下仅将密钥存储在服务器上来对密钥保密。

答案 1 :(得分:0)

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

hom <- restrictedparts(19,3)  #where 19 is Y.have[,1][1] and 3 is Y.have[,2][1] as per your data 
print(hom[,ncol(hom)])

#output : 7 6 6

het <- Reduce(intersect, list(which(hom[2,1:ncol(hom)] %in% 1),which(hom[3,1:ncol(hom)] %in% 1)))
hom[,het]

#output : 17 1 1

请参见https://stackoverflow.com/a/39582176/470749

不幸的是,我没有找到一种类似的简单方法来永久embed the YouTube chat用于该直播。