教你用js屏幕录屏加摄像头捕获视频合成后自动上传阿里云oss

本节课主要分享两个技术点,一个是怎么调用js进行屏幕录屏,第二个是怎么将录屏文件自动上传到阿里云oss,这个在视频会议和在线教育的时候用的比较多。
一、js录屏+摄像头
首先需要安装chrome扩展,注意,这需要fanqiang,如果打不开,就查看这篇文章手动安装chrome扩展,http://www.bfw.wiki//user10/15640228901296320096.html
安装好chrome插件后,运行下面的代码
<style>
html, body {
margin: 0!important;
padding: 0!important;
text-align: center;
font-family: -apple-system, BlinkMacSystemFont,"Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-size: 1em;
}
video {
width: 30%;
border-radius: 5px;
border: 1px solid black;
}
</style>
<script type="text/javascript" src="http://repo.bfw.wiki/bfwrepo/js/bfwone.js"></script>
<video controls autoplay playsinline style="width: 40%;"></video>
<script src="http://repo.bfw.wiki/bfwrepo/js/RecordRTC.js"></script>
<script>
var streamid = null;
if (!navigator.getUserMedia && !navigator.mediaDevices.getUserMedia) {
var error = 'Your browser does NOT supports getDisplayMedia API.';
document.querySelector('h1').innerHTML = error;
document.querySelector('video').style.display = 'none';
document.getElementById('btn-start-recording').style.display = 'none';
document.getElementById('btn-stop-recording').style.display = 'none';
throw new Error(error);
}
function invokeGetDisplayMedia(success, error) {
var displaymediastreamconstraints = {
video: {
displaySurface: 'monitor',
// monitor, window, application, browser
logicalSurface: true,
cursor: 'always' // never, always, motion
}
};
// above constraints are NOT supported YET
// that's why overridnig them
displaymediastreamconstraints = {
video: {
mediaSource: 'screen'
}
};
if (navigator.mediaDevices.getUserMedia) {
navigator.mediaDevices.getUserMedia(displaymediastreamconstraints).then(success).catch(error);
} else {
navigator.getUserMedia(displaymediastreamconstraints).then(success).catch(error);
}
}
function captureScreen(callback) {
invokeGetDisplayMedia(function(screen) {
addStreamStopListener(screen, function() {
if (window.stopCallback) {
window.stopCallback();
}
});
callback(screen);
}, function(error) {
console.error(error);
alert('Unable to capture your screen. Please check console logs.\n' + error);
});
}
function captureCamera(cb) {
navigator.mediaDevices.getUserMedia({
audio: true, video: true
}).then(cb);
}
function keepStreamActive(stream) {
var video = document.createElement('video');
video.muted = true;
video.srcObject = stream;
video.style.display = 'none';
(document.body || document.documentElement).appendChild(video);
}
captureScreen(function(screen) {
keepStreamActive(screen);
setTimeout(function() {
captureCamera(function(camera) {
keepStreamActive(camera);
screen.width = window.screen.width;
screen.height = window.screen.height;
screen.fullcanvas = true;
camera.width = 320;
camera.height = 240;
camera.top = screen.height - camera.height;
camera.left = screen.width - camera.width;
var recorder = RecordRTC([screen, camera], {
type: 'video',
mimeType: 'video/webm',
previewStream: function(s) {
document.querySelector('video').muted = true;
document.querySelector('video').srcObject = s;
}
});
recorder.startRecording();
window.stopCallback = function() {
window.stopCallback = null;
recorder.stopRecording(function() {
var blob = ...点击查看剩余70%
网友评论0