【发布时间】:2018-05-03 11:46:22
【问题描述】:
我正在尝试使用用户的屏幕+麦克风上播放的视频录制屏幕。
查看演示:https://jsfiddle.net/4z447wpn/5/
代码如下:
<!DOCTYPE html>
<html>
<head>
<title>Screen recording using RecordRTC</title>
<style>
html, body{
margin: 0!important;
padding: 0!important;
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<video controls autoplay height="600" width="800" style="float: left; margin-top: 20px"></video>
<iframe width="420" height="315" style="float: right; margin-top: 20px"
src="https://www.youtube.com/embed/9Zr2jjg1X-U">
</iframe>
<script src="https://cdn.webrtc-experiment.com/RecordRTC.js"></script>
<script src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
<script src="https://cdn.WebRTC-Experiment.com/getScreenId.js"></script>
<script>
function captureScreen(cb) {
getScreenId(function (error, sourceId, screen_constraints) {
navigator.mediaDevices.getUserMedia(screen_constraints).then(cb).catch(function(error) {
console.error('getScreenId error', error);
alert('Failed to capture your screen. Please check browser console logs for further information.');
});
});
}
function captureAudio(cb) {
navigator.mediaDevices.getUserMedia({audio: true, video: false}).then(cb);
}
function keepStreamActive(stream) {
var video = document.createElement('video');
video.muted = true;
setSrcObject(stream, video);
video.style.display = 'none';
(document.body || document.documentElement).appendChild(video);
}
captureScreen(function(screen) {
keepStreamActive(screen);
captureAudio(function(mic) {
keepStreamActive(mic);
screen.width = window.screen.width;
screen.height = window.screen.height;
screen.fullcanvas = true;
var recorder = RecordRTC([screen, mic], {
type: 'video',
mimeType: 'video/webm',
previewStream: function(s) {
document.querySelector('video').muted = true;
setSrcObject(s, document.querySelector('video'));
}
});
//Start recording
recorder.startRecording();
//Stop recording after specific seconds
setTimeout(function() {
recorder.stopRecording(function() {
var blob = recorder.getBlob();
document.querySelector('video').src = URL.createObjectURL(blob);
document.querySelector('video').muted = false;
screen.getVideoTracks().forEach(function(track) {
track.stop();
});
screen.getAudioTracks().forEach(function(track) {
track.stop();
});
mic.getVideoTracks().forEach(function(track) {
track.stop();
});
mic.getAudioTracks().forEach(function(track) {
track.stop();
});
});
}, 20 * 1000);
});
});
</script>
</body>
</html>
注意事项:
(1) 在您允许访问浏览器屏幕和麦克风后快速播放 iframe 视频(加载在右侧),因此它将开始录制所有内容并在 20 秒后自动停止并播放录制的视频。暂停右侧视频以收听录制的声音。
(2) Chrome 用户需要安装扩展:https://chrome.google.com/webstore/detail/screen-capturing/ajhifddimkapgcifgcodmmfdlknahffk
我面临的问题:
(1) 它没有录制屏幕上视频中播放的声音。虽然它使用用户的麦克风捕获全屏。
(2) 如果我选择当前屏幕作为屏幕截图窗口,它会循环显示相同的屏幕。
【问题讨论】:
标签: javascript webrtc recordrtc