- From: Takumi Fujimoto via GitHub <sysbot+gh@w3.org>
- Date: Tue, 03 Sep 2019 22:50:22 +0000
- To: public-secondscreen@w3.org
takumif has just submitted a new pull request for https://github.com/w3c/remote-playback:
== Add a remoting buffer state attribute to RemotePlayback ==
This PR proposes to add a remoting buffer state attribute to RemotePlayback, which will indicate the remote buffer state when using MSE / media remoting mode (as opposed to media/URL flinging).
Here is sample code showing how RemotePlayback may interact with MSE using the new enum:
```javascript
const video = document.querySelector('#my-video');
const mediaSource = new MediaSource();
let sourceBuffer;
let isBufferingSegments = false;
mediaSource.addEventListener('sourceopen', onMediaSourceOpen);
video.src = window.URL.createObjectURL(mediaSource);
video.remote.addEventListener('remotingstatechanged', onRemotingStateChanged);
function onRemotingStateChanged() {
switch (video.remote.remotingBufferState) {
case 'insufficient-data':
case 'enough-data':
startBufferingSegments();
break;
case 'too-much-data':
case 'not-remoting':
stopBufferingSegments();
break;
}
}
async function onMediaSourceOpen() {
sourceBuffer = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.4d401f"');
await startBufferingSegments();
video.play();
}
async function startBufferingSegments() {
if (isBufferingSegments) {
return;
}
isBufferingSegments = true;
sourceBuffer.addEventListener('updateend', bufferNextSegment);
await bufferNextSegment();
}
function stopBufferingSegments() {
if (!isBufferingSegments) {
return;
}
isBufferingSegments = false;
sourceBuffer.removeEventListener('updateend', bufferNextSegment);
}
async function bufferNextSegment() {
const videoChunk = await getNextVideoChunk();
sourceBuffer.appendBuffer(new Uint8Array(videoChunk));
}
async function getNextVideoChunk() {
// Fetches and returns a video chunk.
}
```
See https://github.com/w3c/remote-playback/pull/126
Received on Tuesday, 3 September 2019 22:50:25 UTC