OGeek|极客世界-中国程序员成长平台

标题: ios - 如果编码器崩溃,自动停止 YouTube 直播事件 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 09:50
标题: ios - 如果编码器崩溃,自动停止 YouTube 直播事件

我知道 YouTube API v3,它允许您创建新的直播事件,然后您需要将广播与流绑定(bind)、手动更改状态等...才能发布您的直播事件。

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

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



Best Answer-推荐答案


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

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

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

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

- (void)authorizeRequestNSMutableURLRequest *)request
           completionHandlervoid (^)(NSError *error))handler;

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

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

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

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

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

关于ios - 如果编码器崩溃,自动停止 YouTube 直播事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33843405/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4