如果编码器崩溃,自动停止 YouTube 直播活动

Auto-Stop a YouTube Live Event if encoder crashes

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

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

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

我还开发了一个 iOS 与 YouTube 直播 API 集成的应用程序。老实说,我们也很难找到一个很好的解决方案来解决这个问题。

我们在设备本地保存了 liveBroadcastid,并保存了用户广播的状态(如果用户已成功安排广播,如果他们在测试阶段,如果他们在现场,如果他们结束了广播)。如果出于某种原因设备或编码器在进入 "ended" 状态之前崩溃,或者用户在实时事件中间将应用程序置于后台,我们会在应用程序的 AppDelegate 中进行回退 API 调用,这将结束用户的现场活动。

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

我们强制刷新了用户的授权令牌。我们使用旧版本的 Google+ SDK 和 GTMOAuth,所以我们可以调用

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

没有请求刷新用户的授权令牌。

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

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

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

我们需要刷新授权令牌,因为我们发现它会在几个小时后过期(任何请求都会 return 和 401 authError)。这在较新版本的 SDK 中可能已更改。我们还集成了 Parse,因此我们可以独立于 YouTube 跟踪我们自己的应用程序的广播对象。每次编码器或应用程序崩溃时,我们都会 "force" 结束我们的自定义广播,如果我们的广播有 "ended," 但实际的 YouTube 直播活动仍然 "live," CloudCode cron 作业将结束代表用户的 YouTube 事件(每次用户登录应用程序或更新他们的授权令牌时,我们都会将其发送到 CloudCode)。您还可以手动检查每个 YouTube 直播事件,确保如果您尝试播放视频,它会进入 "playing"s 状态,而不是挂在 "buffering" 或 "error" 状态.