我还开发了一个与 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 直播活动,确保如果您尝试播放视频,它会进入“正在播放”状态,