<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button id="startPreview">开启预览</button>
<button id="endPreview">关闭预览</button>
<video id="preview" style="width:50vw; height:50vh; border: 6px solid black;" autoplay></video>
<hr />
<button id="startRecording">开始录制</button>
<button id="endRecording">结束录制</button>
<video id="recording" style="width:50vw; height:50vh; border: 6px solid black;" autoplay controls></video>
<hr />
<button id="mediaStream">查看mediaStream</button>
<hr />
<button id="screenshot">截图</button>
<hr />
<img id="videoFrame" style="border:6px solid green; width:100px; height:100px;" />
<a id="downloadPhoto">下载</a>
<script>
let previewDom = document.querySelector('#preview')
function startPreview() {
navigator.mediaDevices.getUserMedia({
audio: true,
video: true
}).then(stream => {
console.log('stream', stream)
previewDom.srcObject = stream
})
}
document.querySelector('#startPreview').addEventListener('click', startPreview)
document.querySelector('#endPreview').addEventListener('click', () => {
previewDom.srcObject.getTracks().forEach((track) => track.stop());
})
const blobChunks = []
let recorder;
const recording = document.querySelector('#recording')
function startRecordingEvent(stream) {
recorder = new MediaRecorder(stream)
recorder.start(1000)
recorder.ondataavailable = (event) => {
let data = event.data
blobChunks.push(data)
}
}
function endRecordingEvent() {
recorder.stop()
let recordedBlob = new Blob(blobChunks, { type: "video/webm" })
recording.src = URL.createObjectURL(recordedBlob);
}
document.querySelector('#startRecording').addEventListener('click', () => {
startRecordingEvent(previewDom.srcObject)
})
document.querySelector('#endRecording').addEventListener('click', endRecordingEvent)
document.querySelector('#mediaStream').addEventListener('click', () => {
console.log('preview.srcObject', previewDom.srcObject)
console.log('preview.captureStream', previewDom.captureStream())
console.log('preview.getTracks', previewDom.srcObject.getTracks())
console.log('preview.getVideoTracks', previewDom.srcObject.getVideoTracks()[0])
})
document.querySelector('#screenshot').addEventListener('click', () => {
screenShot(previewDom.srcObject.getVideoTracks()[0])
})
let photoBlobSrc;
function screenShot(videoTrack) {
const imageCaputure = new ImageCapture(videoTrack)
imageCaputure.takePhoto().then(res => {
photoBlobSrc = URL.createObjectURL(res)
document.querySelector('#videoFrame').src = photoBlobSrc
})
}
const downloadDOM = document.querySelector('#downloadPhoto')
function downloadPhotoEvent() {
downloadDOM.download = 'screenshot.jpg'
downloadDOM.href = photoBlobSrc
}
downloadDOM.addEventListener('click', downloadPhotoEvent)
</script>
</body>
</html>