MediaRecoder
MediaRecoder构造函数会创建一个对指定的 MediaStream 进行录制的 MediaRecorder 对象
var mediaRecorder
= new MediaRecorder(stream
[, options
]);
开始录制
mediaRecorder
.start(timeslice
);
停止录制
mediaRecorder
.stop();
示例
<!DOCTYPE html
>
<html
>
<head
>
<meta charset
="UTF-8">
<title
>音视频录制
</title
>
</head
>
<body
>
<div
>
<table
>
<tr
>
<td
><video autoplay playsinline id
="player"></video
></td
>
<td
><video playsinline id
="recplayer"></video
></td
>
</tr
>
<tr
>
<td
><button id
="record">开始录制
</button
></td
>
<td
><button id
="recplay" disabled
>播放
</button
></td
>
<td
><button id
="download" disabled
>下载
</button
></td
>
</tr
>
</table
>
</div
>
<script src
="https://webrtc.github.io/adapter/adapter-latest.js"></script
>
<script
>
'use strict'
var videoplay
= document
.getElementById('player');
var btnRecord
= document
.getElementById('record');
var btnPlay
= document
.getElementById('recplay');
var btnDownload
= document
.getElementById('download');
var recvideo
= document
.getElementById('recplayer');
var Stream
;
var buffer
;
var mediaRecorder
;
function gotMediaStream(stream
) {
window
.Stream
= stream
videoplay
.srcObject
= stream
;
}
function handleError(err
) {
console
.log(err
.name
+ " : " + err
.message
);
}
if (!navigator
.mediaDevices
|| !navigator
.mediaDevices
.getUserMedia
) {
console
.log("你的浏览器不支持getUserMedia")
} else {
var constraints
= {
video
: true,
audio
: {
echoCancellation
:true,
noiseSuppression
:true,
}
}
navigator
.mediaDevices
.getUserMedia(constraints
)
.then(gotMediaStream
)
.catch(handleError
);
}
function handleDataAvailable(e
) {
if (e
&& e
.data
&& e
.data
.size
> 0) {
buffer
.push(e
.data
);
}
}
function startRecord() {
buffer
= [];
var options
= {
mimeType
: 'video/webm;codecs=vp8'
}
if (!MediaRecorder
.isTypeSupported(options
.mimeType
)) {
console
.error(`不支持${options.mimeType} `);
return;
}
try {
mediaRecorder
= new MediaRecorder(Stream
, options
);
} catch (e) {
console
.error(e
);
return;
}
mediaRecorder
.ondataavailable
= handleDataAvailable
;
mediaRecorder
.start(10);
}
function stopRecord() {
mediaRecorder
.stop();
}
btnRecord
.onclick = () => {
if (btnRecord
.textContent
=== '开始录制') {
startRecord();
btnRecord
.textContent
= '停止录制';
btnPlay
.disabled
= true;
btnDownload
.disabled
= true;
} else {
stopRecord();
btnRecord
.textContent
= '开始录制';
btnPlay
.disabled
= false;
btnDownload
.disabled
= false;
}
}
btnPlay
.onclick = () => {
var blob
= new Blob(buffer
, { type
: 'video/webm' });
recvideo
.src
= window
.URL.createObjectURL(blob
);
recvideo
.srcObject
= null;
recvideo
.controls
= true;
recvideo
.play();
}
btnDownload
.onclick = () => {
var blob
= new Blob(buffer
, { type
: 'video/webm' });
var url
= window
.URL.createObjectURL(blob
);
var a
= document
.createElement('a');
a
.href
= url
;
a
.style
.display
= 'none';
a
.download
= '视频录制.webm';
a
.click();
}
</script
>
</body
>
</html
>
转载请注明原文地址:https://blackberry.8miu.com/read-7511.html