반응형


00. 링크


[DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #1

[DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #2 - V4L2로 스트리밍 하기

[DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #3 - RTSP 클라이언트 

[DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #4 - CVLC 자동실행 

[DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #5 - DDNS와 Port Forwarding 설정

[DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #6 - ffmpeg와 crontab을 이용한 녹화 기능 구현  <= (현재글)

[DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #7 - 녹화 영상에 시간 넣기




01. 개요



5편까지는 스트리밍관련한 내용을 소개를 하였다. 하지만, 본 포스팅의 본질은 DVR 을 만드는 것이다. 지금까지 소개했던 모든 기능은 DVR을 위한 기반작업이라고 생각하면 된다.

이번 6편에서는 ffmpeg 와 crontab을 이용하여 스트리밍 영상의 녹화 방법을 기술할 예정이다. 2편, 4편의 내용은 아날로그 카메라의 영상을 RTSP 로 스트리밍하는 방법에 대해 소개한 내용이므로, RTSP가 지원되는 IP 카메라를 이용한 DVR을 만들기 위해 필자의 글을 참고하시는 분은 2편과 4편의 내용은 참고를 하지 않아도 된다.

1편 부터 현재까지의 과정을 잘 수행했다면, 현 시점 부터의 모든 입력 영상은 스트리밍(RTSP) 영상이다. 즉 모든 데이터는 디지털 데이터이다.


02. ffmpeg



ffmpeg 란 디지털 미디어파일(동영상, 음악, 사진)의 디코딩 또는 인코딩을 위해 다양한 기능을 제공하는 오픈소스 프로젝트이다. ffmpeg의 ff는 fast forward 를 의미한다. mpeg 는 MPEG 영상 표준화 그룹에서 유래했다고 한다.

우리가 사용하는 대부분의 동영상 플레이어들은 ffmpeg 기반으로 제작되었다. 즉, ffmpeg 가 LGPL 라이선스를 가지고 있는 오픈소스진영의 무료 프로젝트이지만, 만약 유료화한다면 그 시점부터 동영상을 감상하지 못하는 일이 발생할 수도 있다.(하지만, 오픈소스프로젝트는 그럴일이 거의 없으니 걱정 안해도 된다.)

ffmpeg에서는 다양한 기능들을 제공하지만, 본 포스팅에서는 ffmpeg의 미디어 포멧 변환 도구를 활용하여 스트리밍 영상을 h.264 형식의 mp4 동영상 파일로 저장하려고 한다.


[그림1] FFmpeg 로고[그림1] FFmpeg 로고


03. Crontab



Cron은 유닉스 혹은 리눅스 운영체제에서 사용하는 스케줄러이다. Crontab 은 Cron + Table의 조합으로 만들어진 이름이다.

Crontab을 이용하면 주어진 일정에 주기적으로 쉘 명령어들을 실행할 수 있다.




이미 4편에서 잠시 소개한 명령어이다.(4편에서는 주기적인 실행이 아닌, 부팅이 되면 자동 실행을 할 수 있는 @reboot 명령을 소개 했었다.)

본 포스팅에서는 Crontab 의 스케줄링 기능을 활용하여 1분 마다 미리 만들어 놓은 ffmpeg 스크립트(60초 녹화)를 실행하고, 하루에 한 번씩 특정 시간에 오래된 영상을 자동으로 지워주는 스크립트를 실행하는 방법을 소개할 예정이다.



04. 녹화


04-01. ffmpeg의 설치



필자의 DVR 만들기를 소개하는 포스팅은 Linux Mint 19 Tara 기반으로 작성되고 있다. 따라서 ffmpeg의 설치는 apt-get 을 활용하여 설치한다.


sudo apt-get install ffmpeg


리눅스의 터미널에 위와 같이 실행하면 ffmpeg 가 설치된다.

[그림2] FFmpeg 설치화면[그림2] FFmpeg 설치화면


04-02. RTSP 스트리밍 영상을 파일로 저장하는 방법



ffmpeg 를 사용하기 위해서는 사용 방법을 알아야 한다. ffmpeg 명령어에 옵션을 사용해서 원하는 영상을 녹화할 수 있다. 옵션에 대한 자세한 내용은 나무위키의 FFmpeg 4.4절을 참고하면 된다.

필자는 간단히 다음과 같은 명령어를 구성하였다.


ffmpeg -i "rtsp://192.168.219.112:8554/test.sdp" '/home/junwrap/smbroot/[test]Video1.mp4'


-i 옵션은 입력파일을 지정하는 옵션이다. -i 이후에 "rtsp://192.168.219.112:8554/test.sdp" 라는 스트링이 붙었으니, 스트리밍 영상을 입력으로 사용하겠다는 의미이다. 그 뒤에 따라 붙는 '/home/junwrap/smbroot/[test]Video1.mp4' 라는 스트링은 저장 파일을 지정한 것이다.

[그림3] ffmpeg를 이용하여 스트리밍 영상을 파일로 저장하고 있는 화면[그림3] ffmpeg를 이용하여 스트리밍 영상을 파일로 저장하고 있는 화면


약 40초간 녹화를 진행한 후 파일을 확인해 본다.




[그림4] 녹화 결과물[그림4] 녹화 결과물


[그림4] 와 같이 녹화가 잘 진행 된 것을 확인 할 수 있다.



04-03. 1분단위로 녹화를 하는 방법



스트리밍 영상이 파일로 저장되는 것 까지 확인을 했으니, 본격적으로 1분단위로 녹화를 하는 방법에 대해서 기술한다. CCTV 영상은 파일을 특정시간 단위로 분할하여 저장하는 것이 추후 확인하기도 좋고, 파일의 손상에 의한 녹화물 손실을 막을 수 있다.

ffmpeg 옵션 중에는 -t 옵션이 있다. 인코딩 시간을 초 단위로 지정하는 옵션이다. 하기와 같이 명령어를 수정하였다.


ffmpeg -i "rtsp://192.168.219.112:8554/test.sdp" -t 60 -an '/home/junwrap/smbroot/[test]Video1.mp4'


-an 옵션은 오디오를 끄는 옵션이다. CCTV 영상이기 때문에 오디오를 사용하지 않아 오디오를 Off 시켰다.

60초동안 인코딩이 잘 되고 종료되는지를 확인해 본다.


[그림5] 59.9초 녹화된 결과 로그[그림5] 59.9초 녹화된 결과 로그


[그림5] 와 같이 59.90초가 녹화된 것을 확인할 수 있다. 프레임 수에 따른 계산이기 때문에 정확히 60초가 나오지 않을 수 있다.


[그림6] 1분 동안 녹화된 파일의 사이즈[그림6] 1분 동안 녹화된 파일의 사이즈


[그림6]에서 보면 1분동안 녹화된 파일의 사이즈(480x320 30fps 기준)는 약 2MB 정도이다. 24시간 녹화시 약 3GB 정도의 용량이 필요한 것을 확인할 수 있다.(물론 움직임이 많거나, 주변 상황에 따라서 용량은 달라질 수 있다.)

컴퓨터를 구성할 때, 400GB 정도를 home 영역으로 잡고, 이 공간에 저장할 수 있게 구성할 예정이니 130일 이상의 영상을 저장할 수 있다.(다른 카메라의 녹화도 병행해야 하기 때문에 130일까지 저장하지는 않을 것이다.)



04-04. 매 1분 마다 영상 저장을 실행 하는 방법



04-03에서 1분 단위 녹화의 가능성을 확인했다. 매 1분 마다 녹화를 진행해야 하는데, 1분 마다 수행할 수 있도록 해당 명령어을 crontab에 지정하면 간단하지만 파일명이 같으면 안된다. 따라서, 파일명이 변경되는 쉘 스크립트를 작성해 본다. 이 스크립트가 crontab에 지정될 것이다.





  #!/bin/sh

   YEAR=$(date +\%Y)
   MON=$(date +\%m)
   DAY=$(date +\%d)
   HOUR=$(date +\%H)
   MIN=$(date +\%M)
   SEC=$(date +\%S)

   DATESTRING=/home/junwrap/smbroot/"(""$YEAR""$MON""$DAY"")"_"$HOUR"h"$MIN"m"$SEC"s".mp4"

   ffmpeg -i "rtsp://192.168.219.112:8554/test.sdp" -t 60 -an $DATESTRING



필자는 dvr.sh 라는 파일로 저장한 후 실행 권한을 주었다. 간단히 "sudo chmod 755 dvr.sh" 를 사용하면 된다. 위의 스크립트는 현재 시스템 시간 기준으로 "년, 월, 일, 시, 분, 초" 를 구하여, CCTV 영상의 파일명으로 사용하는 스크립트이다. 매 1분마다 새로운 파일명이 생성되어 영상이 저장될 것이다.

만들어진 스크립트를 crontab 에 등록한다.

crontab 에 등록하는 방법은 crontab -e 이다.


*/1 * * * * /home/junwrap/dvr.sh


필자는 crontab에 [그림7]과 같이 추가를 하였다. 매 1분마다 dvr.sh 를 실행하라는 뜻이다.


[그림7] crontab에 dvr.sh 스크립트 등록화면[그림7] crontab에 dvr.sh 스크립트 등록화면


여기서 crontab에 대해서 잠깐 설명하도록 한다.

crontab의 반복스케쥴링 형식은 하기와 같이 총 6개의 항목으로 되어있다.


*(1)
*(2) *(3) *(4) *(5) [명령](6)


(1) 시간의 분을 명기하는 자리이다. 0~59 의 숫자를 사용할 수 있고, */1 처럼 사용할 수 있다.
     */1의 의미는 1분마다 명령을 수행하라는 것이다.

(2) 시간의 시를 명기하는 자리이다. 0~23의 숫자를 사용할 수 있고, 분과 마찮가지로 */1 처럼 사용할 수 있다.

(3) 날짜의 일을 명기하는 자리이다. 1~31의 숫자를 사용할 수 있다.

(4) 날짜의 월을 명기하는 자리이다. 1~12의 숫자를 사용할 수 있다.

(5) 요일을 명기하는 자리이다. 0~7의 숫자를 사용할 수 있다.(0과 7은 일요일)

(6) (1 ~ 5) 의 스케줄에 맞게 실행할 스크립트 혹은 커맨드이다.


[그림8] 분 단위로 저장되고 있는 화면[그림8] 분 단위로 저장되고 있는 화면


[그림8] 처럼 1분 단위의 날짜, 시간 파일명으로 잘 저장되고 있다.


04-05. 오래된 영상 자동 삭제 방법



하드디스크의 용량은 제한적이기 때문에 영상을 무한히 저장할 수 없다. 따라서 특정 시일이 지난 영상은 자동으로 삭제해 주는 기능을 구현해야 한다. 간단히 find 명령어와 rm 명령어의 조합으로 파일 생성일 기준 원하는 기간 이전의 데이터를 삭제하는 명령어를 crontab에 등록하도록 한다.

find 명령어는 리눅스에서 파일을 찾는 명령어이다. find 명령어의 옵션 중 -mtime 라는 옵션이 있는데 시스템 시간 기준으로 mtime(일 단위) 전의 파일을 찾는 옵션이다.


find /home/junwrap/smbroot/ -mtime +3


위의 커맨드는 시스템 시간 기준 3일 이전의 데이터를 /home/junwrap 하위디렉터리로 검색하라는 명령어이다.




[그림9] /home/junwrap/smbroot/ 디렉터리의 파일 리스트[그림9] /home/junwrap/smbroot/ 디렉터리의 파일 리스트


포스팅을 하고 있는 현재 시간은 2018년 12월 5일 이다. [그림9]은 /home/junwrap/smbroot/ 디렉터리의 파일 리스트이다. cvlc.txt 파일만 2018년 11월 28일에 만들어진 파일이다. find 명령어에 -mtime 옵션을 사용하여 검색을 해 보도록 한다.


[그림10] find 검색 결과(mtime 옵션 사용)[그림10] find 검색 결과(mtime 옵션 사용)

[그림10]은 mtime 옵션을 사용하여 find 한 결과 화면이다. [그림9] 의 12월 5일 파일들을 제외한 현 시간(12월 5일) 기준 3일 이전의 데이터인 cvlc.txt 만을 결과 값으로 출력을 해 주고 있다.

좀 더 자세히 확인하고 싶으면 touch 명령어로 파일의 생성시간 조작을 하여 테스트를 해 보면 된다.


find 로 찾은 결과 파일들을 삭제해야 하는데 rm 명령어를 사용하면 된다. 다만, find 와 rm 명령어는 별개의 명령어이므로, find의 옵션 중 -exec 옵션을 사용한다. -exec 옵션은 find 로 찾은 결과 값을 실행할 명령어의 파라미터로 넘겨주는 옵션이다.


find /home/junwrap/smbroot/ -mtime +3 -exec rm {} \;


위의 명령을 사용하면 3일 이전에 생성된 파일들은 삭제가 될 것이다. 일 단위 기준이기 때문에 해당 명령을 crontab에는 하루에 한번 씩 작동하도록 등록한다. 필자는 매일 22시에 7일 전 데이터를 삭제하도록 crontab에 등록할 것이다.

위에서 했던 것 처럼 crontab -e 명령어로 crontab을 수정한다.


[그림11] crontab에 오래된 영상 삭제 스크립트 추가[그림11] crontab에 오래된 영상 삭제 스크립트 추가

[그림11]과 같이 crontab에 find와 rm 명령어의 조합을 추가하였다.





05. 마무리



본 편에서는 DVR 의 기본 기능에 대해 구현하는 방법을 소개하였다. 기본적으로 1분단위 파일 저장 방법, 날짜로 파일 명을 만드는 방법, 특정 시간이 지난 파일을 자동으로 삭제하는 방법 등을 가능한한 쉽게 설명을 하였다. 이젠 어느정도 DVR의 모습을 갖춰가고 있다. 하지만 아직 아쉬운 부분이 남아있다. 바로 영상에 삽입되는 시간정보인데, 아무리 파일명에 시간정보를 넣는다고 하더라도, 파일명은 쉽게 바꿀 수 있어 정확한 녹화의 날짜를 잃어버릴 위험이 있다. 따라서 다음 편에서는 ffmpeg 의 특정 옵션을 통해, 시스템 시간을 영상에 넣는 방법을 소개할 예정이다.


1편 링크 : ([DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #1)

2편 링크 : ([DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #2 - V4L2로 스트리밍 하기)

3편 링크 : ([DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #3 - RTSP 클라이언트)

4편 링크 : ([DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #4 - CVLC 자동실행)

5편 링크 : ([DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #5 - DDNS와 Port Forwarding 설정)

7편 링크 : ([DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #7 - 녹화 영상에 시간 넣기)



2018년 12월 5일
Kunttang




반응형
블로그 이미지

매깡

- 각종 문의는 메일로 해주세요. 메일: soriel01@nate.com

,
반응형


00. 링크


[DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #1

[DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #2 - V4L2로 스트리밍 하기

[DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #3 - RTSP 클라이언트 

[DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #4 - CVLC 자동실행 <= (현재글)

[DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #5 - DDNS와 Port Forwarding 설정

[DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #6 - ffmpeg와 crontab을 이용한 녹화 기능 구현

[DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #7 - 녹화 영상에 시간 넣기




01. 개요



2편(http://blog.kunwoo.pe.kr/130)에서 아날로그 캠으로 입력 받은 영상에 대해 RTSP 형식의 스트리밍을 하기 위한 CVLC 커맨드를 하기와 같이 완성 시켰다.



cvlc "v4l2:///dev/video0" --v4l2-input=0 --v4l2-standard=MN --live-caching=300 --sout=#transcode'{vcodec=h264,scale=자동,acodec=mpga,ab=128,channels=2,samplerate=44100}:rtp{sdp=rtsp://:8554/test.sdp}' --sout-keep


터미널에서 위의 커맨드를 실행한 후, 3편(http://blog.kunwoo.pe.kr/131)에서 소개한 방법으로 스트리밍 된 영상을 확인할 수 있었다.

이번 포스팅은 DDNS 와 Portforwarding 을 이용한 외부 접속관련하여 작성을 하려고 하였지만, 시스템을 정리하던 중 비중을 크게 두지 않았던 "cvlc 자동 실행" 관련하여 무한 삽질이 발생하여, 그 내용을 정리해 보고자 본 포스팅을 진행한다.


02. 리눅스(Linux Mint 19 Tara)에서 부팅 시 특정 스크립트 자동 실행 방법



윈도우에는 친절하게 시작프로그램이란 곳이 있어서, 윈도우 부팅과 동시에 실행하고 싶은 프로그램 혹은 배치파일이 있을 경우 시작프로그램에 추가를 하기만 하면 된다. 하지만, 리눅스에서는 부팅 시 프로그램 자동시작에 대해서 등록을 하기 위해서는 다양한 방법이 사용되어질 수 있고, 배포판마다 조금씩 다른 형태를 취하고 있다.




이러저러한 이유로 필자가 주로 많이 사용하는 방법은 crontab 을 이용하는 방법이다. 물론 crontab는 운영체제 부팅의 맨 마지막에 실행되는 것으로 부팅 중 어떠한 내용을 판단하여 실행할 내용이 있다면, crontab을 사용하면 안된다.

필자가 완성한 cvlc 커맨드는 부팅의 맨 마지막에 실행되어도 크게 문제가 없는 부분으로 간단하게 crontab을 사용하기로 결정한다.

[그림1] crontab 시작 명령어 등록 #1[그림1] crontab 시작 명령어 등록 #1


crontab 을 사용하는 방법은 아주 간단하다. -e 옵션을 통해서 원하는 명령을 적어놓고 저장을 하기만 하면 된다. "crontab -e" 를 터미널에서 실행한다.


[그림2] crontab 시작 명령어 등록 #2[그림2] crontab 시작 명령어 등록 #2


보통 crontab 을 처음 사용하는 컴퓨터에서는 crontab에서 사용할 에디터를 선택하는 화면이 먼저 나오게 되는데, 필자는 vim 을 선택하였다. 

crontab 을 Linux 유저들이 활용하는 이유는 어떠한 데이터 혹은 프로그램을 주기적으로 처리 또는 실행하기 위함이다. 따라서 다양한 형식과 옵션들이 있는데, 필자는 부팅 시 자동실행을 위해서 @reboot 라는 옵션을 사용했다.

[그림2]와 같이 @reboot 명령 을 적어놓으면, 부팅이 될 때마다, 해당 명령이 실행된다.

필자는 /home/junwrap/ 디렉터리에 video1Start.sh 라는 쉘스크립트를 작성해 놓았다.(video1Start.sh 는 위에서 완성한 cvlc 커맨드이다.)

[그림3] video1Start.sh[그림3] video1Start.sh


[그림3] 과 같이 쉘 스크립트를 작성하게 되면, 실행 권한을 줘야 하는데, 필자는 간단히 "sudo chmod 755 video1Start.sh" 명령으로 스크립트의 실행권한을 설정하였다.

[그림3] 에서 만들어진 스크립트가 잘 실행되는지 확인하고, RTSP 영상도 client에서 확인을 하였다. 컴퓨터의 재부팅을 통해, crontab 명령이 잘 이루어 졌는지 확인한다.





03. 문제발생 및 해결




03-01. crontab 디버깅


재부팅을 했는데, cvlc 를 통한 스트리밍이 전혀 되고 있질 않는다. 부팅 중 crontab 명령이 잘 이루어졌는지 /var/log/syslog 파일을 확인해 본다.


[그림4] /var/log/syslog 화면[그림4] /var/log/syslog 화면


syslog에 의하면 CRON이 /home/junwrap/video1Start.sh 을 잘 실행한 것으로 나온다. crontab 은 정상실행 된 것이다. crontab은 너무 단순해서 crontab 에서부터 잘못될 것이 크게 없다.

스크립트가 실행이 되었다면, 분명 vlc 프로세스가 살아있을 것이다. "ps -Af | grep vlc" 명령어로 확인해 본다.

[그림5] vlc 프로세스[그림5] vlc 프로세스


[그림5] 와 같이 vlc 프로세스가 잘 실행되어있다. 심지어 스크립트에 적어놓은 파라미터까지 잘 실행 된 것으로 보인다. 일단, 스트리밍이 되질 않고 있으니 프로세스를 kill(sudo kill 1736) 하여 vlc 프로세스를 죽이고, /home/junwrap/video1Start.sh 을 실행해 본다.

휴대폰에서 스트리밍 영상을 확인해 보니, 정상동작을 한다.

그렇다면 crontab 으로 video1Start.sh 을 실행하는 과정에서 어떠한 문제가 발생한 것으로 보인다. video1Start.sh 파일은 단순히 cvlc 에 파라미터를 넣어 실행한 스크립트이므로, vlc 단에서 디버깅이 이루어져야 한다.





03-02. vlc 디버깅



vlc의 디버깅을 위해서는 vlc 상에서 몇 가지 설정을 해 줘야 한다.

우선 X윈도우 상에서 vlc 를 실행한다.

VLC의 메뉴에서 [그림6]과 같이 도구->환경설정으로 진입한다.

[그림6] VLC 환경설정 진입[그림6] VLC 환경설정 진입


[그림7] VLC 세부 환경설정 진입방법[그림7] VLC 세부 환경설정 진입방법


[그림6]에서 환경설정에 진입을 하게되면, [그림7]과 같은 창이 뜨게 되어있는데, 왼쪽 하단의 설정보기에서 "전체" 를 선택하여 [그림8]과 같은 화면이 나오도록 진행한다.


[그림8] VLC의 기록도구[그림8] VLC의 기록도구


고급 환경설정에서 "고급->기록도구" 를 선택하면 파일 로거 설정이 오른쪽에 표시가 된다. "로그를 파일에 저장하기" 를 체크하고, 파일명(저장위치 및 파일명), 로그형식(텍스트), 상세출력(디버그)을 [그림8] 과 같이 설정하고, 오른쪽 하단의 저장버튼을 클릭한다.

[그림6][그림7][그림8] 의 순서대로 설정을 하면, vlc(cvlc)에 대한 모든 기록이 설정한 위치에 파일로 저장된다.

위와 같이 설정이 끝났으면, 재부팅을 진행 해 본다. 부팅이 완료 되었을 때, vlc의 로그를 열어본다.




[그림9] vlc error[그림9] vlc error


기록된 vlc의 로그를 확인해 보니, 범인이 포착되었다. v4l2 를 실행하기 위해, video 장치를 Open 하게 되는데, 이때, 권한문제로 /dev/video1 을 open 하지 못한다는 에러가 포착된 것이다.

로그를 살펴본 결과 문제의 증상이 딱 맞아 떨어진다. vlc 프로세스는 살아있지만, rtsp client 에서는 영상을 확인할 수 없는 현상이다. 

crontab 으로 cvlc의 실행까진 정상적이었지만, cvlc의 파라미터를 적용하는데 있어서, /dev/video1 을 Open 하지 못하니 rtsp 로 스트리밍할 데이터가 없었던 것이다.


03-03. /dev/video 의 권한설정(문제해결)



다행히도, permission 문제는 /dev/video1 의 권한을 살펴보면 쉽게 해결 될 수 있는 문제이다.


[그림10] /dev/video0 의 소유 group 확인[그림10] /dev/video0 의 소유 group 확인


"ls -l /dev/video0" or "video1" 의 명령으로 /dev/video0 에 대한 소유그룹을 확인한다.

crontab 에서 cvlc를 실행하는 user가 "video" 라는 그룹에 속해있어야 할 것으로 보인다. 사실 crontab 은 root user 권한으로 실행되기 때문에 video 그룹에 속해있지 않아도 크게 문제가 되지 않는다. 하지만, vlc 는 root user 권한으로 실행되지 않는다. 따라서, [그림1]에서와 같이 junwrap 계정으로 로그인된 상태에서 sudo 없이 crontab -e 명령으로 추가를 했기 때문에 junwrap 권한으로 cvlc 가 실행되었을 것이다. 따라서, video 그룹에 junwrap user 를 등록해 주면 간단히 해결 될 것으로 보인다.

"sudo vi /etc/group" 명령으로 group 파일을 직접 수정해 본다.

[그림11] /etc/group[그림11] /etc/group


video 그룹을 찾아 junwrap user 를 추가해 준다. [그림11]은 video group 을 찾은 것이고, "video:x:44:junwrap" 으로 수정을 해야한다.





04. 마무리



문제를 알고나면 쉽게 해결될 문제이지만 문제를 알기 까지 찾아가는 과정이 무한 삽질의 연속이다. 문제를 찾아가는 과정을 순차적으로 차근차근 해 보게 되면 정답을 구할 수 있게 되지만, 그 과정 자체를 제대로 이해하지못하여 인터넷으로만 어떤 정보를 찾고자 한다면 문제가 해결되지 않을 가능성이 높다.

평소에 아무생각없이 사용했던 방법들이 갑자기 작동되지 않는다면 당황하기 마련이다. 이번 포스팅에 공유된 내용도 필자는 당연히 될 것이라고 생각했지만, cvlc와 /dev/video 조합에서의 권한문제로 crontab 에서는 문제가 발생한다는 것을 새로 알게 된 부분이다.

Linux 라는 OS 가 워낙 삽질을 많이해야만 내 것으로 만들 수 있는 것이다 보니, 필자가 Linux 를 만지는한 삽질은 계속될 것으로 보인다.

다음편에서는 3편에서 예고했던 것과 같이, 공유기에서 DDNS와 Portforwarding 설정으로 외부 접속이 가능할 수 있도록 설정하는 방법을 공유할 예정이다.


1편 링크 : ([DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #1)

2편 링크 : ([DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #2 - V4L2로 스트리밍 하기)

3편 링크 : ([DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #3 - RTSP 클라이언트)

5편 링크 : ([DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #5 - DDNS와 Port Forwarding 설정)

6편 링크 : ([DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #6 - ffmpeg와 crontab을 이용한 녹화 기능 구현)

7편 링크 : ([DVR] 집에서 놀고 있는 컴퓨터로 DVR을 만들어보자 #7 - 녹화 영상에 시간 넣기)


2018년 12월 02일
Kunttang








반응형
블로그 이미지

매깡

- 각종 문의는 메일로 해주세요. 메일: soriel01@nate.com

,