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

时间:2015-11-21 12:33:42

标签: ios youtube youtube-api rtmp youtube-livestreaming-api

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

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

如果您的编码器应用程序在流式传输过程中中断,您会怎么做?您从未有机会告诉YouTube流已结束?显然它会持续流式传输垃圾,直到您手动更改状态。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

我还参与了与YouTube直播API集成的iOS应用。说实话,我们努力找到一个解决这个问题的好解决方案。

我们在设备上本地保存了liveBroadcast的{​​{1}},并保存了用户广播的状态(如果用户已成功安排广播,如果他们处于测试阶段) ,如果他们是现场,如果他们已经结束广播)。如果无论出于何种原因设备或编码器在进入“已结束”状态之前崩溃,或者用户在实时事件中间对应用程序进行了后台处理,我们在应用程序的AppDelegate中进行了回退API调用,该调用将结束用户的直播事件。

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

我们强制刷新用户的身份验证令牌。我们在GTMOAuth中使用了较旧版本的Google+ SDK,因此我们可以致电

id

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

然后,对liveBroadcasts.transition进行API调用,并将- (void)authorizeRequest:(NSMutableURLRequest *)request completionHandler:(void (^)(NSError *error))handler; 参数值设置为broadcastStatus

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

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

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