반응형


01. 견적



항상 그러했듯이 견적을 물어보기 위해 필자를 찾는 사람들은 가지고 있는 예산으로 만들 수 있는 최상의 컴퓨터를 원한다. 필자 역시, 견적을 작성해 줄 때 예산을 먼저 물어보고 그 예산에서의 최선을 찾아보려고 노력을 한다.

이번 견적은 회사 동료의 컴퓨터 문의로 시작이 되었다. 아들이 오버워치라는 게임을 하고 싶어하는데 집에 있는 컴퓨터로는 오버워치가 되질 않는다고 한다. 동료는 적당한 가격선에서 오버워치를 플레이할 수 있는 컴퓨터 견적을 원했다. 적당한 가격선이라 하면, 본체만 80만원대이고 키보드, 마우스, 스피커 포함 가격이다.

하기와 같이 부품을 구성하였다. 가격은 시시각각 변하기 때문에 표시하지 않았다.




[그림1] 80만원대 컴퓨터 견적(AMD Ryzen R5 2400G)[그림1] 80만원대 컴퓨터 견적(AMD Ryzen R5 2400G)


메인보드는 안정성이 뛰어나고, 필자가 AMD Ryzen 시스템에 계속 사용해 왔던 ASRock 사 제품으로 선정하였다. CPU는 4Core 8Threads 인 R5 2400G 를 선정하였다. 그리고, 대부분의 게임에서 중옵 이상의 성능을 발휘하기 위해 Geforce 1060 OC 3GB 모델로 선정하였다.



02. 부품의 선택



[그림2] 정품 AMD R5 2400G CPU박스[그림2] 정품 AMD R5 2400G CPU박스


[그림3] 정품 AMD R5 2400G CPU박스[그림3] 정품 AMD R5 2400G CPU박스


언제나 CPU 박스의 개봉은 즐겁다. Ryzen 시리즈 전부 박스포장은 동일하다. 씰을 조심스럽게 컷터칼로 칼집을 내어, 포장을 뜯는다.


[그림4] ASrock A320M-DGS[그림4] ASrock A320M-DGS




[그림5] ASrock A320M-DGS[그림5] ASrock A320M-DGS


메인보드는 ASRock A320M-DGS 모델이다. 별도의 그래픽카드를 장착할 예정이기 때문에 디스플레이 출력 포트는 많을 필요가 없다. 사실 동일 모델이라 하더라도, 디스플레이 출력을 위한 포트가 많아지면 조금씩 가격이 상승하기 때문에 외장 그래픽을 사용할 예정이라면 내장 포트가 1개만 있는 메인보드를 선택해도 나쁘지 않다.

후면의 포트를 잠시 살펴보면, [그림5] 기준 왼쪽부터 PS/2 포트, USB2.0 포트 2개, DVI 포트, USB 3.0 포트 4개, Gigabit Lan 포트, Audio 포트, 딱 일반적인 구성이다. USB 포트의 갯수도 모자르지 않을 만큼만 딱 있다.


[그림6] Transcend M.2 SSD 820S[그림6] Transcend M.2 SSD 820S


SSD 는 Transcend 사의 M.2 SSD 820S 240GB 모델로 선택하였다. SSD 가격이 많이 떨어져 240GB 를 선택해도 작년의 128GB 모델 보다 저렴히 구입할 수 있다.


[그림7] 삼성 PC4 2400T 8GB 메모리[그림7] 삼성 PC4 2400T 8GB 메모리


메모리는 DDR4 8GB 단일 메모리로 구성을 하였다. 내장 그래픽을 사용할 경우 듀얼채널의 효과가 크지만, 외장 그래픽을 사용할 경우 싱글채널과 듀얼채널의 성능상 체감을 사용자가 크게 느끼지 못한다. 따라서, 추후 확장을 위해 8GB 단일 메모리로 결정하였다.


[그림8] 메인보드 조립[그림8] 메인보드 조립


메인보드에 각종 부품을 위치 시켜 조립을 하였다. 이 상태로 문제가 없는지를 확인하기 위한 누드테스트를 진행한다. 당연히 아무 문제가 없다. 요즘은 컴퓨터 부품의 품질이 좋아져서 누드테스트에서 실패하는 경우가 거의 없다. 하지만, 누드테스트를 진행하지 않은 경우 문제가 생겼었다. 그래서 필자는 귀찮아도 꼭 누드테스트를 진행하는 편이다.




[그림9] 파워 AONE사의 STORM 600W(80PLUS Standard)[그림9] 파워 AONE사의 STORM 600W(80PLUS Standard)


파워는 정격 600W 제품으로 선정하였다. 외장 그래픽도 있고, 게이밍 컴퓨터이다 보니 안정적인 파워가 필요하다. 따라서 80Plus 인증받은 제품으로 선정하였다.


[그림10] 대양케이스 LUCIO 블랙 RING 화이트 LED


케이스는 대양케이스사의 미들타워를 선택하였다. 파워가 하단에 위치하는 케이스로 배선 정리를 아주 깔끔하게 할 수 있는 케이스이다. 전면만 강화유리이고, 측면은 아크릴이다.

여기 까지는 부품에 대해서 간략히 설명을 하였다. 지난 포스팅에서 이미 자세하게 다루었던 부품들이기 때문에 간단간단하게 설명을 하였다. 위에 소개된 부품에 대해서 좀 더 자세한 내용을 살펴보고 싶으면 하기 링크를 참고하면 된다.


