获取 YouTube 直播活动的当前持续时间

Posted

技术标签:

【中文标题】获取 YouTube 直播活动的当前持续时间【英文标题】:Get current duration of YouTube Live Event 【发布时间】:2015-05-17 00:42:20 【问题描述】:

有没有办法在直播到 YouTube 时获取录制流的当前时间?我希望能够在整个实时流中的某些点发送 API 请求,以获取流的当前分钟/秒。我想要达到的最终结果是能够记录一个亮点列表。本质上,用户按下一个按钮,它会获得当时流的当前时间,然后用户可以为当时发生的事情添加注释。但是,通过阅读所有文档,我找不到获取录制流当前时间的方法。

【问题讨论】:

嘿@Brandon Rohde 我的回答对你有帮助吗?如果您需要更多帮助,请告诉我。 抱歉@JAL 回复延迟!我今天重新审视了这个,这绝对有帮助。这是朝着正确方向迈出的一步,但是对于实时流,它仍然非常不一致和不可靠。直播时间越长,情况似乎越差。 我同意。 Live Streaming API 仍然非常不稳定,即使发布了一年多。此外,iFrame API 随时可能被弃用,因此理想情况下,YouTube 应该提供一种更好的方式来使用其 html5 播放器获取持续时间。 【参考方案1】:

看来您可以使用 iFrame API 的 getDuration() 方法做到这一点。

https://developers.google.com/youtube/iframe_api_reference#getDuration

查看现场活动的特别说明:

如果当前播放的视频是直播事件,getDuration() 函数将返回直播视频流开始后经过的时间。具体来说,这是视频在没有被重置或中断的情况下流式传输的时间量。此外,此持续时间通常比实际活动时间长,因为流式传输可能在活动开始时间之前开始。

您没有指定语言,所以我将发布两种不同语言的代码示例。两者都使用 iFrame API。

javascript

window.onYouTubePlayerReady = function(playerId) 
    window.ytplayer = document.getElementById("ytPlayer");
    console.log(window.ytplayer.getDuration());

Objective-C(使用 YouTube 的 youtube-ios-player-helper 类)

@property (weak, nonatomic) IBOutlet YTPlayerView *playerView;

// ...

- (void)viewDidLoad 
    [super viewDidLoad];
    [[self.playerView loadWithVideoId:@"iGTIK_8ydoI"] // live at the time answer was posted


// ...

- (void)getDurationOfPlayingVideo 

    NSLog(@"duration: %d", [self.playerView duration]);

正如我个人测试中的免责声明:Live Streaming API 非常易怒且不稳定,我发现一些 Live Event 返回的持续时间为 0。

【讨论】:

【参考方案2】:

这是旧的,但您可以通过 youtube API 获取 liveStreamingDetails.actualStartTime。 有了实际的StartTime,你就可以计算出经过了多少时间。

"https://www.googleapis.com/youtube/v3/videos"
        "?part=liveStreamingDetails"
        "&id=$id&key=$_key"

【讨论】:

以上是关于获取 YouTube 直播活动的当前持续时间的主要内容,如果未能解决你的问题,请参考以下文章

如何在 android 的 Youtube API V3 中按频道 ID 获取 Youtube 直播?

当频道开始直播时,从Youtube API获取通知?

Windows Phone 8:播放 YouTube 直播活动流

Youtube API v3 - 获取“Live Now” rtmp 和 streamkey

Youtube 直播 API:liveStreamingNotEnabled

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