| <!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> |