본문 바로가기

Project 자료수집

오픈소스 홈네트워크 프로그램 (UPnP)

요즘 삼성이나 LG 에서 나오는 TV 나 블루레이 플레이어에 들어있는 DLNA 기능이 바로 이 홈네트워크, 그 중에서도 UPnP 기술을 바탕으로 구현된 것인데, 이것을 통해 스마트폰, PC 나 NAS 와 같은 외부장치의 미디어 파일의 목록을 보거나 재생할 수 있죠. 또 반대로 TV 의 내용을 스마트폰 등으로 볼 수도 있습니다. 안드로이드 마켓에서는 이미 iMediaShare, Twonky Mobile, Skifta, Andromote, Allshare(갤럭시) 등 많은 UPnP/DLNA 관련 앱을 찾을 수 있습니다.
제가 소개할 내용은 UPnP 의 기본적인 개념과 이러한 UPnP 기반 프로그램들을 구동시켜주는 자바로 만들어진 오픈소스 UPnP 미들웨어인 cling 라이브러리 (http://teleal.org/projects/cling/) 입니다.

1) UPnP 소개
UPnP(Universal Plug and Play) 는 TCP/IP, SSDP, SOAP, GENA, HTTP 및 XML 과 같은 인터넷 통신 표준과 기술을 기반으로 하여 네트워크로 연결된 기기들 간에 서로 통신을 가능하게 해 주는 구조를 정의한 표준입니다. UPnP 를 활용하면 주변 장치를 자동으로 인식하고 다른 기기가 가진 서비스(기능)를 제어할 수 있으므로, 활용분야가 무궁무진하다고 할 수 있습니다.  예를 들면 동영상을 스마트폰, PC, TV 등에서 자유자재로 전송하는 것은 기본이고, 집에 있는 전등이나 보일러을 켜고 끄거나 보안 카메라 영상을 보는 것도 손쉽게 가능해집니다.
upnp-architecture.png
UPnP 구조에서 가장 중요한 3가지 요소는 디바이스, 서비스, 컨트롤포인트입니다. 디바이스는 특정한 서비스를 제공하는 장치를 말하며, 반대로 서비스는 디바이스의 기능에 대한 소프트웨어적인 구현을 말합니다. 컨트롤포인트는 서비스를 요청하는 기기 또는 기능을 말합니다. 어떤 물리적인 기기는 리모콘처럼 컨트롤포인트의 기능만을 가지기도 하고, TV처럼 디바이스와 서비스를 포함하기도 합니다. UPnP 프로토콜은 총 6단계로 진행되는데, 바로
1. 자신의 네트워크 주소를 획득하는 Addressing 단계,
2. SSDP 프로토콜을 통해 디바이스가 브로드캐스트하여 자신을 알리고 다른 디바이스와 서비스를 찾는 Discovery,
3.  컨트롤포인트가 HTTP 프로토콜을 통해 찾은 디바이스에 대한 기술문서를 XML로 가져오는 Description,
4. 컨트롤포인트가 기술문서를 파악하여 SOAP 프로토콜을 통해 원하는 디바이스의 서비스를 위해 명령(Action)을 요청하는 Control,
5. 이와 별도로 컨트롤포인트가 서비스에 요청하여 서비스의 상태가 변했을 때 알려주는 이벤트 메시지를 GENA 프로토콜을 통해 받도록 할 수 있는 Eventing,
6. 컨트롤포인트가 디바이스가 제공하는 URL 을 통해 브라우저로 가져와 디바이스를 제어하거나 상태를 볼 수 있는 Presentation 단계입니다.

upnp-networking.png



