blob: c9f10ac50bddc1e9be5b226ef2352c6752e2eb73 [file] [log] [blame]
<!DOCTYPE html>
<html>
<!--
Copyright 2015 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<head>
<title>Video Encoder Example</title>
<script type="text/javascript">
var plugin;
var track;
var video;
function $(id) {
return document.getElementById(id);
}
function success(stream) {
track = stream.getVideoTracks()[0];
video.srcObject = stream;
video.play();
var list = $('profileList');
var profile = (list.length < 1) ? 'vp8'
: list.options[list.selectedIndex].value;
plugin.postMessage({
command: 'start',
track: track,
profile: profile,
width: 640,
height: 480
});
}
function failure(e) {
console.log("Error: ", e);
}
function startRecord() {
$('length').innerHTML = ' Size: ' + dataArray.byteLength + ' bytes';
navigator.webkitGetUserMedia({audio: false, video: true},
success, failure);
}
function stopRecord() {
plugin.postMessage({
command: "stop"
});
var video = $('video');
video.pause();
track.stop();
}
function saveBlob(blob) {
var blobUrl = URL.createObjectURL(blob);
window.location = blobUrl;
}
function handleMessage(msg) {
if (msg.data.name == 'data') {
appendData(msg.data.data);
} else if (msg.data.name == 'supportedProfiles') {
console.log('profiles: ', msg.data);
var profileList = $('profileList');
for (var i = 0; i < msg.data.profiles.length; i++) {
var item = document.createElement('option');
item.label = item.value = msg.data.profiles[i];
profileList.appendChild(item);
}
} else if (msg.data.name == 'log') {
console.log(msg.data.message);
}
}
function resetData() {
window.dataArray = new ArrayBuffer(0);
}
function appendData(data) {
var tmp = new Uint8Array(dataArray.byteLength + data.byteLength);
tmp.set(new Uint8Array(dataArray), 0 );
tmp.set(new Uint8Array(data), dataArray.byteLength);
dataArray = tmp.buffer;
$('length').textContent = ' Size: ' + dataArray.byteLength + ' bytes';
}
function initialize() {
plugin = $('plugin');
plugin.addEventListener('message', handleMessage, false);
video = $('video');
$('start').addEventListener('click', function (e) {
resetData();
startRecord();
});
$('stop').addEventListener('click', function (e) {
stopRecord();
});
$('download').addEventListener('click', function (e) {
saveBlob(new Blob([dataArray], { type: "application/octet-stream" }));
});
}
document.addEventListener('DOMContentLoaded', initialize, false);
</script>
</head>
<body>
<h1>Video Encoder API Example</h1><br>
This example demonstrates receiving frames from a video MediaStreamTrack and
encoding them in a plugin.
<br>
<select id="profileList"></select>
<input type="button" id="start" value="Start Recording"/>
<input type="button" id="stop" value="Stop Recording"/>
<input type="button" id="download" value="Download Recording"/>
<div id="length"></div>
<br>
<div>
<embed id="plugin" type="application/x-ppapi-example-video-encode"/>
<video id="video" width="640" height="480"/>
</div>
</body>
</html>