summaryrefslogtreecommitdiffstats
path: root/media/test/data/mse_config_change.html
diff options
context:
space:
mode:
Diffstat (limited to 'media/test/data/mse_config_change.html')
-rw-r--r--media/test/data/mse_config_change.html134
1 files changed, 134 insertions, 0 deletions
diff --git a/media/test/data/mse_config_change.html b/media/test/data/mse_config_change.html
new file mode 100644
index 0000000..f536ece
--- /dev/null
+++ b/media/test/data/mse_config_change.html
@@ -0,0 +1,134 @@
+<html>
+ <head>
+ <title>Test media source config changes.</title>
+ </head>
+ <body onload="runTest();">
+ <video controls></video>
+ <script src='eme_player_js/app_loader.js' type='text/javascript'></script>
+ <script type="text/javascript">
+ var testConfig = new TestConfig();
+ testConfig.loadQueryParams();
+ var runEncrypted = testConfig.runEncrypted == 1;
+
+ var video = document.querySelector('video');
+ var mediaType = 'video/webm; codecs="vorbis, vp8"';
+
+ var MEDIA_1 = 'bear-320x240.webm';
+ var MEDIA_2 = 'bear-640x360.webm';
+ if (runEncrypted) {
+ MEDIA_1 = 'bear-320x240-av_enc-av.webm';
+ MEDIA_2 = 'bear-640x360-av_enc-av.webm';
+ }
+
+ var MEDIA_1_WIDTH = 320;
+ var MEDIA_1_HEIGHT = 240;
+
+ var MEDIA_2_WIDTH = 640;
+ var MEDIA_2_HEIGHT = 360;
+ var MEDIA_2_LENGTH = 2.75;
+
+ // The time in secs to append the second media source.
+ var APPEND_TIME = 1;
+ // DELTA is the time after APPEND_TIME where the second video dimensions
+ // are guaranteed to take effect.
+ var DELTA = 0.1;
+ // Append MEDIA_2 source at APPEND_TIME, so expected total duration is:
+ var TOTAL_DURATION = APPEND_TIME + MEDIA_2_LENGTH;
+
+ function appendNextSource(mediaSource) {
+ console.log('Appending next media source at ' + APPEND_TIME + 'sec.');
+ var xhr = new XMLHttpRequest();
+ xhr.open("GET", MEDIA_2);
+ xhr.responseType = 'arraybuffer';
+ xhr.addEventListener('load', function(e) {
+ var onUpdateEnd = function(e) {
+ console.log('Second buffer append ended.');
+ srcBuffer.removeEventListener('updateend', onUpdateEnd);
+ mediaSource.endOfStream();
+ if (!mediaSource.duration ||
+ Math.abs(mediaSource.duration - TOTAL_DURATION) > DELTA) {
+ Utils.failTest('Unexpected mediaSource.duration = ' +
+ mediaSource.duration + ', expected duration = ' +
+ TOTAL_DURATION);
+ return;
+ }
+ video.play();
+ };
+ console.log('Appending next media source at ' + APPEND_TIME + 'sec.');
+ var srcBuffer = mediaSource.sourceBuffers[0];
+ srcBuffer.addEventListener('updateend', onUpdateEnd);
+ srcBuffer.timestampOffset = APPEND_TIME;
+ srcBuffer.appendBuffer(new Uint8Array(e.target.response));
+ });
+ xhr.send();
+ }
+
+ function onTimeUpdate() {
+ // crbug.com/246308
+ //checkVideoProperties();
+
+ // Seek to APPEND_TIME because after a seek a timeUpdate event is fired
+ // before video width and height properties get updated.
+ if (video.currentTime < APPEND_TIME - DELTA) {
+ // Seek to save test execution time (about 1 secs) and to test seek
+ // on the first buffer.
+ video.currentTime = APPEND_TIME - DELTA;
+ } else if (video.currentTime > APPEND_TIME + DELTA) {
+ // Check video duration here to guarantee that second segment has been
+ // appended and video total duration is updated.
+ // Video duration is a float value so we check it within a range.
+ if (!video.duration ||
+ Math.abs(video.duration - TOTAL_DURATION) > DELTA) {
+ Utils.failTest('Unexpected video.duration = ' + video.duration +
+ ', expected duration = ' + TOTAL_DURATION);
+ return;
+ }
+
+ video.removeEventListener('timeupdate', onTimeUpdate);
+ video.removeEventListener('ended', Utils.failTest);
+ Utils.installTitleEventHandler(video, 'ended');
+ // Seek to save test execution time and to test seek on second buffer.
+ video.currentTime = APPEND_TIME + MEDIA_2_LENGTH * 0.9;
+ }
+ }
+
+ function checkVideoProperties() {
+ if (video.currentTime <= APPEND_TIME) {
+ if (video.videoWidth != MEDIA_1_WIDTH ||
+ video.videoHeight != MEDIA_1_HEIGHT) {
+ logVideoDimensions();
+ Utils.failTest('Unexpected dimensions for first video segment.');
+ return;
+ }
+ } else if (video.currentTime >= APPEND_TIME + DELTA) {
+ if (video.videoWidth != MEDIA_2_WIDTH ||
+ video.videoHeight != MEDIA_2_HEIGHT) {
+ logVideoDimensions();
+ Utils.failTest('Unexpected dimensions for second video segment.');
+ return;
+ }
+ }
+ }
+
+ function logVideoDimensions() {
+ console.log('video.currentTime = ' + video.currentTime +
+ ', video dimensions = ' + video.videoWidth + 'x' +
+ video.videoHeight + '.');
+ }
+
+ function runTest() {
+ testConfig.mediaFile = MEDIA_1;
+ testConfig.mediaType = mediaType;
+ video.addEventListener('timeupdate', onTimeUpdate);
+ video.addEventListener('ended', Utils.failTest);
+ if (runEncrypted) {
+ var emePlayer = PlayerUtils.createPlayer(video, testConfig);
+ emePlayer.registerEventListeners();
+ }
+ var mediaSource = MediaSourceUtils.loadMediaSource(
+ MEDIA_1, mediaType, appendNextSource);
+ video.src = window.URL.createObjectURL(mediaSource);
+ }
+ </script>
+ </body>
+</html>