diff options
Diffstat (limited to 'media/test/data/mse_config_change.html')
-rw-r--r-- | media/test/data/mse_config_change.html | 134 |
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> |