| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="/media-resources/video-test.js"></script> |
| <script src="/media/resources/media-source/webm/segment-info.js"></script> |
| <script src="media-source.js"></script> |
| <script> |
| var segmentHelper = new MediaSourceTest.SegmentHelper(WebMSegmentInfo.testWebM); |
| |
| function onSourceOpen(event) |
| { |
| consoleWrite("Test MediaSource object type"); |
| testExpected("mediaSource", event.target); |
| testExpected("mediaSource instanceof window.WebKitMediaSource", true); |
| |
| consoleWrite(""); |
| consoleWrite("Add a SourceBuffer"); |
| |
| testExpected("mediaSource.sourceBuffers.length", 0); |
| |
| mediaSource.sourceBuffers.addEventListener('webkitaddsourcebuffer', onSourceBufferAdded); |
| |
| run("segmentHelper.addSourceBuffer()"); |
| } |
| |
| function afterSourceBufferAdded() |
| { |
| consoleWrite(""); |
| consoleWrite("Test SourceBuffer object type"); |
| testExpected("segmentHelper.sourceBuffer instanceof window.WebKitSourceBuffer", true); |
| testExpected("mediaSource.sourceBuffers[0] instanceof window.WebKitSourceBuffer", true); |
| |
| consoleWrite(""); |
| consoleWrite("Append init segment"); |
| testExpected("mediaSource.sourceBuffers[0].buffered.length", 0); |
| segmentHelper.appendInitSegment(); |
| |
| // Append just enough segments to include at least 1 second of media data. |
| consoleWrite(""); |
| consoleWrite("Append 1 second of data."); |
| var endIndex = segmentHelper.getMediaSegmentIndexForTimestamp(1); |
| for (var i = 0; i <= endIndex; i++) |
| segmentHelper.appendMediaSegment(i); |
| testExpected("mediaSource.sourceBuffers[0].buffered.length", 1); |
| testExpected("mediaSource.sourceBuffers[0].buffered.start(0)", 0); |
| testExpected("mediaSource.sourceBuffers[0].buffered.end(0)", 1, '>'); |
| |
| consoleWrite(""); |
| consoleWrite("Set timestampOffset."); |
| testExpected("segmentHelper.sourceBuffer.timestampOffset", 0); |
| run("segmentHelper.sourceBuffer.timestampOffset = 5"); |
| testExpected("segmentHelper.sourceBuffer.timestampOffset", 5); |
| |
| // Append another 1 second of media data. |
| consoleWrite(""); |
| consoleWrite("Append 1 second of data."); |
| var endIndex = segmentHelper.getMediaSegmentIndexForTimestamp(1); |
| for (var i = 0; i <= endIndex; i++) |
| segmentHelper.appendMediaSegment(i); |
| testExpected("mediaSource.sourceBuffers[0].buffered.length", 2); |
| testExpected("mediaSource.sourceBuffers[0].buffered.start(1)", 5); |
| testExpected("mediaSource.sourceBuffers[0].buffered.end(1)", 5, '>'); |
| |
| consoleWrite(""); |
| consoleWrite("Remove SourceBuffer"); |
| |
| mediaSource.sourceBuffers.addEventListener('webkitremovesourcebuffer', onSourceBufferRemoved); |
| |
| run("mediaSource.removeSourceBuffer(segmentHelper.sourceBuffer)"); |
| } |
| |
| function afterSourceBufferRemoved() |
| { |
| consoleWrite("Test that addSourceBuffer() throws and error when the MediaSource is not associated with a media element."); |
| var mediaSource2 = new WebKitMediaSource(); |
| video.src = webkitURL.createObjectURL(mediaSource2); |
| try { |
| mediaSource.addSourceBuffer('video/webm; codecs="vorbis,vp8"'); |
| } catch (e) { |
| consoleWrite("Got expected exception " + e); |
| } |
| |
| consoleWrite("Test that setting timestampOffset throws an error when the MediaSource is not associated with a media element."); |
| try { |
| segmentHelper.sourceBuffer.timestampOffset = 10; |
| } catch (e) { |
| consoleWrite("Got expected exception " + e); |
| } |
| |
| endTest(); |
| } |
| |
| function onSourceBufferAdded(event) |
| { |
| testExpected("mediaSource.sourceBuffers.length", 1); |
| |
| consoleWrite(""); |
| consoleWrite("Test SourceBufferList object type:"); |
| testExpected("mediaSource.sourceBuffers", event.target); |
| testExpected("mediaSource.sourceBuffers instanceof window.WebKitSourceBufferList", true); |
| |
| afterSourceBufferAdded(); |
| } |
| |
| function onSourceBufferRemoved(event) |
| { |
| testExpected("mediaSource.sourceBuffers.length", 0); |
| testExpected("mediaSource.sourceBuffers", event.target); |
| |
| consoleWrite(""); |
| consoleWrite("Test that append() throws an error after SourceBuffer has been removed."); |
| try { |
| segmentHelper.appendMediaSegment(0); |
| } catch (e) { |
| consoleWrite("Got expected exception " + e); |
| } |
| |
| consoleWrite("Test that buffered throws an error after SourceBuffer has been removed."); |
| try { |
| testExpected(segmentHelper.sourceBuffer.buffered, 0); |
| } catch (e) { |
| consoleWrite("Got expected exception " + e); |
| } |
| testExpected("mediaSource.sourceBuffers.length", 0); |
| |
| afterSourceBufferRemoved(); |
| } |
| |
| function onLoad() |
| { |
| findMediaElement(); |
| |
| mediaSource = new WebKitMediaSource(); |
| |
| waitForEventAndFail('error'); |
| waitForEvent('webkitsourceopen', "", false, false, mediaSource); |
| waitForEvent('webkitsourceended', "", false, false, mediaSource); |
| |
| mediaSource.addEventListener('webkitsourceopen', onSourceOpen); |
| |
| segmentHelper.init(video, function(success) |
| { |
| if (!success) { |
| failTest("Failed to load segment data"); |
| return; |
| } |
| |
| MediaSourceTest.setSrcToMediaSourceTestURL(video); |
| }); |
| } |
| </script> |
| </head> |
| <body onload="onLoad()"> |
| <video> </video> |
| <p>Tests MediaSource, SourceBuffer, and SourceBufferList objects.</p> |
| </body> |
| </html> |