处理缓冲区欠载的最佳方法是什么?

时间:2016-11-09 22:24:20

标签: cobalt

我在Starboard中实现了媒体处理程序,而且我遇到了Cobalt中的客户端应用程序没有足够积极地缓冲内容的情况。这导致它只是空闲缓冲区。当平台的缓冲区耗尽时,触发的右键事件是什么?我应该以某种方式冒出错误,或者是否有信号我可以给客户端应用程序请求更多数据?

1 个答案:

答案 0 :(得分:5)

当存在欠载时,播放器实现应通过在内部暂停视频播放来处理它。对于最终用户,暂停媒体播放,同时媒体堆栈的状态仍被视为"播放"。这使玩家有机会在再次重新开始播放之前接收一些视频数据。在参考实现中,PlayerWorker通过暂停音频回放来实现此目的。由于媒体时间和视频播放与音频时间相关联,整个播放器都会暂停。

当新数据出现时,播放器应自动恢复播放。播放器实现也可以选择增加预卷/恢复所需的缓冲量,以避免将来出现欠载,但这通常不是必需的。

正如您所提到的那样,您的应用经常遇到不足。即使可以正确处理欠载,也可以很好地解决这个问题,以获得更好的用户体验。

我要检查的第一件事是测试环境有足够的网络带宽来满足所要求的视频质量。如果应用程序针对网络很差的市场,请考虑缓冲更多的媒体数据。

如果在有足够的网络带宽时应用程序欠载,则表示媒体数据处理速度不够快。一个好方法是检查kSbPlayerDecoderStateNeedsData是否足够频繁地被激活,并且SbPlayerWriteSample()被调用没有太多延迟,因为这是唯一一个跨越Starboard边界移动媒体数据的地方。