반응형




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. 개요



DVR 만들기 프로젝트가 끝을 보이고 있다. 본 편은 아주 간단히 끝날 수 있는 내용이다. 1편 ~ 6편 까지 천천히 잘 따라왔다면, 현재 DVR이 정상동작을 하고 있을 것으로 보인다.

요즘 출시하고 있는 대부분의 ip 카메라는 [그림1]의 좌측 상단과 같이 영상에 시간이 삽입되어 송출된다.


[그림1] 시간과 날짜가 영상에 삽입된 IP 카메라의 화면[그림1] 시간과 날짜가 영상에 삽입된 IP 카메라의 화면



 


영상에 시간과 날짜가 포함되는 기능은 CCTV에서 상당히 중요한 것이다. 파일명은 파일 탐색기에서 간단히 수정할 수 있다. 파일의 수정날짜 또한 손쉽게 수정이 가능하다. 열심히 CCTV의 영상을 녹화했는데 날짜와 시간의 데이터가 변조되었고 이 영상이 어떠한 사건의 증거라면 증거로서의 가치가 떨어지게 될 것이다. 6편에서 RTSP 스트리밍 영상을 FFmpeg를 이용하여 매 1분마다 1분단위로 저장하는 방법을 소개하면서 저장되는 파일명이 날짜와 시간으로 설정될 수 있도록 스크립트를 작성했다.

여기서, ipCam 의 영상인 경우 이미 시간이 삽입되어 있기 때문에 큰 문제가 발생하지 않지만, V4L2 로 받은 영상인 경우 영상에는 아무 정보가 기록되어 있지 않다. 따라서 본 편에서는 FFmpeg 를 이용한 영상파일 저장과정에서 날짜와 시간을 삽입하는 방법에 대해 설명 하려고 한다.



02. FFmpeg의 drawtext 필터



사실 6편의 FFmpeg 사용법에 본 내용이 추가되면 깔금할 것으로 보여 6편에 본 내용을 작성하려고 했다. 하지만, 6편은 이미 다양한 기술에 대한 설명으로 글이 많이 복잡하여 7편에 간단히 소개를 한다.

ffmpeg에는 다양한 필터들을 제공하고 있는데 그 중 drawtext라는 필터가 있다. 필터명 그대로 영상에 Text 를 추가하는 필터이다. FFmpeg에서 필터를 적용하기 위해서는 -vf 라는 옵션을 사용해야 한다. (vf 는 video filter 의 약자로 추정된다.)

여러개의 필터를 함께 적용하기 위해서는 -vf "필터1=xxx 필터2=yyyy 필터3=zzzz" 식으로 -vf 옵션은 한번만 사용하고, " 로 다수의 필터를 묶어준다.

6편에서 완성된 ffmpeg 명령어는 다음과 같다.


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


위의 명령어에 -vf 옵션을 사용하여 drawtext 필터를 적용할 것이다. 완성된 명령어는 다음과 같다.


ffmpeg -i "rtsp://192.168.219.112:8554/test.sdp" -vf drawtext="text='JunWrap_CAM1_Ext' %'{localtime\:%D}' %'{localtime\:%X}': fontcolor=white: fontsize=10: box=1: boxcolor=black@0.5: boxborderw=5: x=20: y=20" -t 60 -an $DATESTRING_CAM1


상당히 긴 옵션이지만, 차근차근 살펴보면 어려울 것이 없다.

"text=  ' 다음에는 적용될 문구를 적으면 된다. 'JunWrap_CAM1_Ext' 로 시작이 되었다. 말 그대로 해당 문구를 삽입하게 된다. 다음에 오는 %'{localtime\:%D}' %'{localtime\:%X}' 는 시스템의 날짜와 시간을 String 형태로 삽입하는 구문이다. 그냥 사용하면 된다. 이후에 오는 옵션은 Font 의 색상, 크기를 설정하는 옵션이고, 그 다음은 Box에 대한 옵션이다. 특히 boxcolor=black@0.5 라는 옵션은 black 색상의 배경을 가진 박스를 만들고, 투명도 0.5 를 적용하라는 뜻이다. 맨 마지막, x=20: y=20 부분은 drawtext 객체가 그려질 시작 위치를 나타내는 것이다. 영상의 좌측 상단을 (0, 0) 의 좌표로 보고 계산을 하는 것이다.




