in 2020/media/conformanceTest.js [391:443]
testBufferSize.prototype.onsourceopen = function() {
var runner = this.runner;
// The test clip has a bitrate which is nearly exactly 1MB/sec, and
// lasts 1s. We start appending it repeatedly until we get eviction.
var videoStream = Media.VP9.Video1MB;
var sb = this.ms.addSourceBuffer(videoStream.mimetype);
var audioStream = Media.AAC.Audio1MB;
var unused_audioSb = this.ms.addSourceBuffer(audioStream.mimetype);
var self = this;
var MIN_SIZE = 12 * 1024 * 1024;
var ESTIMATED_MIN_TIME = 12;
var xhr = runner.XHRManager.createRequest(videoStream.src, function(e) {
var onBufferFull = function() {
runner.checkGE(expectedTime - sb.buffered.start(0), ESTIMATED_MIN_TIME,
'Estimated source buffer size');
runner.succeed();
};
var expectedTime = 0;
var expectedSize = 0;
var appendCount = 0;
sb.addEventListener('updateend', function onUpdate() {
appendCount++;
self.log('Append count ' + appendCount);
if (sb.buffered.start(0) > 0 || expectedTime > sb.buffered.end(0)) {
sb.removeEventListener('updateend', onUpdate);
onBufferFull();
} else {
expectedTime += videoStream.duration;
expectedSize += videoStream.size;
// Pass the test if the UA can handle 10x more than expected.
if (expectedSize > (10 * MIN_SIZE)) {
sb.removeEventListener('updateend', onUpdate);
onBufferFull();
return;
}
sb.timestampOffset = expectedTime;
try {
sb.appendBuffer(xhr.getResponseData());
} catch (e) {
var QUOTA_EXCEEDED_ERROR_CODE = 22;
if (e.code == QUOTA_EXCEEDED_ERROR_CODE) {
sb.removeEventListener('updateend', onUpdate);
onBufferFull();
} else {
runner.fail(e);
}
}
}
});
sb.appendBuffer(xhr.getResponseData());
});
xhr.send();
};