Video Cropping
by williamwallacebrave
JavaScript
// SOURCE: http://stackoverflow.com/questions/39302814/mediastream-capture-canvas-and-audio-simultaneously#39302994
var cStream,
aStream,
recorder,
chunks = [],
canvasEl = document.createElement('canvas');
canvasEl.width = 400;
canvasEl.height = 400;
document.body.appendChild(canvasEl);
/*
create and run external video
*/
var videoEl = document.createElement('video');
videoEl.crossOrigin = 'anonymous';
videoEl.src = 'https://dl.dropboxusercontent.com/s/bch2j17v6ny4ako/movie720p.mp4';
videoEl.play();
videoEl.addEventListener('play', function(){
var audioCtx = new AudioContext();
var dest = audioCtx.createMediaStreamDestination();
aStream = dest.stream;
var sourceNode = audioCtx.createMediaElementSource(this);
console.log('connected audio');
sourceNode.connect(dest);
// output to our headphones
sourceNode.connect(audioCtx.destination)
var canvasCtx = canvasEl.getContext('2d');
console.log('play video in canvas');
draw(this, canvasCtx);
startRecording();
setTimeout(() => {
stopRecording();
}, 10000)
}, false);
function exportStream(e) {
console.log('exportStream', chunks.length);
if (chunks.length) {
var blob = new Blob(chunks),
videoURL = URL.createObjectURL(blob),
resultVideoEl = document.createElement('video');
resultVideoEl.controls = true;
resultVideoEl.src = videoURL;
resultVideoEl.onend = function() {
URL.revokeObjectURL(videoURL);
}
document.body.insertBefore(resultVideoEl, canvasEl);
} else {
document.body.insertBefore(
document.createTextNode('no data saved'), canvasEl);
}
}
function saveChunks(e) {
console.log('save chunks', e.data.size);
e.data.size && chunks.push(e.data);
}
function stopRecording() {
console.log('STOP RECORDING');
videoEl.pause();
recorder.stop();
}
function startRecording() {
...