마이클 니더마이어(Michael Niedermayer)의 주도하에 개발되고 있는 모든 동영상, 음악, 사진 포맷들의 디코딩과 인코딩을 목표로 만들어지고 있는 LGPL과 GPL 라이선스를 따르는 오픈 소스 프로젝트
ffmpeg를 설치하는 방법은 아래 링크를 통해 다운 받을 수 있다.
(윈도우에서는 환경변수를 설정해줘야 rtsp 관련 라이브러리를 사용할 떄 사용할 수 있다.)
https://ffmpeg.org/download.html
우선 ffmpeg에 대해 자세히 알아보기 전 node에서 ffmpeg 를 사용한 npm 등을 정리
이 라이브러리 같은 경우에는 npm 자체의 다운로드 수가 낮지만, rtsp recorder를 node에서 사용한다면 대부분의 글이 이 라이브러리로 이루어져 소개한다.
https://www.npmjs.com/package/node-rtsp-recorder
이 링크를 들어가보면
const Recorder = require('node-rtsp-recorder').Recorder
var rec = new Recorder({
url: 'rtsp://192.168.1.12:8554/unicast',
timeLimit: 60, // time in seconds for each segmented video file
folder: '/Users/sahilchaddha/Sahil/Projects/Github/node-rtsp-recorder/videos',
name: 'cam1',
})
// Starts Recording
rec.startRecording();
setTimeout(() => {
console.log('Stopping Recording')
rec.stopRecording()
rec = null
}, 300000)
와 같은 recoding video 예시가 있는데.. 개인적으로 이 코드대로하면 잘라서 나오는 mp4 파일이 재생이 안되는 이슈가 있었다.
그래서 https://github.com/sahilchaddha/node-rtsp-recorder/issues/9
이 github의 이슈를 보면 라이브러리의 코드 중
Recoder.js 의 getChildProcess & killStrea 의 수정하라는 글( https://github.com/sahilchaddha/node-rtsp-recorder/issues/9#issuecomment-587714516)과
GETExtenstion에서의 video return을 mp4 대신 .mvo 로 하라는 글(https://github.com/sahilchaddha/node-rtsp-recorder/issues/9#issuecomment-855291247)이 있었다.
우선 mvo같은 경우에는 왜인지 모르지만 되지 않았고, getChildProcess & killStream을 변경하라는 글을 적용하니 실행은 되었다. (하지만 이 같은 경우 영상 초반이 멈추어있다 재생되는 이슈가 있었다. 아무래도 스트림을 끊고 새로 받아오는 과정에서 초반 읽어오는데 걸리는 시간 때문이 그런거 같다.)
그래서 생각을 해보니 굳이 child_process를 사용할 거 같으면 ffmeg 사이트를 찾아봐서 직접 child_process를 작성해야되겠다고 느꼈다.