我正在 Starboard 中实现媒体处理程序,并且遇到了我在 Cobalt 中的客户端应用程序没有足够积极地缓冲内容的情况。这导致它只是在空缓冲区中闲置。平台缓冲区耗尽时触发的正确右舷事件是什么?我应该以某种方式冒泡一个错误,还是有一个信号我可以给客户端应用程序请求更多数据?
问问题
192 次
1 回答
5
当出现欠载时,播放器实现应通过在内部暂停视频播放来处理它。对于最终用户,媒体播放暂停,而媒体堆栈的状态仍被视为“正在播放”。这使播放器有机会在再次恢复播放之前接收一些视频数据。在参考实现中,PlayerWorker 通过暂停音频播放来实现这一点。由于媒体时间和视频播放与音频时间相关联,因此整个播放器暂停。
当新数据到来时,播放器应自动恢复播放。播放器实现也可以选择增加预滚动/恢复所需的缓冲区数量,以避免将来出现欠载,但这通常不是必需的。
正如您提到的,您的应用程序经常遇到欠载。即使可以正确处理欠载,也可以很好地解决此问题以获得更好的用户体验。
我要检查的第一件事是测试环境是否有足够的网络带宽来满足所请求的视频质量。如果应用程序针对的是网络非常差的市场,请考虑缓冲更多媒体数据。
如果应用程序在网络带宽足够的情况下运行不足,则表明媒体数据处理速度不够快。一个好方法是检查是否足够频繁地触发 kSbPlayerDecoderStateNeedsData 并且没有太多延迟调用 SbPlayerWriteSample(),因为这是跨右舷边界移动媒体数据的唯一位置。
于 2016-11-10T02:32:45.927 回答