2

我知道 YouTube API v3,允许您创建新的直播活动,然后您需要将广播与流绑定,手动更改状态等......以便发布您的直播活动。

但是......我注意到,当远程编码器停止向流发送视频时,事件继续运行。它会一直运行,直到您手动停止流。我想知道如果我的编码器崩溃,或者我按下正在推送视频的移动应用程序中的主页按钮,是否有任何方法可以自动停止流。

如果您的编码器应用程序在流式传输期间中断,并且您从未有机会告诉 YouTube 流式传输已结束,您会怎么做?显然,它会一直流式传输垃圾,直到您手动更改状态。对此有何建议?

4

1 回答 1

3

我还开发了一个与 YouTube Live Streaming API 集成的 iOS 应用程序。老实说,我们努力寻找一个很好的解决方案来解决这个问题。

我们将liveBroadcast's保存id在设备本地,并保存用户广播的状态(如果用户已成功安排广播,是否处于测试阶段,是否直播,是否已结束广播) . 如果由于某种原因设备或编码器在进入“结束”状态之前崩溃,或者用户在实时事件中间使应用程序后台运行,我们在应用程序的 AppDelegate 中有一个后备 API 调用将结束用户的实时事件。

首先,我们将检查用户先前广播的持久状态。如果直播活动没有成功结束,我们将代表用户启动一系列动作来结束活动。

我们强制刷新用户的身份验证令牌。我们使用的是带有 GTMOAuth 的旧版 Google+ SDK,因此我们可以调用

- (void)authorizeRequest:(NSMutableURLRequest *)request
           completionHandler:(void (^)(NSError *error))handler;

使用 nil 请求刷新用户的身份验证令牌。

然后,进行 API 调用liveBroadcasts.transition并将broadcastStatus参数值设置为complete

这一切都是从 异步完成的application:didFinishLaunchingWithOptions:,因此用户可以继续使用该应用程序,并准备新的广播,同时在后台清理旧事件。

如果这个客户端解决方案失败(并且用户从未重新打开应用程序等),我们还有一个服务器端 cron 解决方案,它可以检查任何实时但“死”的实时事件,并为用户通过使用其 OAuth 令牌进行 API 调用。

我们需要刷新 auth 令牌,因为我们发现它会在几个小时后过期(任何请求都会返回 a 401 authError)。这可能在较新版本的 SDK 中发生了变化。我们还与 Parse 集成,因此我们可以独立于 YouTube 跟踪我们自己的应用程序的广播对象。每次编码器或应用程序崩溃时,我们都会“强制”结束我们的自定义广播,如果我们的广播已经“结束”,但实际的 YouTube 直播活动仍然“直播”,CloudCode cron 作业将代表结束 YouTube 活动用户的身份(每次用户登录应用程序或更新他们的身份验证令牌时,我们都会将其发送到 CloudCode)。您还可以手动检查每个 YouTube 直播活动,确保如果您尝试播放视频,它会进入“正在播放”状态,

于 2015-11-21T16:44:01.697 回答