[그림2] drawtext 필터 적용 결과 영상[그림2] drawtext 필터 적용 결과 영상



[그림2]는 drawtext가 적용된 영상의 결과물이다. 정상적으로 잘 적용된 것을 확인할 수 있다.



03. 마무리



DVR을 만드는데 있어서 어려운 부분은 끝났다. 현 수준으로도 DVR의 기본 기능은 충분히 이용할 수 있는 수준이다. 다만, 리눅스 운영체제를 사용하고 있는 부분이어서 저장된 영상 파일을 확인하는 것이 조금 불편할 수 있다. 그래서, 다음 편에서는 윈도우와 리눅스의 디렉터리 공유를 할 수 있는 samba 설치방법과 사용방법에 대해서 포스팅을 하려고 한다. 

6편에서 설정한 녹화 경로를 samba 디렉터리로 설정을 하고, 윈도우에서 samba 디렉터리에 접근을 한다면, 언제 어디서든지 편리하게 녹화된 영상을 확인할 수 있을 것이다.


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 설정)

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



2018년 12월 5일
Kunttang

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

출처: http://blog.kunwoo.pe.kr/134 [Kunttang's Life]

출처: http://blog.kunwoo.pe.kr/134 [Kunttang's Life]


반응형
블로그 이미지

매깡

- 각종 문의는 메일로 해주세요. 메일: 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. 아날로그 영상의 스트리밍을 위한 설계



[그림1] 아날로그 CCTV 카메라[그림1] 아날로그 CCTV 카메라


1편에서 DVR을 위한 H/W 준비를 모두 마쳤다. V4L2(Video 4 Linux Version 2)를 통하여 아날로그 영상을 입력받아 VLC 플레이어로 영상을 출력하는 것 까지 확인이 되었으니, 다음 단계는 언제 어디서든지 영상을 실시간으로 확인할 수 있도록 스트리밍 서버를 구축하는 것이다.

