현 직장은 비디오를 기반으로하는 플랫폼을 운영중이다.
따라서, 비디오 관련기술을 차례로 접해보는중인데
플레이어와 관련하여서는 youtube, wistia, vimeo등을 써봤고 (wistia를 선택)
촬영관련해서는 RecordRTC를 적용중이다.
국내에는 자료가 거의 0에 가까운 RecordRTC에 대해서 간단히 소개해본다.
RecordRTC는 웹에서 카메라/비디오를 운용하기 위한 라이브러리다.
즉, 웹캠을 지원하는 라이브러리이다.
왜 이것이 필요할까?
html5에서 input태그를 잘 활용하면 카메라에 접근이 가능하다.
다만, 그 범위가 플랫폼에 따라 제한된다.
예를들어,
<input id='camera-yap' type='file' accept='video/mp4' capture='camera' />
이, 간단한 한줄로도 기본적으로 카메라에 접근할 수 있다. (클릭하여 카메라를 구동시킬 수 있음)
운영체제에 따라 먹통이 되고는 한다.
서비스를 그런식으로 만들수는 없다. 모두에게 평등한 서비스를 제공하는것을 원칙으로해야한다.
그래서 알아보다보니 RecordRTC라는 라이브러리가 있었다.
어렵지는않지만, 예제가 없어 초보자에게는 간단하지 않다.
몇일내로, 예제소스를 '이곳'에 업데이트 하도록 하겠다.
===== 업데이트(20. 04. 22) =====
1. RecordRTC를 사용하기위해 설치를 하도록하자
https://www.npmjs.com/package/recordrtc
2. 예제를 참고해 구현해보자.
import React from 'react';
import RecordRTC from 'recordrtc';
class RecordRTCTest extends React.Component {
state={
recorder: null,
video: null,
}
onRecord = () => {
navigator
.mediaDevices
.getUserMedia({ audio: true, video: true })
.then(function(camera) {
this.readyCamera(camera);
})
.catch(function(error) {
console.error(error);
});
}
readyCamera = (camera) => {
const video = document.getElementById('test-video');
video.muted = false;
video.volume = 0;
video.srcObject = camera;
const recorder = new RecordRTC(camera, {
type: 'video',
});
recorder.startRecoding();
recorder.camera = camera;
this.setState({ recorder });
}
onStop = () => {
const { recorder } = this.state;
const video = document.getElementById('test-video');
video.src = video.srcObject = null;
video.muted = false;
video.volume = 1;
video.src = URL.createObjectUrl(recorder.getBlob);
// 카메라 정지
recorder.camera.stop();
// 서버 저장 등을 위해 영상object 데이터 저장
this.keepVideo(recorder);
this.setState({ recorder: null });
}
keepVideo = (data) => {
this.setState({
video: data.blob,
src: URL.createObjecetUrl(data.getBlob()),
});
}
render() {
return (
<div className='video-test-container'>
{
recorder ?
<p>녹화중이에요~~</p>
}
<video
id='test-video'
autoPlay
playsInline
controls
/>
<button onClick={this.onRecord}>촬영하기<button/>
<button onClick={this.onStop}>중지하기<button/>
</div>
)
}
}
기본적인 예제소스입니다.
테스트는 해보지는 않았으며, 실제 구현된 코드기반으로 기본 틀만 잡아둔 소스입니다.