Ваша демонстрация работает на локальном хосте или на веб-сайте HTTP, не основанном на iframe, после передачи параметра " second " через getScreenId
, например,
getScreenId(callback, true);
Где второй аргумент, т. Е. Логическое значение true
, включило динамики .
Примечание. Если функция по-прежнему не работает, выполните тестирование в режиме инкогнито, чтобы игнорировать / обойти кэш.
Примечание 2: Тестирование на локальном хосте или на веб-сайте, не поддерживающем iframe, т.е. на собственном домене вместо jsfiddle.
Обновлен ответ во вторник, 8 мая 2018 года
Пожалуйста, попробуйте этот код:
<!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>
<button class="btn btn-primary" id="stoprecording">STOP RECORDING</button>
<video id="preview-screen" controls autoplay height="600" width="800" style="float: left; margin-top: 20px"></video>
<video width="420" height="315" controls="" autoplay="" loop="" style="float: right; margin-top: 20px" onloadedmetadata="typeof OnLoadedMetaData === 'function' ? OnLoadedMetaData() : setTimeout(function() {OnLoadedMetaData();}, 3000);">
<source src="https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4" type="video/mp4">
</video>
<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.');
});
}, true);
}
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);
}
var recorder = '';
var screenRec = '';
var micRec = '';
function OnLoadedMetaData (){
captureScreen(function(screen) {
keepStreamActive(screen);
captureAudio(function(mic) {
keepStreamActive(mic);
screen.width = window.screen.width;
screen.height = window.screen.height;
screen.fullcanvas = true;
recorder = RecordRTC([screen, mic], {
type: 'video',
mimeType: 'video/webm',
previewStream: function(s) {
document.querySelector('#preview-screen').muted = true;
setSrcObject(s, document.querySelector('#preview-screen'));
}
});
screenRec = screen;
micRec = mic;
//Start recording
recorder.startRecording();
});
addStreamStopListener(screen, function() {
btnStopRecording.click();
});
});
}
var btnStopRecording = document.getElementById('stoprecording');
btnStopRecording.onclick = function() {
this.disabled = true;
recorder.stopRecording(function() {
var blob = recorder.getBlob();
document.querySelector('#preview-screen').src = URL.createObjectURL(blob);
document.querySelector('#preview-screen').muted = false;
screenRec.getTracks().concat(micRec.getTracks()).forEach(function(track) {
track.stop();
});
});
};
function addStreamStopListener(stream, callback) {
var streamEndedEvent = 'ended';
if ('oninactive' in stream) {
streamEndedEvent = 'inactive';
}
stream.addEventListener(streamEndedEvent, function() {
callback();
callback = function() {};
}, false);
stream.getAudioTracks().forEach(function(track) {
track.addEventListener(streamEndedEvent, function() {
callback();
callback = function() {};
}, false);
});
stream.getVideoTracks().forEach(function(track) {
track.addEventListener(streamEndedEvent, function() {
callback();
callback = function() {};
}, false);
});
}
</script>
</body>
</html>