我的代码(不是完整的脚本,而是问题的必要部分):
request_xhr (video_url, function (buffer)
{
video.addEventListener('updateend', function ()
{
appending_new_sources();
});
video.appendBuffer(buffer);
});
request_xhr (audio_url, function (buffer)
{
audio.appendBuffer(buffer);
});
我正在使用 Media Source Extension API 创建视频播放器。我创建了两个source buffers
称为video
和audio
。在上面的小代码中,我向视频和音频位置发送了两个请求,并将请求附加到视频播放器的链接video
和audio
链接中。我增加了一个Event Listner
的updateend
给video
bufferer。appending_new_sources()
一旦video
缓冲区被更新,事件监听器就会打开该函数。我想updateend
在两个缓冲区上添加一个,音频和视频。所以该功能appending_new_sources()
应该在视频和音频更新完成后打开。我不知道该怎么做。请帮忙。
使用通用处理程序并记住您收到了多少回调;当你得到两个时,请致电appending_new_sources
:
var callbacks = 0;
function handler() {
if (++callbacks == 2) {
appending_new_sources();
}
}
request_xhr (video_url, function (buffer)
{
video.addEventListener('updateend', handler);
video.appendBuffer(buffer);
});
request_xhr (audio_url, function (buffer)
{
audio.addEventListener('updateend', handler);
audio.appendBuffer(buffer);
});
但是,这是 Promise 有用的众多地方之一。如果您给自己一个启用了 Promise 的版本request_xhr
(可能会使用fetch
),它会更简洁:
// Promise-enabled request_xhr:
request_xhr_promise(url, function(buffer)
{
// You'll need to check for the error condition and use reject if an error occurs
return new Promise(function(resolve, reject) {
video.addEventListener('updateend', function() {
resolve();
});
video.appendBuffer(buffer);
});
});
// Using it for this:
Promise.all([
request_xhr_promise(video_url),
request_xhr_promise(audio_url),
])
.then(appending_new_sources)
.catch(function(err) {
// Handle error
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句