ios - 如果编码器崩溃,自动停止 YouTube 直播事件
<p><p>我知道 YouTube API v3,它允许您创建新的直播事件,然后您需要将广播与流绑定(bind)、手动更改状态等...才能发布您的直播事件。</p>
<p>但是...我注意到,当远程编码器停止将视频发送到流时,事件会继续运行。它会一直运行,直到您手动停止流。我想知道如果我的编码器崩溃,或者我按下正在推送视频的移动应用程序中的主页按钮,是否有任何方法可以自动停止流。</p>
<p>如果您的编码器应用程序在流式传输期间中断,并且您从未有机会告诉 YouTube 流式传输已结束,您会怎么做?显然,它会一直流式传输垃圾,直到您手动更改状态。对此有何建议?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>我还开发了一个与 YouTube Live Streaming API 集成的 iOS 应用。老实说,我们很难找到一个很好的解决方案来解决这个问题。</p>
<p>我们将 <code>liveBroadcast</code> 的 <code>id</code> 保存在设备本地,并保存了用户广播的状态(如果用户已成功安排广播,如果他们处于测试阶段,如果他们是现场的,如果他们已经结束了广播)。如果由于某种原因设备或编码器在进入“结束”状态之前崩溃,或者用户在实时事件中间使应用程序后台运行,我们在应用程序的 AppDelegate 中有一个后备 API 调用将结束用户的实时事件。 </p>
<p>首先,我们将检查用户先前广播的持久状态。如果直播事件没有成功结束,我们将代表用户启动一系列操作来结束事件。</p>
<p>我们强制刷新了用户的身份验证 token 。我们使用的是带有 GTMOAuth 的旧版 Google+ SDK,因此我们可以调用</p>
<pre><code>- (void)authorizeRequest:(NSMutableURLRequest *)request
completionHandler:(void (^)(NSError *error))handler;
</code></pre>
<p>使用 nil 请求刷新用户的身份验证 token 。</p>
<p>然后,对 <a href="https://developers.google.com/youtube/v3/live/docs/liveBroadcasts/transition" rel="noreferrer noopener nofollow"><code>liveBroadcasts.transition</code></a> 进行 API 调用并将 <code>broadcastStatus</code> 参数值设置为 <code>complete</code>。</p>
<p>这一切都是从 <code>application:didFinishLaunchingWithOptions:</code> 异步完成的,因此用户可以继续使用应用程序,并准备新的广播,同时在后台清理旧事件。</p>
<p>如果这个客户端解决方案失败(并且用户从未重新打开应用等),我们还有一个服务器端 cron 解决方案,它可以检查任何实时但“死”的实时事件,并清理它们通过使用他们的 OAuthtoken 进行 API 调用来为用户提供服务。</p>
<p>我们需要刷新身份验证 token ,因为我们发现它会在几个小时后过期(任何请求都会返回 <code>401 authError</code>)。这可能在较新版本的 SDK 中发生了变化。我们还与 Parse 集成,因此我们可以独立于 YouTube 跟踪我们自己的应用程序的广播对象。每次编码器或应用程序崩溃时,我们都会“强制”结束我们的自定义广播,如果我们的广播已经“结束”,但实际的 YouTube 直播事件仍然“直播”,CloudCode cron 作业将代表结束 YouTube 事件用户的身份(每次用户登录应用程序或更新他们的身份验证 token 时,我们都会将其发送到 CloudCode)。您还可以手动检查每个 YouTube 直播事件,确保如果您尝试播放视频,它会进入“正在播放”状态,而不是卡在“缓冲”或“错误”状态。</p></p>
<p style="font-size: 20px;">关于ios - 如果编码器崩溃,自动停止 YouTube 直播事件,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/33843405/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/33843405/
</a>
</p>
页:
[1]