사실 웹캠 스트림 서버라는게 지난 포스트 CCTV 만들기-1, CCTV 만들기-2를 통해 알아본 CCTV와 크게 다를 바 없다. 실제로 motion프로그램에게 웹캠 스트림 기능을 제공하므로 기능 측면에서 다른점이라고 하면 CCTV에 있는 저장하는 기능이 웹캠 스트림 서버에 없다는 정도 일 것 같다. 그럼에도 불구하고 따로 웹캠 스트림 서버 프로그램을 설명하는 이유는 이번 포스트에서 설명할 mjpg-streamer라는 프로그램이 motion 프로그램의 여러 플랫폼에서 웹캠 스트림을 확인하지 못하는 단점을 보완하기 때문이다. 이에 대한 자세한 얘기는 이번 포스트 마지막 부분에서 하겠다.

 

  우선 mjpg-streamer라는 프로그램을 설치하자. 이 프로그램은 apt-get 을 이용해서 설치 할 수 있지 않다. 소스코드를 받아서 컴파일을 해서 실행 시켜야하는데 어렵지 않으니 그냥 따라 하면 된다. 우선 svn으로 소스코드를 받자. 아래와 같이 'svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer/ mjpg-streamer'를 입력하면 mjpg-streamer라는 폴더가 생기고 그 안에 mjpg-streamer 소스코드가 다운로드 받아진다.

웹캠 스트림 서버

 

  mjpg-streamer 폴더에 들어가서 make를 입력하면 스스로 프로그램을 컴파일한다. 중간에 에러가 발생할 수도 있는데 그때는 에러 내용이 무엇인지 판단해서 고쳐야 한다. 필요한 라이브러리가 없을 경우 에러가 발생할 가능성이 있으니 에러를 확인해서 없는 라이브러리를 설치한 뒤 다시 make로 컴파일 하면 된다.

웹캠 스트림 서버

 

  기본적으로 이 프로그램을 실행시키는 명령어는 './mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www"' 이다. 여기에 여러 옵션을 넣을 수 있다. 그 옵션은 다음 표와 같다. 

 

 

  WebCam 옵션

-d

video device to open (your camera)

-r

the resolution of the video device, can be one of the following strings:
QSIF QCIF CGA QVGA CIF VGA SVGA XGA SXGA or a custom value like: 640×480

-f

frames per second

-y

enable YUYV format and disable MJPEG mode

-q

JPEG compression quality in percent (activates YUYV format, disables MJPEG)

-m

drop frames smaller then this limit, useful if the webcam produces small-sized garbage frames may happen under low light conditions

-n

do not initalize dynctrls of Linux-UVC driver

-l

switch the LED on, off, let it blink or leave it up to the driver using the value auto

 

 

  HTTP 출력 옵션

-w

folder that contains webpages in flat hierarchy (no subfolders)

-p

TCP port for this HTTP server

-c

ask for username:password on connect

-n

disable execution of commands

 

출처 : Wolf Paulus Journal

 

 

  옵션 사용이 조금 독특하다. WebCam 옵션은 -i 뒤에 나오는 따옴표 안에, HTTP 옵션은 -o 뒤에 나오는 따옴표 안에 넣어야 한다. 여기서 중요한 옵션 몇개만 간략히 소개하자면 WebCam 옵션의 -r은 해상도, -f는 초당 프레임수 -q는 jpg 퀄리티를 설정하는 옵션이다. -d는 웹캠이 두개 이상 설치되어 있을 때 그 중 원하는 웹캠을 선택하는 옵션으로 기본값으로 /dev/video0를 가진다. HTTP 옵션의 -w는 웹페이지가 담겨있는 폴더의 위치, -p는 TCP 포트를 설정하는 옵션이다. 포트 설정이 없을 경우 8080 포트를 기본값으로 사용하는데 XBMC등 8080포트를 사용하고 있으면 bind 할 수 없다는 에러 메시지가 뜬다. 예를들어 아래 사진 속 명령어를 보면 640*480 해상도로 초당 15프레임을 찍어서 8083포트로 스트리밍하고 있는 것을 알 수 있다.

웹캠 스트림 서버

 

  이제 웹브라우저로 http://아이피주소:8083/에 접속하면 아래와 같은 화면을 볼 수 있다. 아래 페이지는 프로그램에서 제공하는 샘플 페이지로 여러 가지 방법으로 웹캠 화면을 보는 것을 구현 해 놓았다. 기본적인 방법으로 html의 img 태그를 이용할 수 있다. 예를들어 <img src="http://아이피주소:8083/?action=snapshot">이라고 하면 정지된 사진을, <img src="http://아이피주소:8083/?action=stream">이라고 하면 동영상을 볼 수 있다. 이런 방법으로 동영상을 스트림 하는 경우는 익스플로러에서 작동하지 않는다.

웹캠 스트림 서버

 

웹캠 스트림 서버

 

웹캠 스트림 서버

 

  익스플로러에서도 동영상 스트리밍을 보려면 자바스크립트를 이용하는 방법을 사용하면 된다. 자바스크립트를 이용하는 방법 또한 제공되는 샘플 코드를 보면 그리 복잡하지 않기 따문에 쉽게 이용할 수 있을 것으로 보인다.

웹캠 스트림 서버

 

  마지막으로 VLC 프로그램이나 웹브라우저에 스트리밍 주소를 집접 적는 방법에 있는데 이때 주소는 'http://아이피주소:8083/?action=stream' 이고 motion과 마찬가지로 익스플로러와 크롬은 지원하지 않고, 파이어폭스는 지원한다.

웹캠 스트림 서버

 

  지난 포스트에서 소개한 motion 프로그램으로도 웹캠 스트리밍을 할 수 있음에도 불구하고 mjpg-streamer를 소개한 이유는 정말 다양한 플랫폼에서 사용할 수 있기 때문이다. 우선 인터넷 익스플로러, 크롬, 파이어폭스 모두 사용이 가능하다. 스냅샷은 모든 웹브라우저에서 가능하고, 스트림은 익스플로러에서는 제대로 작동하지 않지만 자바 스크립트를 이용한 방법으로는 익스플로러에서도 라이브 스트리밍을 볼 수있다. 또한 소스코드가 공개되어 있기 때문에 프로그래밍을 할 줄 아는 사람이라면 소스코드 분석을 통해 배울 점도 많아 보인다.

 

참조 : Wolf Paulus Journal

블로그 이미지

작은 조약돌

공돌이 형과 글쟁이 동생 쌍둥이 형제의 낙서장

,