- CPU, 메인보드, SSD, 파워 상세설명 링크:
    [AMD] 교회 행정실 사무용 컴퓨터 AMD 라이젠 R3 2200G(http://blog.kunwoo.pe.kr/93)


- 케이스, 파워 상세설명 링크:
    [AMD] 광고 디자인 용도 컴퓨터 조립기 (RYZEN R5 2600)(http://blog.kunwoo.pe.kr/128)


- M.2 Sata 에 대한 설명 및 Ryzen 라인업에 대한 설명
    [AMD] 실사 출력 디자인 용도 컴퓨터 조립기 (RYZEN R7 2700)(http://blog.kunwoo.pe.kr/85)



[그림11] Colorful Geforce GTX1060 토마호크 OC D5 3GB 박스[그림11] Colorful Geforce GTX1060 토마호크 OC D5 3GB 박스


그래픽카드는 Colorful 사의 Geforce GTX 1060 OC 3GB 모델로 선택하였다. 그래픽 카드에 대해서는 포스팅한 적이 없었기 때문에 몇 장의 사진을 더 공유하도록 한다.


[그림12] Colorful Geforce GTX1060 토마호크 OC D5 3GB 개봉[그림12] Colorful Geforce GTX1060 토마호크 OC D5 3GB 개봉


아주 고가의 그래픽 카드는 아니지만, 중급 이상의 그래픽카드로 박스 패키지부터 꼼꼼하게 잘 되어 있다. 묵직한 그래픽카드가 튼튼한 박스에 잘 포장 되어 있는 모습을 살펴볼 수 있다.





[그림13] Colorful Geforce GTX1060 토마호크 OC D5 3GB 전면 모습[그림13] Colorful Geforce GTX1060 토마호크 OC D5 3GB 전면 모습


[그림13]과 같이 듀얼팬으로 구성되어 있다. 아무래도 고사양 게임을 소화해야하기 때문에 발열에 특히 신경을 쓴 것으로 보인다.


[그림14] Colorful Geforce GTX1060 토마호크 OC D5 3GB 디스플레이 출력포트[그림14] Colorful Geforce GTX1060 토마호크 OC D5 3GB 디스플레이 출력포트


컬러풀 Geforce GTX1060 은 총 4개의 디스플레이 출력포트를 가지고 있다. 왼쪽부터 DP, HDMI, DVI 순이다.


[그림15] Colorful Geforce GTX1060 토마호크 OC D5 3GB 후면[그림15] Colorful Geforce GTX1060 토마호크 OC D5 3GB 후면


그래픽카드의 후면이다. PCB 보호 및 냉각을 위한 백플레이트가 기본으로장착되어져 있다. 고급형 제품이란 부분을 어느정도 입증하는 사진이다.


[그림16] Colorful Geforce GTX1060 토마호크 OC D5 3GB 하단부[그림16] Colorful Geforce GTX1060 토마호크 OC D5 3GB 하단부


하단부 PCB 마감처리도 상당히 깔끔하게 되어 있다. PCB와 백플레이트의 간격 또한 일정하다.




[그림17] Colorful Geforce GTX1060 토마호크 OC D5 3GB 상단부와 히트파이프[그림17] Colorful Geforce GTX1060 토마호크 OC D5 3GB 상단부와 히트파이프


[그림17]은 그래픽카드의 상단부 모습이다. 히트파이프가 열 전도를 아주 잘 해줄 것으로 보인다. 전체적으로 아주 묵직하고, 무겁다.


[그림18] Colorful Geforce GTX1060 토마호크 OC D5 3GB 전원 6핀[그림18] Colorful Geforce GTX1060 토마호크 OC D5 3GB 전원 6핀

그래픽카드 보조전원은 6핀을 사용하고 있다. 파워를 600W 급으로 선택을 하였으니, 기본적으로 6핀이 포함되어 있다. 크게 문제될 것이 없는 부분이다. 최근에 출시하고 있는 고성능 그래픽카드는 8핀 듀얼(총 16핀)로 구성되어 있다.



03. 조립



[그림19] 측면부 배선정리[그림19] 측면부 배선정리


다른 조립기와 마찮가지로 측면부 배선정리를 아주 깔끔하게 완료 하였다. 보이지 않는 부분까지 깔끔한 배선 정리는 조립의 기본이다.


[그림20] 메인 배선정리[그림20] 메인 배선정리


대양케이스의 Lucio 케이스는 하단 파워부의 마감 처리가 되어있지 않아, 잘못 배선정리를 하게되면 배선이 상당히 지저분해 질 수 있다. 하지만, 필자는 아주 깔끔하게 배선정리를 완료 하였다. 배선정리는 쿨링성능에 영향을 많이 주는 부분이므로, 최대한 깔끔하게 하는 것이 중요하다.




[그림21] 조립 완료[그림21] 조립 완료


조립이 완료된 사진이다. 전면의 화이트 Ring 쿨링팬이 아주 멋있다. 웬지 쿨링이 아주 잘 될 것처럼 보인다.


[그림22] 4 Core 8 Threads[그림22] 4 Core 8 Threads


윈도우를 설치하고, 시스템 정보를 확인해 보았다. 2400G의 4 Core 8 Threads 가 잘 동작하는 것을 확인할 수 있었다.



04. 마무리



최근 필자에게 컴퓨터 견적이 들어오면, 대부분 Ryzen 으로 추천을 해 주고 있다. 지난 8월부터 현재까지 Ryzen R3-2200G, R5-2400G, R5-2600, R7-2700 시스템을 조립해 보았다. 일부 커뮤니티에서는 아직까지 AMD 시스템이 불안정하다고 하고는 있으나 필자는 크게 불안정하다는 느낌을 받지 못하였다. 디자인용부터 시작해서 행정용, 게임용으로 만들어진 컴퓨터가 4개월이 지난 현재까지도 아무런 문제없이 동작하고 있다면 하드웨어 안정성은 어느정도 확보가 된 것이다. 특히 Radeon Vega Graphics 가 내장된 2200G와 2400G 모델인 경우 그린스크린 문제가 심각하다고 하는데, 현재까지 2200G 5대정도 행정용으로 내장그래픽을 활성화 하여 납품된 컴퓨터에 아무 문제가 없다. 또한 필자가 잠시 테스트를 위해 2200G와 2400G 모델에 몇 몇 게임을 설치하여 내장그래픽으로 플레이를 몇 시간 동안 해 보았으나, 크게 문제가 되는 부분을 찾지는 못하였다.




회사 동료는 컴퓨터를 집에 설치하고 게임을 해 보았다고 한다. 오버워치 풀옵션으로 큰 불편함 없이 잘 플레이가 된다고 한다. 70만원대 컴퓨터로 Ryzen-2400G + GTX1060 조합은 가성비 최고의 게이밍 컴퓨터인 것 같다.


2018년 12월 10일
Kunttang



반응형
블로그 이미지

매깡

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

,
반응형



01. 개요



컴퓨터에서 사용하는 운영체제의 종류는 많다. 대부분의 컴퓨터를 사용하는 사용자들은 Microsoft Windows 계열의 운영체제를 사용한다. 


 



Statcounter GlobalStats(http://gs.statcounter.com)의 2017년 11월 ~ 2018년 11월 Operating System Market Share 데이터를 보면 Windows 계열의 운영체제가 81.09% 의 점유율을 차지하고 있다.


[그림1] Statcounter GlobalStats(http://gs.statcounter.com)의 2017년 11월 ~ 2018년 11월 Operating System Market Share 데이터[그림1] Statcounter GlobalStats(http://gs.statcounter.com)의 2017년 11월 ~ 2018년 11월 Operating System Market Share 데이터


아무리 Apple 사의 시스템이 강세를 보이고 있다하더라도, MS-DOS 시절부터 오랫동안 자리를 차지하고 있던 MS의 OS(Operating System) 점유율은 쉽게 깨질 줄을 모르고 있다.


[그림2] Statista(https://www.statista.com/statistics/915085/global-server-share-by-os/) Share of the global server market by operating system in the first half of 2018[그림2] Statista(https://www.statista.com/statistics/915085/global-server-share-by-os/) Share of the global server market by operating system in the first half of 2018


[그림2]는 2018년 반기 동안의 Server 운영체제 점유율을 나타내는 그래프이다. [그림1] 과 [그림2]의 조사기관이 다르긴하지만, 참고자료정도의 의미로 생각하면 된다. [그림2]의 데이터와 같이 서버 운영체제의 점유율 역시 MS Windows 가 71.9% 로 압도적으로 높다.

하지만, 데스크톱 운영체제 점유율[그림1] 대비 서버운영체제 점유율[그리2]을 살펴보면, 윈도우 다음으로 Linux OS(1.58% -> 12.9%) 가 서버 운영체제로 많이 사용됨을 확인할 수 있다.




Linux 운영체제는 무료로 제공되는 운영체제로 수많은 배포판이 존재하고, 대표적으로 레드햇 계열과 데비안 계열로 구분된다.(물론 Unix 의 무료버전인 BSD 나 기타 등등의 배포판들이 많이 존재하지만, 많이 사용하는 계열은 레드햇과 데비안 계열이다.)

서버 운영체제로 Linux 를 선택하게되었을 때의 가장 큰 장점은 운영체제 유지보수 비용이 발생하지 않는다는 것이다. 다만, 유지보수를 직접해야하며, 각종 보안관련 문제로의 위험을 감수해야한다. 그래서 대형 서버를 운용하는 곳에서는 지속적인 유지보수를 받을 수 있는 Windows 계열의 운영체제를 사용하게 되고, 소규모 서버를 운용하는 곳에서는 리눅스 계열을 사용하게 된다.

리눅스를 사용했을 때의 가장 큰 장점은 터미널로 빠르게 서버를 관리할 수 있다는 것이다. 물론, Windows 계열도 파워쉘같은 콘솔을 제공하고 있지만, 리눅스의 터미널만큼 강력하지는 않다.

리눅스를 설치하고, 원격으로 리눅스가 설치된 컴퓨터에 접속하기 위해서는 ssh(Secure SHell) 라는 Server 데몬이 설치되어 있어야 한다. 이번 포스팅에서는 데비안 배포판 계열 중 하나인 Linux Mint 에 SSH 설치하는 방법을 공유하려고 한다.



02. Openssh-server 설치



본래, SSH(Secure Shell)은 Unix 에서 사용하기 위해 Tatu Ylönen 가 개발했던 상용 소프트웨어이다. 이러한 상용 소프트웨어를 BSD 에서 사용하기 위해 1999년에 OpenBSD팀에 의해 개발된 SSH가 Openssh 이다. 따라서, Linux 운영체제에서 SSH를 사용하기 위해서는 Openssh 를 설치해야 한다.


[그림3] openssh-server 설치 #1[그림3] openssh-server 설치 #1


터미널을 열고, apt-get install 을 이용하여 openssh-server 패키지를 설치한다.


sudo apt-get install openssh-server




[그림4] openssh-server 설치 #2[그림4] openssh-server 설치 #2


[그림4] 는 openssh-server 가 설치되고 있는 화면이다. Linux Mint 를 정상적으로 설치하였다면, openssh-server 패키지는 별 어려움 없이 설치될 것이다.


[그림5] openssh-server 설정 #1[그림5] openssh-server 설정 #1


openssh-server 를 설치한 후에 /etc/ssh/sshd_config 파일에서 ssh의 각종 설정을 할 수 있다. 기본으로 사용해도 되지만, 필자인 경우 보안상 이유로 포트를 수정하여 사용하고 있다. ssh의 기본 포트는 22번인데, 22번 포트가 SSH로 잘 알려진 포트이다 보니, 각종 공격으로부터 자유롭지가 않다. 따라서, 22번 포트를 다른 포트로 수정하여 사용하는 것을 권장한다.


[그림6] openssh-server 설정 #2[그림6] openssh-server 설정 #2


[그림6]은 /etc/ssh/sshd_config 파일의 내용이다. 설정 내용 중 가장 처음에 보이는 내용이 Port 설정 부분이다. 라인의 맨 첫 부분에 # 이 붙어있으면 주석처리 된 것이다. 별도의 포트를 설정하지 않으면 22번을 기본으로 사용하겠다는 의미이다. 따라서, #Port 22 로 되어 있는 부분에서 #을 삭제하고 Port 122 이런식으로 수정을 한다. 그럼 ssh는 122번 포트로 작동을 할 것이다.


[그림7] ssh 서비스 재시작[그림7] ssh 서비스 재시작




/etc/ssh/sshd_config 를 수정하였다면, Linux System 을 재부팅 하거나, ssh 서비스를 재시작 해야 한다. ssh 서비스를 재시작 하는 방법은 [그림7]과 같다.


sudo /etc/init.d/ssh restart



03. SSH 접속(Tera Term 이용)



윈도우에서 리눅스의 SSH로 접속하는 방법은 여러가지가 있지만, 대표적인 것이 Terminal Emulator 를 사용하는 것이다. 주로 많이 사용하는 무료 Terminal EmulatorPuttyTeraterm 이 있다. 필자는 Putty 보다는 Teraterm 을 좋아하기 때문에 본 포스팅에서는 Teraterm 을 설치하고, ssh 접속하는 방법을 공유한다.


[그림8] Teraterm 홈페이지[그림8] Teraterm 홈페이지


[그림8]은 Teraterm Homepage(http://ttssh2.osdn.jp) 이다. Teraterm 은 일본의 테라시니 타카시(寺西 高)가 개발한 오픈소스 단말 에뮬레이터로 일본 도메인을 가지고 있다. 텍스트기반의 아주 단순한 홈페이지이다.

[Download] 링크를 눌러 Teraterm 다운로드 페이지로 진입을 한다.


[그림9] Teraterm 다운로드 페이지[그림9] Teraterm 다운로드 페이지


현재(2018년 12월 09일) 최신 릴리즈는 4.101 버전이다. 필자는 윈도우에 프로그램을 설치하는 것을 별로 좋아하지 않기 때문에 미설치 버전인 zip 파일을 다운로드 받았다.


[그림10] Teraterm 실행파일[그림10] Teraterm 실행파일


Teraterm 의 실행은 [그림10]과 같이 ttermpro 파일을 실행하면 된다.


[그림11] Teraterm 실행 및 ssh 접속[그림11] Teraterm 실행 및 ssh 접속


Teraterm 을 실행하고, 호스트(T) 에 리눅스 컴퓨터의 IP 를 입력한다.(참고로 리눅스에서 ip를 확인하는 방법은 ifconfig 명령어를 이용하면 된다.) TCP 포트(P)에 [그림6]에서 설정한 포트를 입력하면 된다. 별도의 설정이 없었다면 22번을 사용하면 된다.


 



[그림12] ssh 처음 접속(보안경고)[그림12] ssh 처음 접속(보안경고)


SSH에 처음 접속을 하게 되면, [그림12]와 같이 보안 경고 창이 뜨게 된다. 계속을 누르면 Known-host 목록에 sha256 키를 추가하게 된다.(다음 접속 부터는 보안 경고 창이 뜨질 않는다.)


[그림13] ssh 로그인[그림13] ssh 로그인


[그림13]과 같이 ID/PW 를 입력하고, 확인 버튼을 클릭한다.


[그림14] SSH 접속 성공 화면[그림14] SSH 접속 성공 화면


[그림14]와 같이 터미널을 사용할 수 있으면 접속이 성공된 것이다. 이젠 리눅스 컴퓨터의 모니터 없이도 원격으로 리눅스컴퓨터를 조정할 수 있게 되었다.





04. 마무리



필자는 수년간 리눅스 컴퓨터를 메인으로 사용해 왔다. 현재 회사에서도 메인컴퓨터로 Ubuntu 16.04 LTS 를 사용하고 있다. 그만큼 필자에게는 친숙한 환경인데, 최근 홈 서버의 백업 서버를 구축하면서 아무 생각없이 ssh를 설치하는데 설치하는 과정을 포스팅해보면 좋을 것 같아 포스팅을 해 본 것이다. 리눅스를 자주 사용하는 사용자들에게는 아주 간단한 방법의 설치이지만, 리눅스를 처음 접하는 사람들은 어려울 수도 있는 부분이다.

필자는 데비안 계열(우분투, 리눅스민트)의 리눅스 설치/사용법에 대해 포스팅을 준비하고 있다. 리눅스를 잘 모르는 사람들도 따라하기 쉽게 포스팅을 할 예정이다.

윈도우 환경보다 새로운 환경을 구성하고 싶은 사용자들은 리눅스를 한번 선택해 보는 것도 좋은 방법 중에 하나일 것이다.


2018년 12월 9일
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. 개요



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



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



1편 ~ 4편 에 소개한 것처럼 아날로그 영상을 RTSP 로 스트리밍 할 수 있게 되었다. 하지만, 실시간 감시 시스템을 잘 만들어 놓고서는 외부에서 접속을 하지 못하는 상황이 발생된다면, 반쪽짜리 감시시스템이 될 것이다. 따라서 본 포스팅에서는 공유기의 DDNS와 Port Forwarding 기능을 통해 외부에서도 휴대폰이나 컴퓨터로 CCTV 영상을 실시간으로 감시할 수 있도록 하는 방법을 공유하려고 한다. 단, 다음과 같은 전제조건이 있다.


1. DDNS 설정이 가능한 공유기(필자는 iptime 공유기를 이용하였다.)

2. Port Forwarding 설정이 가능한 공유기(대부분의 공유기가 지원을 한다.)

3. Internet 모뎀 뒷편에 설치된 공유기(Internet 모뎀은 DHCP를 통해 꼭!! 공인 ip 를 받아와야 한다.)


[그림1] Junwrap 네트워크 구성도[그림1] Junwrap 네트워크 구성도


[그림1]의 빨간색 박스 부분의 모양처럼 공유기가 위치해 있어야 한다. 


02. DDNS



사람들은 전 세계적으로 인터넷이라는 거대한 네트워크의 집합을 사용하게 된다. 이 네트워크에 참여를 하기 위해서는 IP 주소가 필요하다. 하지만, "255.255.255.255" 형식의 IPv4 모델은 현 시대에서는 ip주소의 부족 현상을 갖게 만든다. IPv4 기술이 1980년대에 설계된 것이다 보니, 그 때에는 지금과 같은 ip부족 현상을 예측하지 못했을 것이 당연할 것이다.




통신기술의 발전은 1인당 1개이상의 ip를 보유하게 만들었다. 현 시대에 살고 있는 사람들은 ip가 무엇인지 몰라도 ip를 보유하게 되었는데 대표적인 예가 스마트폰이다.

ip 부족 현상을 해결하기 위해 ip의 A클래스 부분에 특수 용도 주소(10.0.0.0, 172.16.0.0/12, 192.168.0.0/16)를 만들어 사설 네트워크로 사용할 수 있게 설계를 하기도 하였다. 이 경우가 우리가 사용하고 있는 공유기이다. 사설 네트워크는 1개의 인터넷 라인을 다수의 인터넷 라인으로 분배하여 사용하게 만드는 방법이다. 우리는 분명 인터넷 1회선을 통신업체에 신청하였지만, 공유기라는 장비를 통해 여러대의 장비를 인터넷에 참여 시킬 수 있다.

이러한 사설 네트워크는 1회선으로 다수의 장비를 운용할 수 있게 하는 엄청난 장점을 가지고 있지만, 내부 네트워크에서 외부네트워크로 나가게 되면 결국 해당회선의 ip를 이용하기 때문에 서버를 운용하기에는 적합하지 않은 구조가 되어버린다.

[그림2] 네트워크의 구조[그림2] 네트워크의 구조


[그림2]에서 살펴보면, 인터넷 업체에서 각 건물로 광케이블을 연결해 놓고, 건물에 각 호에서는 모뎀을 통해 공인 ip를 받아오는 구조가 된다. 이때, 모뎀 뒷단에 공유기를 연결하여 사설ip 영역을 구성하게 된다. 사설 ip 영역에서 인터넷의 사용은 가능하지만, 다른 곳에서 사설ip 영역의 특정 컴퓨터에 접근을 하기 위해서 외부에서는 참고할 수 있는 ip는 공인ip 뿐이 없다. 즉, 외부에서 [그림2] 의 192.168.0.4 컴퓨터에 접근을 시도하기 위해서는 211.205.43.2 라는 ip를 통해 들어와야한다는 것이다.

여기서 한 가지 문제가 발생한다. 101호에서 받는 공인 ip인 211.205.43.2 주소가 DHCP 동작에 의해 변경이 된다는 것이다. 부족한 ip 를 효율적으로 사용하기 위해 ISP 에서 주기적으로 ip 를 재할당하고 있는데 이렇게 되면 외부에서 찾아올 수 있는 주소가 바뀌게 되어 정상적으로 서버를 운용할 수 없게 되는 것이다.




이런 불편한 점을 해결하기 위해서 각 공유기를 개발하여 판매하는 업체에서는 DDNS(Dynamic Domain Name System) 라는 기능을 제공한다. DDNS 서비스는 공유기에 연결된 모뎀의 공인 IP를 공유기 업체의 sub 도메인에 연결시켜 주는 서비스이다. 연결만 해 주는 것이 아니라, 모뎀의 공인 IP 가 업데이트되었다는 것을 공유기가 인식하게 되면 공유기는 DDNS 서비스로 업데이트된 IP 를 알려주게되고, 서브도메인에 새로운 ip 를 업데이트 해 주게 된다. 따라서, DDNS의 도메인만 알고 있다면 외부에서 집의 공유기 까지의 연결이 가능해 지는 것이다.


[그림3] DDNS 의 간략 설명[그림3] DDNS 의 간략 설명


[그림3]은 DDNS를 설명하기 위해 간단히 그림으로 설명해 놓은 자료이다. 


1. 모뎀에서 211.205.43.2 ip를 통신회사로부터 받아와 공유기에 할당해 준다.

2. 공유기는 DDNS 서버에 kunttang 라는 이름의 공유기 ip는 211.205.43.2 라고 업데이트 요청을 한다.

3. DDNS 서버는 kunttang 는 211.205.43.2 ip가 연결되어있다고 DB에 저장한다.

   =======> 여기서 만약, 모뎀의 ip가 변경되면 공유기는 다시 2 ~ 3 과정을 진행하게 된다.

4. 어떤 외부 컴퓨터가 http://kunttang.iptime.org 를 입력한다.

5. 외부컴퓨터에 연결된 DNS 로부터 iptime.org 의 ip(142.111.22.11)주소를 응답받는다.

6. 142.111.22.11 주소로 요청한다.

7. DDNS 서버는 kunttang 의 서브도메인을 붙여 211.205.43.2 의 주소로 연결을 요청한다.



03. Port Forwarding



네트워크에서는 ip라는 주소를 제공하고 있지만, 실제 데이터의 이동 통로가 존재 한다. 이를 Port(포트)라고 한다. 필자가 포트를 설명하기 위해 설명하는 예가 있는데 바로 집이다.  "경기도 평택시 xxx동 aa번지" 라는 집에대한 주소가 있다면, 이 집에는 출입문이 1개 이상일 것이다. 주소가 ip가 되는 것이고, 건물의 문이 바로 포트가 되는 것이다.

네트워킹에서의 포트는 16bit Unsigned Integer형식으로 0~65535 까지 사용할 수 있다. 즉, ip 하나당 65535개의 포트가 존재한다는 것이다.

[그림2]에서 101호의 공인ip 211.205.43.2 는 0~65535 의 포트를 가지고 있는데 이는 공유기와 통신을 할 수 있는 65535개의 포트가 된다. 공유기에 연결된 사설 ip 를 가진 각 장치들도 65535개의 포트를 사용할 수 있게 된다.




Port Forwarding 이라는 기술을 사용하게 되면, 공인ip의 특정 포트와 사설ip 의 특정 포트를 연결시킬 수 있게 된다. 

예를들어 211.205.43.2 의 80포트를 통해 들어온 패킷을 192.168.0.3 의 9000번포트에 연결시켜놓게 되면 211.205.43.2:80 은 항상 192.168.0.3:9000 에 전달 되어지는 것이다.

DDNS와 Port Forwarding 을 적절히 이용하게 되면 집에서도 간단한 서버를 운용할 수 있게 되어진다.


[그림4] Port Forwarding[그림4] Port Forwarding


[그림4]은 Port Forwarding을 설명하기 위해 간단히 그림으로 설명해 놓은 자료이다. 


1. 외부에서 211.205.43.2 ip로 요청이 들어온다.

2. 모뎀은 공유기로 패킷을 전달한다.

3. 공유기는 포트를 확인하여, 공유기에 연결된 해당 기기로 패킷을 전달한다.
   ==> [그림4]에서 보면 80포트는 192.168.0.4:8080 으로 연결이 되어 있다.
   ==> 192.168.0.4 ip를 가진 기기의 8080포트로 패킷을 전달해주는 것이다.



04. 공유기 설정(DDNS 와 Port Forwarding)



대한민국에서 가장 많이 사용하고 있는 ipTime 공유기를 이용하여 DDNS 와 Port Forwarding 설정 방법을 설명하려고 한다. 위에서 설명한 DDNS 와 Port Forwarding 의 개념을 이해했다면 다른 공유기로도 충분히 설정할 수 있을 것이다.


[그림5] ipTime 관리도구 접속화면[그림5] ipTime 관리도구 접속화면


[그림5] 는 ipTime 의 관리도구 접속 화면이다. 별 다른 설정 없이 ipTime 공유기를 연결했다면, http://192.168.0.1 이 관리페이지 기본 주소이다.

관리도구 아이콘을 클릭한다.


[그림6] ipTime 공유기의 DDNS 설정화면[그림6] ipTime 공유기의 DDNS 설정화면


[그림6] 은 ipTime 관리페이지의 DDNS 설정 화면이다. 왼쪽 메뉴탐색기에서 "고급설정 -> 특수기능 -> DDNS 설정" 으로 진입 한다.

ipTime 공유기에서는 DDNS를 간편하게 등록할 수 있다. 사용하기 원하는 호스트 이름과, 사용자 ID(E-mail 주소)를 입력하게 되면 설정이 완료된다. 물론 호스트 이름은 다른 사람이 먼저 등록한 String 이라면 등록이 불가하다고 팝업이 표시된다.




정상 등록이 되면 접속상태에 정상등록이라고 표시가 된다. 아주 간단한 과정으로 DDNS 설정이 완료되었다.


[그림7] ipTime 공유기의 Port Forwarding 설정화면[그림7] ipTime 공유기의 Port Forwarding 설정화면


[그림7] 은 ipTime 관리페이지의 Port Forwarding 설정 화면이다. 왼쪽 메뉴탐색기에서 "고급설정 -> NAT/라우터 관리 -> 포트포워드 설정" 으로 진입 한다.

오른쪽 하단에 규칙을 설정하면 된다. [그림7]을 기반으로 설명해 본다.

1. test 라는 규칙이름을 추가한다.

2. 연결될 내부 IP를 지정한다.

3. 외부포트는 요청이 들어오는 포트이다.(18554로 설정하였다.)

4. 내부포트는 내부 IP에 요청할 포트이다.(8554로 설정하였다.)

  ==> 외부에서 나의 공인 IP의 18554 포트로 연결요청이 오면, 192.168.219.112:8554 로 연결한다.



05. 마무리





앞에 01~03 까지 이론적 설명은 아주 길고 어렵게 설명을 하였지만, 공유기에서의 설정은 허무할 정도로 너무 간단하다. 하지만, 기능의 의미를 모르면 아무리 좋은 것이라 하더라도 사용하질 못한다. 아직까지도 공유기를 사용하는 사용자들의 대부분은 공유기의 공장 출하 값을 기본으로 사용하는 경우가 대부분이다. 이럴 경우 보안에 아주 취약하기도 하지만, 비싼 돈을 지불하고 구입한 제품을 제대로 활용하지 못하는 경우이기도 하다.

필자는 DDNS를 등록하고, 카메라의 ip와 포트를 포트포워딩 설정을 통해 외부와의 연결을 설정하였다. 이젠 실시간 감시 설정은 모두 완료된 것이다.

다음 편에서는 ffmpeg와 crontab을 활용하여 1분단위로 끊어 스트리밍 영상을 녹화하는 방법에 대해 설명할 예정이다. 여기서, 블랙박스의 녹화기능 처럼 특정일이 지난 영상은 자동으로 삭제하는 방법도 함께 공유할 예정이다.


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

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

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

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

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

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


2018년 12월 3일
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

,
반응형


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편에서 V4L2와 CVLC를 이용하여 스트리밍 서버 구성을 완료 하였다. RTSP 서버 구성 방법을 자세히 알고 싶으신 분들은 1편2편을 먼저 참고하기 바란다.

본 포스팅에서는 VLC Player(컴퓨터)와 DafangCam - RTSP Player(안드로이드 모바일)을 이용하여 RTSP 영상을 재생하는 방법에 대해서 소개하려고 한다.

DVR 시스템까지는 필요 없고, 실시간 영상 확인 정도만 필요하다면, RTSP를 지원하는 ipCam 을 설치한 후 본 포스팅을 참고하면 된다.


02. 윈도우 기반에서 RTSP 영상 재생 방법



RTSP 영상은 RTSP 클라이언트 프로그램과, RTSP URL 정도만 알고 있다면 간단히 재생할 수 있다. 윈도우 기반의 RTSP 클라이언트 프로그램은 대표적으로 VLC 플레이어를 사용하면 된다. VLC 플레이어는 
http://www.videolan.org/ 홈페이지에서 다운로드 받을 수 있다.

[그림1] VLC media player 홈페이지[그림1] VLC media player 홈페이지


videolan.org 에 접속을 하게 되면 VLC 를 다운로드 받을 수 있는데, 자신의 운영체제에 맞게 다운로드를 받으면 된다.




[그림2] VLC 실행 후 RTSP 영상 재생하기 #1[그림2] VLC 실행 후 RTSP 영상 재생하기 #1


다운로드 받은 VLC 플레이어를 설치하고, 실행을 한다. 미디어 -> 네트워크 스트림 열기 를 클릭한다.


[그림3] VLC 실행 후 RTSP 영상 재생하기 #2[그림3] VLC 실행 후 RTSP 영상 재생하기 #2


[그림3]은 RTSP 주소를 설정하는 화면이다. RTSP 주소는 2편에서 실행한 cvlc 파라미터에서 확인할 수 있다. [그림3]의 하단부 터미널 화면을 보게 되면 마지막에 rtsp://:8554/test.sdp 부분이 있다. 이 부분을 서버의 ip 와 조합하여, rtsp://192.168.219.112:8554/test.sdp 라는 URL을 완성시키고, VLC 화면의 네트워크 주소 입력부에 입력을 한 후 재생을 누른다. 만약, RTSP를 지원하는 ipCAM 을 설치한 사용자라면, 보안이 설정된 URL 을 완성시켜야 한다. 보안이 설정된 URL 의 형식(ipCAM에서 id 와 password를 설정이 완료된 상태여야 한다.)은 다음과 같다.

rtsp://ID:Password@IP:Port/Path


[그림4] VLC 플레이어에서 RTSP 영상이 재생되는 화면[그림4] VLC 플레이어에서 RTSP 영상이 재생되는 화면


[그림4] 와 같이 VLC 플레이어에서 정상적으로 RTSP 영상이 재생되면 끝이다.




03. 안드로이드 기반에서 RTSP 영상 재생 방법



통신이 발달됨에 따라 대한민국에서는 스마트폰 하나만 있으면 언제 어디서든지 인터넷을 사용할 수 있게 되었다. 스마트폰에서 인터넷이 된다는 의미는 컴퓨터로 볼 수 있는 RTSP 영상을 스마트폰으로도 볼 수 있다는 것이다. 스마트폰에서 RTSP 영상을 보기 위해서는 컴퓨터(윈도우기반)에서 RTSP 영상을 재생 시켰던 것과 동일하게 RTSP 클라이언트 앱을 설치하면 된다.

필자는 안드로이드 기반의 스마트폰을 사용하고 있기 때문에 안드로이드에서 사용 가능한 RTSP 앱을 소개하려고 한다. iOS 기반의 스마트폰(아이폰) 유저들은 iOS 용 RTSP 플레이어를 설치한 후 URL 설정만 잘 하면 동일하게 RTSP 영상을 재생시킬 수 있을 것이다.

필자가 선택한, RTSP 플레이어는 DafangCam - RTSP Player 라는 앱이다. 필자가 DafangCam 앱을 선택한 이유는 무료 앱이면서 광고가 없는 앱이다. 또한, 화면 회전을 지원하여 가로 화면으로 영상을 확인할 수 있는 장점이 있다.

[그림5] DafangCam - RTSP Player 설치[그림5] DafangCam - RTSP Player 설치


플레이스토어에서 DafangCam 을 검색하여 설치를 진행한다.


[그림6] DafangCam - RTSP Player 설정 #1[그림6] DafangCam - RTSP Player 설정 #1




DafangCam - RTSP Player 를 실행하고 우측 하단에 + 버튼을 눌러 CAM을 등록(RTSP URL 등록)한다.


[그림7] DafangCam - RTSP Player 설정 #2[그림7] DafangCam - RTSP Player 설정 #2


캠 이름을 설정하고 RTSP URL 을 입력한 후 UPDATE 버튼을 누른다.

[그림8] DafangCam - RTSP Player 에서 영상 재생 화면[그림8] DafangCam - RTSP Player 에서 영상 재생 화면


추가된 캠을 선택하면, [그림8]과 같이 영상이 재생된다.


04. 마무리



본 포스팅에서는 RTSP 영상을 재생하는 방법에 대해서 확인해 보았다. 알고나면 쉬운 과정이지만, RTSP 영상을 재생하는 방법에 대해 모르고 있었다면 생각보다 많은 시간을 사용해야하는 부분 중에 하나이다. 특히 모바일에서 RTSP 영상을 재생하는 앱을 찾기 위해서는 여러 앱을 설치해 가면서 나에게 맞는 앱을 선택해야 하는데, 필자가 소개한 DafangCam 앱인 경우 간편하면서도 많은 장점을 가지고 있는 앱이다.




RTSP 영상을 확인하는 방법까지 알았지만, 여기서 큰 문제점이 한 가지가 있다. 바로 내부 네트워크 상에서만 실시간 영상을 확인할 수 있다는 것이다. 다음 편에서는 공유기에서 DDNS 설정을 통해 외부에서도 영상을 확인할 수 있는 방법에 대해서 소개하려고 한다.

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

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

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

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

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

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


2018년 11월 28일
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. 아날로그 영상의 스트리밍을 위한 설계



[그림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

,
반응형


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이란 무엇인가?



요즘은 어딜가든 CCTV가 설치되어있다. 길거리 혹은 실내에서 잘못된 행동을 하게 되면 그 행동이 고스란히 영상으로 기록이된다. 심지어 차량의 블랙박스에서 까지 나의 행동을 녹화하고 있으니 죄 짓고 살기 힘든 세상이다.

아무리 카메라가 좋아도 영상을 기록할 장치가 없다면 그 카메라의 역할은 실시간 감시뿐이 없다. 하지만, DVR 이라는 영상을 기록하는 장치가 카메라와 함께 운용된다면 하나의 감시 기록 시스템으로 확장하게 된다.




DVR은 Digital Video Recorder 의 약자로 말 그대로 녹화장치이다. 불과 10~20년전까지만 하더라도 녹화장치는 자기테이프 기록장치를 주로 사용하여, 관리자가 주기적으로 테이프를 교환해 주며 운용을 하였지만 최근에는 자기기록장치와 영상처리기술의 발달로 하드디스크가 내장된 DVR이라는 녹화기가 CCTV 시스템의 중심이 되었다.


02. DVR 시스템의 필요성



필자는 직장인으로 개인적으로 DVR 시스템의 필요성을 느끼지 못한다. 필자가 가지고 있는 DVR 시스템이라고 해 봤자 차량의 블랙박스가 전부이다.

하루는 친구가 운영하고 있는 자동차, 바이크 랩핑샵(http://www.junwrap.co.kr)에 놀러갔는데 친구의 차량에 심한 상처가 난 것을 발견하였다. 옆 식당에 온 손님이 문을 심하게 열어 발생한 상처로 추정되어지나 직접적인 증거가 없어 보상을 받을 방법이 없었다. 만약 상처가 난 차량이 친구가 운영하고 있는 샾에 방문한 손님 차량이라면 고스란히 친구가 보상을 해줘야 하는 상황이었다.

어찌어찌하여 DVR을 만들어 실시간 녹화를 하기로 결정하였다. 보안업체의 CCTV도 알아보았으나 월 20,000원정도의 유지비용이 발생하는 부분으로 비용절감을 위해 일단 만들어보기로 한다.


03. 환경



- 보안 업체의 월 20,000원 정도의 CCTV는 다음과 같은 구성으로 되어있다.

a. HD급 카메라(적외선 포함) 2대

b. DVR 1대

- 보안 업체에서 제공하는 CCTV는 다음과 같은 특징을 가지고 있다.

c. 모바일로 언제든지 CCTV를 확인할 수 있는 기능

d. 녹화




기타 동작감지라던지 소소한 추가 기능들이 있지만, 보안업체 CCTV의 대표적인 기능 위주로 개발을 해 보려고 한다.


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


[그림1]은 현재의 JunWrap(http://www.junwrap.co.kr) 네트워크환경에 Server와 CAM 을 추가한 구성도 이다. 이미 2년 전 JunWrap 을 개업했을 당시 네트워크 작업을 진행해 주었다. 기가비트 네트워크 환경을 구성하였기 때문에 내부 네트워크의 파일 공유속도는 엄청나게 빠르다. 다만, 현재까지 NAS 혹은 파일 서버의 역할을 하는 장비가 없었기 때문에 기가비트의 네트워크 환경을 제대로 이용할 기회가 없었을 뿐이다.

ipCAM1과 ipCAM2는 네트워크 기능이 포함된 실내 전용 카메라로 RTSP(Real-Time Streaming Protocol)가 내장된 카메라이다. 저조도에서는 적외선 광원이 자동으로 켜지게 되어 있어 밤의 영상도 확인이 가능하다. RTSP 로 인해 실시간 영상확인이 가능하다.

Analog CAM은 수년 전 저가 보안업체에서 사용하던 아날로그 Type의 실외용 카메라이다.


04. 서버 구성



ipCAM1과 ipCAM2는 RTSP가 내장되어있기 때문에 스트리밍을 위한 별도의 작업은 필요하지 않으나, AnalogCAM은 스트리밍을 위해 여러 작업이 동반되어야 한다. 일단, AnalogCAM 의 영상의 디지털화를 위한 캡쳐보드가 필요하고, 캡쳐보드를 구동하기 위한 컴퓨터가 필요하다. 


[그림2] 캡쳐보드(자이뷰 XV400 PCI)[그림2] 캡쳐보드(자이뷰 XV400 PCI)


캡쳐보드로는 자이뷰 XV400 PCI(XyVision)를 선택하였다. 사실 이 보드는 2000년대 중반부터 컴퓨터 DVR 시스템을 위한 필수보드로 아직까지도 판매가 되고 있는 보드이다. 새제품인 경우 4~5만원대의 가격을 가지고 있으나, 중고 1만원 대의 가격으로 구입을 할 수 있는 보드이다. 하지만, 이 보드에는 치명적인 단점이 2가지가 있다.




단점 1. PCI 방식이다. 이미 5~6년 전부터 메인보드에 PCI 슬롯을 가지고 있는 컴퓨터는 산업용 컴퓨터를 제외하고는 찾아보기 힘들다.

단점 2. 자이뷰 XV400 PCI 를 사용하기 위해서는 컴퓨터에 드라이버 설치 및 전용 DVR 프로그램을 설치해야하는데, Windows XP에 최적화가 되어있다.(Windows 7 32bit 까지 지원되긴 하지만, 매끄럽게 동작하질 않는다.)

만약 집에서 사용하지 않는 오래된 컴퓨터가 있다면, 단점 1과 2는 장점(?)이 되어버린다. 필자는 이미 사용하지 않는 오래된 컴퓨터로 서버를 준비해 놓았다. 여기까지는 정말 순조롭게 진행이 되었다.

www.xysystem.com 에 접속하여 전용 프로그램을 확인해 보니, 시리얼을 등록해야 사용할 수 있다고 한다. 졸지에 단점 3이 생기는 순간이었다. 시리얼은 별도로 인터넷을 통해 1~2만원대에 구입을 할 수 있지만, 필자는 단점 2로 인하여 구입하고 싶은 생각이 전혀 없었다.

일단, 윈도우 XP에 안정화가 되어있기 때문에 MS에서 지원조차 받지 못하는 운영체제를 서버로 운용하고 싶지 않았다.

[그림3] XV400 PCI의 메인칩(Conexant FUSION 878A)[그림3] XV400 PCI의 메인칩(Conexant FUSION 878A)


XV400 PCI 에 사용된 메인 칩을 확인해보니, Conexant Fusion 878A 를 사용하고 있었다. 리눅스를 사용한다면, 별도의 작업 없이 충분히 사용 가능할 것으로 예상이 되었다. 최근에 Release 된 데비안 계열의 리눅스에서는 V4L(Video4Linux)을 사용할 수 있다. V4L 은 리눅스에서 Video Capture 장치를 Load 하기 위한 드라이버와 API 들의 집합이다.

그래서 결정된 운영체제는 Linux Mint 19 Tara 64-bit Xfce 이다. Linux Mint 19 Tara 는 LTS(Long term support release)로 2023년 4월까지 지원이 가능한 리눅스 배포판이다. 서버 사양이 좋지 않으므로, 적은 리소스로 구동이 가능한 Xfce 로 결정을 하였다.

[그림4] 서버를 위한 컴퓨터 부품 가조립[그림4] 서버를 위한 컴퓨터 부품 가조립


창고에 정리해 놓은 부품들 중에 적합한 부품들을 하나하나 모아보았다. 일단, 창고에 오래 보관된 부품으로 메인보드 수은전지를 교체하고, 각 부품들을 가조립한 상태에서 확인을 해 보았다. 이미 창고에 들어가기 전에 정상 동작을 확인했던 부품이었기 때문에 문제없이 작동이 된다.

[그림5] 서버로 사용될 컴퓨터의 사양[그림5] 서버로 사용될 컴퓨터의 사양


골동품 중에 골동품이다. 하지만, 부품들의 상태가 좋아서 몇 년째 창고에 보관 중이었던 부품이다. Intel Dual-Core E6300 제품으로 윈도우 설치를 하여서는 정상적인 사용이 불가능할 정도의 사양이다. 메모리는 DDR2 2GByte + 1GByte 조합의 3GByte 로 구성을 하였고 하드디스크는 500GB 로 구성하였다. DVR 로 사용할 서버이기 때문에 하드디스크는 사용시간이 짧은 부품으로 장착을 하였다.




[그림6] 조립 완료 및 기가비트 랜카드와 캡쳐보드 사진[그림6] 조립 완료 및 기가비트 랜카드와 캡쳐보드 사진


창고에 있는 비교적 깨끗한 케이스를 꺼내어 조립을 완료하였다. 조립을 하다보니, 확인이 덜 된 부분이 있었는데 바로 이더넷의 지원 속도였다. ASUS P5KPL-AM SE 보드인 경우 10/100Mb 속도의 이더넷을 장착하고 있기 때문에 스트리밍과, 녹화의 기능을 수행하고, Samba 서버 역할을 하기위한 네트워크 대역폭으로는 부족한면이 있었다.

그래서, PCI-Ex 방식의 기가비트 카드를 추가하였다. 기가비트 랜카드의 리뷰는 하기 포스팅을 참고하기 바란다.

Coms PCIEx 기가비트 랜카드 리뷰Coms PCIEx 기가비트 랜카드 리뷰


[그림7] Power Loss 설정[그림7] Power Loss 설정


서버는 입력장치(키보드,마우스)와 모니터를 장착하지 않고 사용하기 때문에 건물의 전기부분에 문제가 발생 후 복구가 되었을 시 자동으로 켜지게 해야한다. 바이오스 셋업 화면에서 간단히 설정이 가능하다. Restore on AC Power Loss 항목을 Power On 으로 설정하면 전원이 입력됨과 동시에 자동으로 켜지게 된다.


[그림8] 리눅스 설치 완료 화면[그림8] 리눅스 설치 완료 화면


리눅스 민트 19 Tara 설치까지 완료된 화면이다. 이젠 DVR 구성을 위한 개발을 시작하면 된다.

[그림9] 캡쳐보드 테스트에 사용된 Minicube X7+ Android[그림9] 캡쳐보드 테스트에 사용된 Minicube X7+ Android




리눅스에서 캡쳐보드가 정상작동하는지 확인해 보기위해 RCA 케이블로 집에 있는 동영상 셋톱박스를 연결해 보았다. 불과 몇 년 전까지만 하더라도 RCA 출력이 되는 장비 몇 개는 쉽게 찾아볼 수 있었지만, 창고를 아무리 뒤적뒤적해도 RCA 출력을 위한 장비가 없었다. 다행스럽게도 딱 하나가 나왔는데 기본 HDMI 출력이지만 Display Menu 에서 PAL 및 NTSC 출력 설정을 통해 RCA 출력을 할 수 있는 셋톱박스를 찾게 되어 설정한 후 연결해 보았다.


[그림10] VLC 에서 캡쳐장치 열기[그림10] VLC 에서 캡쳐장치 열기


테스트를 위하여 VLC 플레이어에서 캡쳐장치를 열어보았다.


[그림11] VLC에서 인식된 캡쳐장치(/dev/video0)[그림11] VLC에서 인식된 캡쳐장치(/dev/video0)


VLC 플레이어에서 캡쳐장치가 정상적으로 인식되어 있는 것을 확인할 수 있었다. 재생 버튼을 눌러 영상이 표시되는지를 확인한다.


[그림12] VLC에 출력된 화면[그림12] VLC에 출력된 화면


정상적으로 VLC에 화면이 출력되었다. 셋톱박스에서 출력되는 비디오타입과 VLC의 설정이 정상적이지 못해 화면이 깔끔하지 못하지만, 캡쳐보드가 정상적으로 출력되는 것을 확인할 수 있다. 아날로그 카메라를 연결하여 확인해 봐야 할 것 같다.




05. 마무리



DVR 시스템을 개발하기 위한 모든 준비는 끝났다. 이젠 다음과 같은 기능을 구현하면 된다.

a. 서버 부팅과 동시에 녹화 시작
   - ipCAM1, ipCAM2, AnalogCAM

b. AnalogCAM 스트리밍(RTSP 구성)

c. Samba 설정

d. 1분단위로 끊어서 녹화하는 기능

e. 특정 시간이 지나면 자동으로 삭제되는 기능

f. 영상에 시스템 시간과 CAM 이름이 삽입되는 기능

이 모든 기능이 어떠한 코딩으로 이루어지는 것이 당연하겠지만, 필자는 쉘스크립트, 콘솔 프로그램, 시스템 설정을 통해 DVR 을 개발하려고 한다.

개발이라고 말하기 부끄러울만큼의 구성이지만, 위와 같은 간단한 기능을 코딩으로 개발하는 것보다 훨씬 간편할 것으로 예상된다.

다음 포스팅에서는 캡쳐보드로 입력된 AnalogCAM 영상의 스트리밍 방법을 작성할 예정이다.


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을 이용한 녹화 기능 구현)

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


2018년 11월 26일
Kunttang

반응형
블로그 이미지

매깡

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

,
반응형



송탄, 평택, 오산, 안성 지역 컴퓨터를 정직하게 판매 및 수리 합니다.


  부담갖지 마시고, 컴퓨터에 문제가 생겼거나 구입 문의를 하실 분들은 하기 연락처로 연락 부탁 드립니다.


   - 카톡: soriel02@naver.com

   - 전화: 010-6638-3257




01. 디자이너를 위한 컴퓨터 사양



컴퓨터 분야는 기술의 발전이 상당히 빠르다. 보통 3년 주기로 컴퓨터를 교체하게 되는데 최근에는 5년을 사용해도 크게 문제 없는 컴퓨터들이 많다. 하지만, 이러한 사양에 아주 민감한 분야가 있는데 바로 디자인 분야이다. 단순히 포토샵 정도만 사용한다고 하면 엄청난 사양이 필요 없지만 3D 또는 Illerstrator 작업이 동반되는 경우 컴퓨터의 사양은 아주 민감해 진다.




다행히 2D 실사 작업을 주로 하는 Illerstrator 작업자들은 CPU와 메모리 정도만 어느정도 신경써서 선정을 해 주게 되면 크게 문제 없는 작업을 진행할 수 있다.

이번 컴퓨터 조립 의뢰는 Illerstrator 와 Photoshop 을 주로 사용하는 디자이너를 위한 컴퓨터를 저렴한 가격에 구성해 달라는 것이었다.


[AMD] 실사 출력 디자인 용도 컴퓨터 조립기(RYZEN R7 2700)


이미 지난 8월에 실사출력 디자인을 위한 R7 2700 시스템을 조립한 적이 있다. 하지만, 이번 의뢰 컴퓨터의 예산과는 가격이 맞지 않아 지난 R7 2700 에서 적당히 타협하는 사양 즉 R5 2600 시스템의 견적을 작성하였다.



02. 부품의 선택



일러스트레이터 작업은 CPU 연산과 적당한 메모리가 핵심이다. 물론 Adobe 사가 CC 버전의 제품을 출시하면서 GPU 가속도 함께 이용이 가능하지만 이는 Nvidia 제품의 적당한 그래픽 카드만 선정을 하면 된다.

따라서, 라이젠 R5 2600, 메모리 16GB, Nvidia Geforce GTX1050 정도로 부품을 구성한다.


02-01. CPU



위 R7 2700 조립기 링크의 내용을 살펴보면 라이젠 CPU 모델 별 코어에 대해 정리한 표가 있다. 이번에는 R5 2600 을 선택하였으므로 피나클릿지의 헥사(6)코어 12쓰레드 제품이다. 2700이 옥타코어(8) 16쓰레드 스펙을 가지고 있으니, 4쓰레드 차이이다. 일러스트 작업을 하는데 있어서 12쓰레드와 16쓰레드의 차이는 크게 없을 것으로 판단되었다.

[그림1] R5 2600 박스 씰[그림1] R5 2600 박스 씰


AMD Ryzen 5 2600 박스의 씰에는 CPU 의 간단한 스펙과 S/N 이 적혀있다. 


[그림2] R5 2600 박스[그림2] R5 2600 박스


2200G, 2600, 2700 모두 동일한 박스 디자인이다. 박스 겉면에서 CPU 를 바로 확인해 볼 수 있는 디자인을 채택하였다.




[그림3] CPU 정품 스티커[그림3] CPU 정품 스티커


박스 상단에는 정품 스티커가 붙어있다. AMD Ryzen 정품 CPU는 3년의 워런티 기간을 가지고 있다.


[그림4] CPU 와 라이선스 스티커[그림4] CPU 와 라이선스 스티커


박스 내부에는 CPU 와 라이선스 스티커를 포함한 작은 박스와 쿨러 박스로 구성되어있다. 위 사진의 작은 박스를 열어 CPU를 꺼낸다.


[그림5] CPU 쿨러(Wraith Stealth)[그림5] CPU 쿨러(Wraith Stealth)


R5 2600 의 기본 쿨러는 레이스 스텔스 쿨러이다. LED가 적용되지 않은 R3 2200G 에 포함되었던 쿨러와 동일한 쿨러이다. R7 2700 이상에서만 레이스 스파이어 LED 쿨러가 적용 되는 듯 하다.

[그림6] 보드에 장착된 CPU[그림6] 보드에 장착된 CPU




CPU를 박스에서 개봉하자마자 메인보드에 장착을 하였다. AMD의 CPU는 핀이 CPU에 붙어있기 때문에 조금만 잘못 보관을 하여도 핀이 손상될 수 있다. 소중한 CPU의 핀이 손상되면 수리가 불가하거나, 수리를 하더라도 많은 비용이 발생하기 때문에 항상 조심해야 한다.


02-02. 메인보드


[그림7] ASRock 사의 AB350M PRO4[그림7] ASRock 사의 AB350M PRO4


메인보드는 ASRock 사의 AB350M PRO4 를 선택하였다. 아무래도, 그래픽작업용이기도 하고, Ryzen 중 중급의 CPU(R5 2600)를 선택하였기 때문에 어느정도 안정성 있는 보드를 선택하였다. 또한, 업무시간에는 계속 사용을 해야하기 때문에 내구성도 뛰어나야 한다. 필자가 컴퓨터 조립을 하면서 내구성 뛰어난 컴퓨터 부품 제조 상표라 느낀 업체가 바로 ASRock 이다. (물론 ASUS 나 Gigabyte 를 선택할 수도 있다.) ASRock 사의 보드들은 10년넘게 사용해 보았지만 보드가 문제를 일으킨 적이 없었다. ASRock 보드가 특별히 좋다는 것 보다는 필자와 잘 맞는 것 같다는 편이 좀더 가까울 것이다.


[그림8] ASRock 사의 AB350M PRO4의 구성품[그림8] ASRock 사의 AB350M PRO4의 구성품


AB350M PRO4의 구성품은 다른 메인보드와 크게 다를 것이 없다. 사이즈는 M-ATX 사이즈이긴 하지만, IO 패널부터 ATX 파워커넥터까지의 거리가 다른 M-ATX에 비하여 크다. 케이스 선택이 중요한 메인보드 중에 하나이다.


[그림9] ASRock 사의 AB350M PRO4의 모습[그림9] ASRock 사의 AB350M PRO4의 모습




AB350M PRO4의 전체 모습이다. 기본적으로 메모리 뱅크가 4개로 구성되어 있으며, 특이한 점은 M.2 슬롯이 두 개나 존재한다는 것이다. PCI-EX x16 슬롯 역시 두개로 구성되어 SLI 등의 기술을 접목시켜 그래픽카드 두개를 운용할 수 있다.


[그림10] ASRock 사의 AB350M PRO4의 Ultra M.2 슬롯[그림10] ASRock 사의 AB350M PRO4의 Ultra M.2 슬롯


[그림11] ASRock 사의 AB350M PRO4의 RGB Header 핀과 LED 쿨러를 위한 핀[그림11] ASRock 사의 AB350M PRO4의 RGB Header 핀과 LED 쿨러를 위한 핀


램뱅크 옆에는 RGB 컨트롤을 위한 핀이 나열되어있다. AMD_FAN_LED1 이라고 표시되어있는 것이 Ryzen R7 CPU등에 순정으로 포함되어 있는 레이스 스파이어 쿨러와 연결되는 핀이다. 그 옆 RGB HEADER 핀은 케이스 또는 각종 LED 튜닝을 위한 핀으로서 메인보드에서 제공하는 프로그램으로 컨트롤 할 수 있는 핀이다. 필자는 화려한 것을 많이 좋아하지 않아 사용하지는 않지만, 간혹 필자에게 조립을 의뢰하는 분들이 화려한 것을 좋아할 경우 위와 같은 기능을 활성화 해 주곤 한다.


[그림12] ASRock 사의 AB350M PRO4의 라이선스 스티커[그림12] ASRock 사의 AB350M PRO4의 라이선스 스티커


컴퓨터 부품 제조사 대부분은 고급군의 부품에 라이선스 스티커를 제공한다. 특히 메인보드인 경우 저가형 보드에는 들어있지 않지만, 중급 이상의 보드에는 라이선스 스티커가 꼭 포함되는데, 조립 완료 후 이 스티커를 붙이는 느낌이 제법 좋다.


[그림13] ASRock 사의 AB350M PRO4의 백포트[그림13] ASRock 사의 AB350M PRO4의 백포트


백패널의 포트는 다양하게 지원을 한다. 왼쪽부터 PS/2(키보드/마우스)포트, USB 2.0포트, DSUB, HDMI, DVI, USB-TypeC, USB3.1, USB 3.0, Gigabit Ethernet, Audio Port 이다. 단, Ryzen R5 2600은 APU(Graphic Core 내장 CPU)가 아니기 때문에 DSUB, HDMI, DVI 등의 포트는 사용할 수 없다. 2200G 또는 2400G 가 이 포트들을 사용할 수 있는 CPU 이다. 


 



02-03. Storage



[그림14] OS 및 프로그램 설치용으로 사용할 Tammuz 사의 M550XT 512GB SSD[그림14] OS 및 프로그램 설치용으로 사용할 Tammuz 사의 M550XT 512GB SSD


운영체제 및 프로그램 설치에 사용할 SSD 이다. M.2 SATA 방식의 512GByte 이다. 사실, M.2 SATA 방식이 아닌 M.2 Nvme 방식의 견적을 작성하려고 하였으나, 가성비를 위해 용량이 크고, 저렴한 M.2 SATA로 결정을 하게 되었다. 스펙상으로는 큰 차이의 속도를 보이지만, 체감상 느낄 수 있기에는 한계가 있기 때문에 이러한 선택으로 인해 성능 저하폭을 직접 느끼지는 못할 정도이다.


[그림15] OS 및 프로그램 설치용으로 사용할 Tammuz 사의 M550XT 512GB SSD 구성품[그림15] OS 및 프로그램 설치용으로 사용할 Tammuz 사의 M550XT 512GB SSD 구성품


SSD는 항상 그렇지만, 박스를 개봉해도 많은 구성품이 없다. 설명서와 본품만 있는 경우가 대부분이다.


[그림16] OS 및 프로그램 설치용으로 사용할 Tammuz 사의 M550XT 512GB SSD 설치[그림16] OS 및 프로그램 설치용으로 사용할 Tammuz 사의 M550XT 512GB SSD 설치


메인보드에 설치는 위의 사진과 같이 한다.  메인보드 구성품에 M.2 SSD의 고정을 위한 볼트가 동봉되어 있다. 특이한 규격의 볼트이니 잃어버리지 않게 조심히 잘 챙겨 놓는다.


02-04. CASE



[그림17] 미들타워 LUCIO 대양케이스[그림17] 미들타워 LUCIO 대양케이스




케이스는 대양케이스사의 미들타워케이스인 LUCIO 를 선택하였다. 대양케이스는 적당한 가격에 딱 쓰기 좋을 정도의 미들타워 케이스이다. 기본으로 장착되어있는 쿨러역시 시끄럽지 않고 조용하다. 특히 LUCIO 케이스는 전면 쿨러의 LED가 화이트 계열로 화려하지 않고 얌전하다.


[그림18] 미들타워 LUCIO 대양케이스[그림18] 미들타워 LUCIO 대양케이스


전면은 강화유리로 구성되어있고, 측면은 아크릴로 구성되어있다. 전체적인 모습은 그냥 깔끔하다. 말로 표현할 수 없는 깔끔함이다.


[그림19] 미들타워 LUCIO 대양케이스의 전면 강화유리 고정 볼트[그림19] 미들타워 LUCIO 대양케이스의 전면 강화유리 고정 볼트


특이한점은 전면 강화유리가 고정볼트로 체결되어있다는 것이다. 전면부 쿨링을 위해 강화유리가 케이스에 밀착되어있는 구조가 아니고 살짝 떠있다. 상하 좌우로 공기를 흡입하는 구조로 설계되어있다.


[그림20] 미들타워 LUCIO 대양케이스의 전면 쿨러[그림20] 미들타워 LUCIO 대양케이스의 전면 쿨러


전면 강화유리를 탈거하면 전면 쿨러가 노출이된다. 쿨러의 청소를 편리하게 할 수 있도록 설계가 되었다. 쿨러의 팬 역시 저소음을 위한 설계가 되어있는 것을 볼 수 있다.


[그림21] 미들타워 LUCIO 대양케이스의 상단부[그림21] 미들타워 LUCIO 대양케이스의 상단부


케이스 상단부는 각종 포트 및 스위치와 수냉식 쿨러의 라지에이터의 쿨링을 위한 공간이 자리잡고 있다. 상당히 깔끔한 모습이다.


 



[그림22] 미들타워 LUCIO 대양케이스의 측면부[그림22] 미들타워 LUCIO 대양케이스의 측면부


케이스 측면 커버는 배선정리를 위한 공간이 마련되어있다.


[그림23] 미들타워 LUCIO 대양케이스의 측면부[그림23] 미들타워 LUCIO 대양케이스의 측면부


케이스 정면으로 보았을 때의 좌측면 부는 우측면부와 다르게 아크릴 커버로 구성되어있다. 강화유리가 아니다. 아크릴 커버의 고정은 6개의 핸드볼트로 되어있다.


[그림24] 미들타워 LUCIO 대양케이스의 내부[그림24] 미들타워 LUCIO 대양케이스의 내부


내부 공간은 아주 넓다. 하단부에 파워가 위치하는 구조이다. 다만, 파워부의 각종 배선들을 숨길 수 있는 별도의 공간으로 분리되지 않은 점은 살짝 아쉬운 부분이다. 조립할 때 배선 정리를 조금 더 생각해서 해야할 것이다.


[그림25] 미들타워 LUCIO 대양케이스의 하단 파워 쿨링 필터[그림25] 미들타워 LUCIO 대양케이스의 하단 파워 쿨링 필터


케이스 하단부는 파워의 쿨러로부터 빨려들어가는 공기 중의 먼지를 거를 수 있는 필터가 설치되어있다. 구멍이 크긴 하지만, 저러한 구조가 되어있는 것과 되어있지 않는 것의 파워 내부 먼지 유입정도가 다르다. 


[그림26] 미들타워 LUCIO 대양케이스의 구성품[그림26] 미들타워 LUCIO 대양케이스의 구성품




케이스의 구성품이다. 내장 PC 스피커와 볼트, 하드 가이드 2조로 이루어져 있다.


02-05. Graphic Card


[그림27] 그래픽카드 ASUS Geforce GTX 1050 2GB[그림27] 그래픽카드 ASUS Geforce GTX 1050 2GB


그래픽카드는 ASUS사에서 출시한 Geforce GTX 1050 2GB 제품으로 선택하였다. 일러스트가 주된 업무이기 때문에 적절히 GPU 가속만 활용하면 되기 때문에 높은 그래픽카드가 필요로 하지 않는다. 따라서 적당한선에서 타협을 하여 GTX 1050 제품으로 장착을 한다. 다만, 업무에 사용하는 컴퓨터로 내구성 및 안정성이 좋아야 하기 때문에 ASUS제품으로 선택했다.


[그림28] 그래픽카드 ASUS Geforce GTX 1050 2GB[그림28] 그래픽카드 ASUS Geforce GTX 1050 2GB


아무래도 저가형 그래픽카드이다 보니, 박스 패키징 역시 단순하다. 외부전원도 필요가 없다. 크기도 크지 않아 부담스럽지 않다.




[그림28] 그래픽카드 ASUS Geforce GTX 1050 2GB 포트[그림28] 그래픽카드 ASUS Geforce GTX 1050 2GB 포트


ASUS Geforce GTX1050 2GB 제품은 3개의 모니터를 지원한다. 왼쪽부터 DP 포트, HDMI 포트, DVI 포트이다. 듀얼모니터 혹은 트리플 모니터를 사용하기 위해서는 각각 다른 Type의 출력을 사용해야 한다. 변환젠더가 필요할 것으로 보인다.


02-06. Power Supply



[그림29] AONE 사의 STORM 600W 80PLUS Standard 파워[그림29] AONE 사의 STORM 600W 80PLUS Standard 파워


파워는 AONE 사의 Storm 정격 600와트 제품을 선택하였다. 장시간 컴퓨터를 켜 놓고 작업을 해야하기 때문에 파워 역시 안정성이 뛰어나야 한다. 더욱 좋은 제품을 선택하고 싶었지만, 적당한 가격선에서 타협을 하고, AONE사의 제품을 선택하였다. 80PLUS Standard 인증제품으로 어느정도 안정성은 확보했다고 믿고 가는 것이다.(사실 AONE사의 파워제품들은 수년전부터 안정적이면서 가격이 저렴했었다.)





03. 조립



[그림30] 깔끔한 배선정리[그림30] 깔끔한 배선정리


다른 컴퓨터의 조립과 마찮가지로 아주 깔끔하게 배선정리를 한다. 컴퓨터 조립에서 가장 신경이 많이 쓰이고 시간이 많이 걸리는 부분이기도 하다. 고성능 컴퓨터일 수록 깔끔한 배선정리는 필수이다. 발열량이 많기 때문에 배선으로 인한 공기흐름에 문제가 발생하게 되면 시스템 다운이 발생할 수 있다.


[그림31] 깔끔한 배선정리[그림31] 깔끔한 배선정리


필자는 보이지 않는 측면부도 깔끔하게 배선정리를 진행한다. 특히 HDD 디스크의 추가를 대비하여 SATA 전원부의 포트는 HDD 디스크 위치에서 정리를 하게 된다.


[그림31] 조립 완료[그림31] 조립 완료


조립이 완료되었다. 전면부 화이트 LED 쿨러가 상당히 깔끔한 모습을 하고 있다. 운영체제 설치 후 모든 것이 정상동작하는 것을 테스트한다.




[그림32] 조립 완료[그림32] 조립 완료


측면부의 모습이다. CPU 쿨러까지 LED 쿨러였다면 조금 더 좋았을 것으로 보이지만, 성능에 크게 차이가 나는 부분이 아니기에 이 정도로 적당히 타협을 한다. 보호필름만 걷어낸다면 조금더 투명하고 깔끔한 모습을 볼 수 있을 것이다.


04. 성능 및 총평



[그림33] 6 Core Processor, 12 Threads[그림33] 6 Core Processor, 12 Threads


라이젠 2600 은 물리적 코어가 6개이며, 총 12개의 쓰레드로 동작을 한다. 운영체제 설치를 할 동안 이것저것 만져본 결과 상당히 빠릿한 느낌을 받는다. 필자의 메인 컴퓨터는 Xeon E3-1270인데, 2세대 i7-2600과 동급이다. 라이젠 2600 시스템에서 필자의 컴퓨터보다 반응속도가 빠르다는 느낌을 받을 수 있었다. 실제 측정은 해 보질 못하였지만, 해외 벤치마크 사이트에서의 라이젠 R5 1400 과 i7-2600 의 성능비교를 보았을 때, 싱글코어의 성능이 i7-2600보다 R5 1400이 좋았다. 또한, i7-2600 인경우 L2 캐시가 1MByte 인데 반해, 라이젠 2600인 경우 L2 캐시가 3MByte이다. 이러한 이유로 라이젠의 체감성능이 훨씬 좋은 것으로 보인다.

2세대 인텔프로세서 i7-2600 과 비슷하거나 좀 더 좋은 성능을 내는 제품이 바로 라이젠 R5 1400 및 2400G 제품이다. 특히 이번 조립에 사용한 R5 2600 은 인텔의 7세대 혹은 8세대 i7 CPU 와 비슷한 성능을 가지고 있고 가격은 훨씬 저렴하다.(물론 멀티코어 성능을 말하는 것이다. 싱글코어의 성능은 아직까지도 R5 2600보다 7~8세대 i7 이 더 좋다.) 다중작업이 많거나, 멀티코어 활용을 잘 할 수 있는 게임을 하는 유저라면, 라이젠 R5 2600의 선택은 최상의 선택이라고 생각이 된다. R5 2600 에 GTX1070 정도의 그래픽카드만 장착이 된다면, 현존하는 웬만한 고사양 게임들은 소화를 할 수 있을 것으로 보인다.




2018년 10월 4일
Kunttang

반응형
블로그 이미지

매깡

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

,