在我们的平台上,“ http://qual-e.appspot.com/ ”中的测试用例“18.MediaElementEvents ”因“结束”而在Cobalt中无法触发失败
conformanceTest-20170531180007.js中的以下 js 代码:
media.addEventListener('ended', function() {
self.log('onended called');
runner.succeed();
});
我无法收到结束的回调并且测试用例将失败
html_media_element.cc中的以下 C 代码:
if (!SbDoubleIsNan(dur) && (0.0f != dur) && now >= dur && playback_rate_0)
{
......
if(!sent_end_event)
{
send_end_event_ = true;
ScheduleOwnEvent(base:Tokens::ended());
}
......
}
您可以看到正在检查“ now >= dur ”,这可能导致结束的回调不再被触发。因为平台在 EOS 的当前时间和持续时间之间可能存在微小的差距。以这个测试用例为例,“dur”是1.000s,但“now”在EOS平台上可能停留0.98ms。
(1) 现在,Stardboard API 无法从 Cobalt 接收持续时间。持续时间始终为 -1。如果 Stardboard 可以将持续时间传递给我们,我们可以在向 Cobalt 通知“kSbPlayerStateEndOfStream”时强制 EOS 的当前时间等于持续时间。
(2) 也许删除检查“now >= dur”也可以解决这个问题。
Cobalt 可以通过 (1) 或 (2) 的方式解决这个问题吗?或者你有什么其他建议吗?
谢谢