반응형


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

,