[upload.pug]
block scripts
script(src="/static/js/recorder.js")
=======================================
[webpack.config.js]
module.exports = {
entry: {
..
recorder: "./src/client/js/recorder.js",
},
==========================
[src/js/recorder.js]
const startBtn = document.getElementById("startBtn");
const handleStart = async () => {
const stream = await navigator.mediaDevices.getUserMedia({
audio: true,
video: true,
});
console.log(stream);
};
startBtn.addEventListener("click", handleStart);
[upload.pug]
block content
div
video#preview << << <<
button#startBtn Start Recording
========================
[recorder.js]
const video = document.getElementById("preview"); << <<
const handleStart = async () => {
const stream = await navigator.mediaDevices.getUserMedia({
audio: false,
video: { width: 200, height: 100 },
});
video.srcObject = stream; << <<
video.play(); <<
};
MediaRecorder() - Web APIs | MDN
The MediaRecorder() constructor creates a new MediaRecorder object that will record a specified MediaStream.
developer.mozilla.org
[recorder.js]
const startBtn = document.getElementById("startBtn");
const video = document.getElementById("preview");
let stream = null;
const handleStop = () => {
startBtn.innerText = "Stop Recording";
startBtn.removeEventListener("click", handleStop);
startBtn.addEventListener("click", handleStart);
};
const handleStart = () => {
startBtn.innerText = "Start Recording";
startBtn.removeEventListener("click", handleStart);
startBtn.addEventListener("click", handleStop);
console.log("handleStart>>>", stream);
const recorder = new MediaRecorder(stream, { mimeType: "video/webm" });
console.log(recorder);
};
const init = async () => {
stream = await navigator.mediaDevices.getUserMedia({
audio: false,
video: true,
//video: { width: 200, height: 100 },
});
console.log("init>>>", stream);
video.srcObject = stream;
video.play();
};
init();
startBtn.addEventListener("click", handleStart);
const handleStart = () => {
...
const recorder = new MediaRecorder(stream);
recorder.ondataavailable = (event) => {
console.log(event.data); >> >> >> 이걸로 녹화된거 얻을수있음
};
recorder.start();
setTimeout(() => {
recorder.stop();
}, 5000);
};
>> recorder.stop() 하고나면 dataavailable 되어서 위 console.log 이벤트 실행됨
>> 영상 생김
const handleStart = () => {
...
recorder = new MediaRecorder(stream);
recorder.ondataavailable = (event) => {
const videoFile = URL.createObjectURL(event.data);
// blob:http://localhost:4000/938d5a5f-4b94-4bf8-ae62-75f4cb083194
// >> 브라우저 메모리상에 존재하는 url > 이걸로 파일에 접근가능
video.srcObject = null;
video.src = videoFile;
video.loop = true;
video.play();
};
const handleDownload = () => {
const a = document.createElement("a");
a.href = videoFile;
a.download = "MyRecording.webm";
document.body.appendChild(a);
a.click();
};
최종
const startBtn = document.getElementById("startBtn");
const video = document.getElementById("preview");
let stream;
let recorder;
let videoFile;
const handleDownload = () => {
startBtn.innerText = "Start Recording";
const a = document.createElement("a");
a.href = videoFile;
a.download = "MyRecording.webm";
document.body.appendChild(a);
a.click();
};
const handleStop = () => {
startBtn.innerText = "Download Recording";
startBtn.removeEventListener("click", handleStop);
startBtn.addEventListener("click", handleDownload);
recorder.stop();
};
const handleStart = () => {
startBtn.innerText = "Stop Recording";
startBtn.removeEventListener("click", handleStart);
startBtn.addEventListener("click", handleStop);
recorder = new MediaRecorder(stream, { mimeType: "video/webm" });
recorder.ondataavailable = (event) => {
videoFile = URL.createObjectURL(event.data);
// blob:http://localhost:4000/938d5a5f-4b94-4bf8-ae62-75f4cb083194
// >> 브라우저 메모리상에 존재하는 url > 이걸로 파일에 접근가능
video.srcObject = null;
video.src = videoFile;
video.loop = true;
video.play();
};
recorder.start();
};
const init = async () => {
stream = await navigator.mediaDevices.getUserMedia({
audio: false,
video: { width: 200, height: 100 },
});
video.srcObject = stream;
video.play();
};
init();
startBtn.addEventListener("click", handleStart);
ch15. flash message (0) | 2022.09.05 |
---|---|
ch14. webassembly video transcode (0) | 2022.09.02 |
ch12. Views api << 템플릿 렌더링 X (0) | 2022.09.01 |
ch11.6~ video play (2) (0) | 2022.08.31 |
ch10. styles (0) | 2022.08.30 |
댓글 영역