Skip to content

Commit

Permalink
[MSE] Periodically monitor source buffers.
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=125898

Reviewed by Eric Carlson.

Source/WebCore:

Test: media/media-source/media-source-monitor-source-buffers.html

The MSE spec requires that the SourceBuffer Monitoring step is run
periodically during playback. No specific update interval is specified
so we will re-use the existing HTMLMediaElement playback progress
timer to signal the media source monitoring.

* html/HTMLMediaElement.cpp:
(HTMLMediaElement::playbackProgressTimerFired):

LayoutTests:

* media/media-source/media-source-monitor-source-buffers-expected.txt: Added.
* media/media-source/media-source-monitor-source-buffers.html: Added.


Canonical link: https://commits.webkit.org/143907@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@160755 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
jernoble committed Dec 18, 2013
1 parent 0e9bb2e commit e1b7b8e
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 0 deletions.
10 changes: 10 additions & 0 deletions LayoutTests/ChangeLog
@@ -1,3 +1,13 @@
2013-12-17 Jer Noble <jer.noble@apple.com>

[MSE] Periodically monitor source buffers.
https://bugs.webkit.org/show_bug.cgi?id=125898

Reviewed by Eric Carlson.

* media/media-source/media-source-monitor-source-buffers-expected.txt: Added.
* media/media-source/media-source-monitor-source-buffers.html: Added.

2013-12-17 Joseph Pecoraro <pecoraro@apple.com>

Web Inspector: Remove InspectorFrontendHost.setInjectedScriptForOrigin
Expand Down
@@ -0,0 +1,12 @@

EXPECTED (source.readyState == 'closed') OK
EVENT(sourceopen)
RUN(sourceBuffer = source.addSourceBuffer("video/mock; codecs=mock"))
RUN(sourceBuffer.appendBuffer(initSegment))
EVENT(updateend)
RUN(sourceBuffer.appendBuffer(sample))
EVENT(updateend)
RUN(video.play())
EVENT(waiting) TEST(video.readyState == HTMLMediaElement.HAVE_CURRENT_DATA) OK
END OF TEST

@@ -0,0 +1,53 @@
<!DOCTYPE html>
<html>
<head>
<title>mock-media-source</title>
<script src="mock-media-source.js"></script>
<script src="../video-test.js"></script>
<script>
var source;
var sourceBuffer;
var initSegment;
var sample;

if (window.internals)
internals.initializeMockMediaSource();

function runTest()
{
findMediaElement();

source = new MediaSource();
testExpected('source.readyState', 'closed');

waitForEventOn(source, 'sourceopen', sourceOpen);
video.src = URL.createObjectURL(source);
}

function sourceOpen()
{
run('sourceBuffer = source.addSourceBuffer("video/mock; codecs=mock")');
waitForEventOn(sourceBuffer, 'updateend', loadSamples, false, true);
initSegment = makeAInit(100, [makeATrack(1, 'mock', TRACK_KIND.VIDEO)]);
run('sourceBuffer.appendBuffer(initSegment)');
}

function loadSamples()
{
sample = makeASample(0, 0, 10, 1, SAMPLE_FLAG.SYNC);
waitForEventOn(sourceBuffer, 'updateend', play, false, true);
run('sourceBuffer.appendBuffer(sample)');
}

function play()
{
waitForEventTestAndEnd('waiting', 'video.readyState == HTMLMediaElement.HAVE_CURRENT_DATA');
run('video.play()');
}

</script>
</head>
<body onload="runTest()">
<video></video>
</body>
</html>
17 changes: 17 additions & 0 deletions Source/WebCore/ChangeLog
@@ -1,3 +1,20 @@
2013-12-17 Jer Noble <jer.noble@apple.com>

[MSE] Periodically monitor source buffers.
https://bugs.webkit.org/show_bug.cgi?id=125898

Reviewed by Eric Carlson.

Test: media/media-source/media-source-monitor-source-buffers.html

The MSE spec requires that the SourceBuffer Monitoring step is run
periodically during playback. No specific update interval is specified
so we will re-use the existing HTMLMediaElement playback progress
timer to signal the media source monitoring.

* html/HTMLMediaElement.cpp:
(HTMLMediaElement::playbackProgressTimerFired):

2013-12-17 Jer Noble <jer.noble@apple.com>

[MSE] Add per-track signalling between SourceBuffer and SourceBufferPrivate.
Expand Down
5 changes: 5 additions & 0 deletions Source/WebCore/html/HTMLMediaElement.cpp
Expand Up @@ -3008,6 +3008,11 @@ void HTMLMediaElement::playbackProgressTimerFired(Timer<HTMLMediaElement>*)
if (RuntimeEnabledFeatures::sharedFeatures().webkitVideoTrackEnabled())
updateActiveTextTrackCues(currentTime());
#endif

#if ENABLE(MEDIA_SOURCE)
if (m_mediaSource)
m_mediaSource->monitorSourceBuffers();
#endif
}

void HTMLMediaElement::scheduleTimeupdateEvent(bool periodicEvent)
Expand Down

0 comments on commit e1b7b8e

Please sign in to comment.