我正在Starboard中实现媒体处理程序,而且我遇到了Cobalt中的客户端应用程序没有足够积极地缓冲内容的情况.这导致它只是空闲缓冲区.当平台缓冲区耗尽时触发的正确Starboard事件是什么?我应该以某种方式冒出错误,或者是否有信号我可以给客户端应用程序请求更多数据?
小智 5
当存在欠载时,播放器实现应通过在内部暂停视频播放来处理它.对于最终用户,媒体播放暂停,同时媒体堆栈的状态仍被视为"正在播放".这使玩家有机会在再次重新开始播放之前接收一些视频数据.在参考实现中,PlayerWorker通过暂停音频回放来实现此目的.由于媒体时间和视频播放与音频时间相关联,整个播放器暂停.
当新数据到来时,播放器应自动恢复播放.播放器实现还可以选择增加预卷/恢复所需的缓冲量以避免将来欠载,但这通常不是必需的.
正如您所说,您的应用程序不断遇到欠载.即使可以正确处理欠载,也可以很好地解决这个问题,以获得更好的用户体验.
我要检查的第一件事是测试环境有足够的网络带宽来满足所要求的视频质量.如果应用程序针对的是网络非常差的市场,请考虑缓冲更多的媒体数据.
如果应用程序在有足够的网络带宽时发生欠载,则表示媒体数据处理速度不够快.一个好方法是检查kSbPlayerDecoderStateNeedsData是否足够频繁地被激活并且SbPlayerWriteSample()被调用而没有太多延迟,因为这是唯一一个跨越Starboard边界移动媒体数据的地方.
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |