blob: 7c17ccfd199cfe6099388760f7b4090f85ca2e6c [file] [log] [blame]
function fetchManifestAndData(test, manifestFilename, callback)
{
var baseURL = '/media/resources/media-source/';
var manifestURL = baseURL + manifestFilename;
MediaSourceUtil.loadTextData(test, manifestURL, function(manifestText)
{
var manifest = JSON.parse(manifestText);
assert_true(MediaSource.isTypeSupported(manifest.type), manifest.type + " is supported.");
var mediaURL = baseURL + manifest.url;
MediaSourceUtil.loadBinaryData(test, mediaURL, function(mediaData)
{
callback(manifest.type, mediaData);
});
});
}
function appendBuffer(test, sourceBuffer, data)
{
test.expectEvent(sourceBuffer, "update");
test.expectEvent(sourceBuffer, "updateend");
sourceBuffer.appendBuffer(data);
}
function mediaSourceConfigChangeTest(directory, idA, idB, description)
{
var manifestFilenameA = directory + "/test-" + idA + "-manifest.json";
var manifestFilenameB = directory + "/test-" + idB + "-manifest.json";
mediasource_test(function(test, mediaElement, mediaSource)
{
mediaElement.pause();
test.failOnEvent(mediaElement, 'error');
test.endOnEvent(mediaElement, 'ended');
fetchManifestAndData(test, manifestFilenameA, function(typeA, dataA)
{
fetchManifestAndData(test, manifestFilenameB, function(typeB, dataB)
{
assert_equals(typeA, typeB, "Media format types match");
var sourceBuffer = mediaSource.addSourceBuffer(typeA);
appendBuffer(test, sourceBuffer, dataA);
test.waitForExpectedEvents(function()
{
// Add the second buffer starting at 0.5 second.
sourceBuffer.timestampOffset = 0.5;
appendBuffer(test, sourceBuffer, dataB);
});
test.waitForExpectedEvents(function()
{
// Add the first buffer starting at 1 second.
sourceBuffer.timestampOffset = 1;
appendBuffer(test, sourceBuffer, dataA);
});
test.waitForExpectedEvents(function()
{
// Add the second buffer starting at 1.5 second.
sourceBuffer.timestampOffset = 1.5;
appendBuffer(test, sourceBuffer, dataB);
});
test.waitForExpectedEvents(function()
{
// Truncate the presentation to a duration of 2 seconds.
mediaSource.duration = 2;
mediaSource.endOfStream();
mediaElement.play();
});
});
});
}, description, { timeout: 10000 } );
};