[그림1]은 실제 JunWrap(http://www.junwrap.co.kr) 매장의 밖에 설치할 외부용 CCTV 카메라이다.

[그림2] JunWrap 네트워크 구성도[그림2] JunWrap 네트워크 구성도


[그림2]의 구성도에서 빨간색 원으로 표시한 카메라가 아날로그 카메라이다. ipCAM1 과 ipCAM2 인경우 RTSP 를 지원기 때문에 별도의 스트리밍을 구현할 필요가 없지만, 아날로그 카메라인 경우 서버에서 V4L2 로 영상의 디지털 변환 과정을 진행하고, 변환된 디지털 영상 파일을 스트리밍 할 수 있도록 구현해야 한다.

 

[그림3] 스트리밍 서버의 구성도[그림3] 스트리밍 서버의 구성도


[그림3]은 Analog CAM으로 부터 입력된 영상을 디지털화하여 Streaming 하는 Server의 구조를 그린 것이다. /dev/video0(V4L2)로 부터 입력된 영상을 VLC 플레이어를 통해 Streaming 하는 아주 간단한 아이디어이다. 다만, 스크립트로 스트리밍이 실행되어야 하기 때문에 GUI 기반의 VLC 플레이어가 아닌 콘솔 기반의 CVLC 를 사용하게 된다.

CVLC는 콘솔에서 Command로 실행해야 하는 구조이기 때문에 파라미터를 구해야 한다. 파라미터는 VLC에서 구할 수 있다.




02. CVLC를 위한 파라미터 추출



이미 본 포스팅의 1편에서 V4L2를 이용하여 /dev/video0의 영상을 VLC 플레이어를 통해 확인했었다. 그럼 이 영상을 CVLC에서 입력받아 스트리밍 할 수있도록 Command를 완성하면 된다. 참고로 VLC에는 미디어 스트리밍 기능이 포함되어 있다.

[그림4] VLC 디버그 메시지창 실행 #1[그림4] VLC 디버그 메시지창 실행 #1


[그림5] VLC 디버그 메시지창 실행 #2[그림5] VLC 디버그 메시지창 실행 #2


[그림4]와 [그림5]를 통해 VLC 실행과정의 디버그 메시지를 실시간으로 확인할 수 있다. [그림5]의 상세출력 부분을 2(디버그) 로 설정해야만 실행 커맨드를 확인할 수 있다.

메시지 창을 그대로 둔 채, VLC 창에서 Streaming 을 위한 설정을 진행해 본다.


[그림6] VLC의 스트림 방법 #1[그림6] VLC의 스트림 방법 #1


[그림7] VLC의 스트림 방법 #2[그림7] VLC의 스트림 방법 #2


[그림6]과 [그림7]의 과정을 통해, V4L2 영상의 입력부를 설정한다. 이 과정에서 입력에 대한 파라미터를 구할 수 있다. 

[그림7]에서 비디오 장치 이름을 /dev/video0(장치에 따라 달라질 수 있음)으로 설정하고, 카메라에 맞게 비디오 표준부를 설정한다.

[그림7]의 미디어열기 창에서 "추가 옵션 보기(M)"을 체크하게 되면 하단에 MRL옵션수정 항목이 표시되어진다. MRL 부분을 복사해 놓는다. 영상의 세부 설정을 위해서는 옵션수정항목도 필요로 하지만, MRL 만으로도 스트리밍을 위한 입력부 기본 준비가 끝난다.


[그림8] VLC의 스트림 방법 #3[그림8] VLC의 스트림 방법 #3


[그림7]에서 하단의 스트림 버튼을 누르게 되면, [그림8]과 같이 다음 화면으로 넘어가게 된다. 다음 버튼을 클릭하여 넘어간다.

[그림9] VLC의 스트림 방법 #4[그림9] VLC의 스트림 방법 #4




[그림9] 부터는 스트리밍을 위한 설정을 하는 화면이다. [그림7]과 [그림8]이 영상의 입력부이고, [그림9]부터는 영상 출력부를 설정하는 것이다.

새 목적지를 RTSP로 설정한다. RTSP(Real-Time Streaming Protocol)는 1편에서 간단히 소개가 되어있다. 참고하기 바란다. RTSP를 선택하고, 꼭 오른쪽의 추가 버튼을 클릭해야 한다.

[그림10] VLC의 스트림 방법 #5[그림10] VLC의 스트림 방법 #5


[그림10]은 RTSP를 위한 포트설정과 경로 설정을 하는 화면이다. 이 화면에서 잘 설정을 해야만, RTSP 의 URL을 완성시킬 수 있다.

필자는 포트를 8554로 설정하고, 경로를 /test.sdp 로 설정하였다. 외부에서 접속할 때, Router 단의 Port Forwarding 을 설정할 예정이기 때문에 RTSP의 표준 포트인 8554를 기본을 사용했다.

[그림11] VLC의 스트림 방법 #6[그림11] VLC의 스트림 방법 #6


[그림11]은 스트리밍 데이터의 영상코덱을 설정하는 화면이다. 필자는 H.264를 선택하였다.


[그림12] VLC의 스트림 방법 #7[그림12] VLC의 스트림 방법 #7


[그림12]와 같이 최종 스트림 문자열이 표시가 되어진다. "생성된 스트림 출력 문자열" 의 내용을 잘 복사해 놓는다. 스트림 버튼을 눌러 스트리밍을 시작해 본다.

[그림13] VLC의 스트림 방법 #8[그림13] VLC의 스트림 방법 #8


메시지 창을 살펴보게 되면, 각종 디버그 메시지들이 출력된다. [그림7]과 [그림12]에서 추출한 문자열이 메시지창에 잘 표시되고, 스트리밍이 잘 시작 되었는지를 확인한다. 문제 없이 스트리밍이 시작되었다면, CVLC를 위한 Command를 작성해 본다. 하기 Command는 필자가 완성한 cvlc command이다.





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


위의 커맨드를 콘솔에서 실행시켜 본다.

[그림14] CVLC 실행[그림14] CVLC 실행


[그림14]와 같이 빨간색 스트링 없이 실행이 되면 정상적으로 스트림이 시작 된 것이다.


03. 마무리



Analog 영상을 V4L2 를 통해 입력받고, CVLC를 통해 스트리밍 하는 방법까지 작성을 하였다. 다음 포스팅에서는 스트리밍 영상을 휴대폰에서 확인하는 방법에 대해서 작성할 예정이다.


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

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

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

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

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

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





2018년 11월 27일
Kunttang

반응형
블로그 이미지

매깡

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

,