2) cling 소프트웨어
본격적으로 소개할 소프트웨어는 오픈소스 UPnP 자바 및 안드로이드 라이브러리인 cling (http://teleal.org/projects/cling/) 입니다. cling 은 UPnP Device Architecture 1.0 표준을 구현한 Core 자바 라이브러리와 NAT 포트 매핑, A/V 미디어 서버 및 랜더러 등을 구현한 Support 라이브러리로 구성되어 있고, 이외에도 UPnP 디바이스를 검색하고 브라우징할 수 있는 Workbench 라는 자바 프로그램과 기존의 gstreamer 미디어 플레이어를 활용한 MediaRenderer 프로그램을 포함하고 있습니다. cling 은 teleal.org 를 통해 Christian Bauer 씨가 주로 개발하며 소스코드는 GNU LGPL 로 공개되어 있고 홈페이지에서 SVN 을 통해 다운받을 수 있습니다.

사실 UPnP 를 지원하는 CyberLink for Java 와 같은 기존의 자바 라이브러리가 있지만, 제가 판단하기에는 자바 5를 활용한 cling 라이브러리가 훨씬 더 잘 짜여져 있는 소스코드로 보여집니다. 하지만, 소스파일이 상당히 방대한 편이라서 본격적으로 공부하기 전에 라이브러리 관련 문서를 꼭 읽어보시기 바랍니다. 제가 추천하는 cling 공부 방법은 처음에는 홈페이지에서 제공하는 안드로이드용 UPnP 브라우저 앱 프로그램을 다운받아 빌드하여 실행시켜 보면서 사용자 매뉴얼을 살펴보고, 그 다음 미디어 컨트롤러 등을 직접 구현해 보든지 또는 나머지 모듈들을 이클립스에서 빌드하면서 소스코드를 더욱 세밀히 살펴보는 방법입니다. 그리고, 제대로 사용하기 위헤서는 Maven 이나 TestNG 와 같은 자바 툴들도 사용할 줄 알면 더욱 좋습니다.

추가로, Cling UPnP 브라우저 소스코드와 “안드로이드 프로그래밍 정복" 책의 멀티미디어 부분을 참고하여 사진(jpg 등), 음악(mp3),  동영상(mp4) 을 재생할 수 있도록 고친 프로그램을 첨부합니다. 해당 프로그램을 제대로 동작시키기 위해서는 스마트폰, NAS, PS3, 또는 PC 등에서 UPnP 미디어 서버를 먼저 구동시켜야 합니다.  참고로 대표적인 미디어 서버로는 Twonky, XBMC, Serviio, Windows Media Player, Nero MediaHome, PS3 Media Server, uShare(Linux), Mediatomb(Linux), iMediaShare(안드로이드), AllShare(안드로이드, 삼성) 등이 있습니다.
그리고 나서 공유기에 미디어 서버가 동작하는 PC 등의 기기가 연결되어 있고 스마트폰에 Wifi 로 공유기에 연결되어 있을 때 프로그램을 구동시키면 브라우저 탭에 서버들이 나타나고 클릭하여 접속하면 공개한 폴더들이 나타나고 이후에 원하는 대로 동작시킬 수 있습니다.

이 프로그램은 LGPL 라이센스로 공개된 Cling UPnP 브라우저 소스코드를 활용하였으므로 마찬가지로 LGPL 로 공개합니다. 관심있으신 분들께서 잘 활용하시기 바라고 더욱 발전된 앱을 만드셔서 무료로 배포해 주시길 기대합니다.

<참고자료>
UPnP 공식 포럼, http://www.upnp.org
UPnP 위키피디아, http://en.wikipedia.org/wiki/Universal_Plug_and_Play
UPnP 미디어서버 위키피디아, http://en.wikipedia.org/wiki/UPnP_AV_MediaServers
cling 홈페이지, http://teleal.org/projects/cling/
신동일, 홈네트워크 서비스 플랫폼 홈네트워크표준기술동향, HN Focus, vol. 03
p1ngp1ng 블로그, http://blog.naver.com/p1ngp1ng?Redirect=Log&logNo=120049518578

'Project 자료수집' 카테고리의 다른 글

RAP 개발을 위한 각종 링크  (0) 2013.08.20
TourAPI Sample Source  (2) 2013.08.20
GIT 사용법  (0) 2013.08.16
UPnP 관련 URL  (0) 2013.07.16
UPnP 구성요소 동작 순서  (0) 2013.05.08