상기의 목적을 달성하기 위한 본 발명은, DLNA(Digital Living Network Alliance) 시스템에서의 DMS(Digital Media Server)의 컨텐츠 업데이트 방법에 있어서, 상기 DMS의 모든 컨텐츠 정보를 수신한 DMP(Digital Media Player)가 주기적인 업데이트 이벤트를 통해 업데이트를 수행하는 제 1 단계; 상기 업데이트 수행에 있어서, 정보의 유실이 있는 것으로 판단되는 경우, 상기 DMP가 상기 DMS에 대해 상기 DMS가 보유하고 있는 아이템들의 리스트 정보를 요청하는 제 2 단계; 상기 아이템들의 리스트 정보를 수신하여, 기저장된 아이템들의 정보와 비교하는 제 3 단계; 상기 제 3 단계의 비교 결과 상이한 경우, 브라우즈 액션을 통해 상기 DMS의 컨텐츠에 대한 모든 정보를 얻는 제 4 단계; 및 상기 제 3 단계의 비교 결과 상이하지 않은 경우, 제 1 단계로 진행하는 제 5 단계를 포함한다.
또한, 본 발명은, DLNA(Digital Living Network Alliance) 시스템에서의 DMS(Digital Media Server)의 컨텐츠 업데이트 방법에 있어서, 상기 DMS의 모든 컨텐츠 정보를 수신한 DMP(Digital Media Player)가 주기적인 업데이트 이벤트를 통해 업데이트를 수행하는 제 1 단계; 상기 업데이트 수행에 있어서, 정보의 유실이 있는 것으로 판단되는 경우, 상기 DMP가 상기 DMS에 대해 상기 DMS가 보유하고 있 는 아이템들의 리스트 정보를 요청하는 제 2 단계; 상기 아이템들의 리스트 정보를 수신하여, 기저장된 아이템들의 정보와 비교하는 제 3 단계; 상기 제 3 단계의 비교 결과 상이한 경우, 상이한 리스트의 컨텐츠를 요구하여 상기 DMS의 상이한 컨텐츠에 대한 정보를 얻는 제 4 단계; 및 상기 제 3 단계의 비교 결과 상이하지 않은 경우, 제 1 단계로 진행하는 제 5 단계를 포함한다.
이하, 첨부된 도면을 참조하여 본 발명에 따른 바람직한 일실시예를 상세히 설명한다. 또한, 본 발명을 설명함에 있어서, 관련된 공지기능 혹은 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우 그 상세한 설명은 생략한다.
본 발명은 DLNA 시스템에서 DMP가 DMS의 컨텐츠를 확인하여 주기적으로 업데이트하는 방법에 관한 것이며, 기존의 "ContainerUpdateIDs" 이벤트를 사용하여 DMS의 컨텐츠의 업데이트된 컨테이너 ID를 가져오는 방법이 아닌 다른 방법을 제시한다.
즉, IP 기반의 DLNA 시스템에서 DMS의 컨텐츠의 업데이트 정보를 확인하기 위한 새로운 방법을 제시하며, 그에 따라 UPnP AV 스택의 "ContentDirectory"와 관련된 새로운 "상태 변수(State variable)"와 "액션(Action)"을 제안한다.
본 발명의 실시예에서 DLNA 장치(예컨대 DMS, DMP 등)는 IP 연결성(connectivity)을 가지며 HTTP 서버/클라이언트(Server/Client)를 포함하고 있어 UPnP 메시지들을 수신, 송신할 수 있으며, UPnP 장치나 제어 포인트(CP : Control point) 중 하나의 모듈을 가진다.
또한, 각각의 장치의 S/W 스택은 IP 기반에 HTTPMU(디렉토리), HTTPU(디렉토리) 및 HTTP 프로토콜 스택을 사용하며, UPnP 장치 설계(Device Architecure)에서 정의한 프로토콜 스택과 UPnP 포럼의 워킹 커미티(forum Working Committee)에서 정의한 프로토콜 스택과 UPnP 벤더(Vendor)에 의해 정의된 프로토콜 스택을 포함한다.
본 발명의 실시예에서 DMS의 컨텐츠 트리 리스트를 저장하기 위해서는 "ItemTreeList"라는 상태 변수를 사용한다. 이러한 "ItemTreeList"에는 트리 내의 아이템들의 ID를 XML 형식으로 저장한다. 또한, 이러한 XML은 계층적으로 저장되어 DMP 입장에서는 이를 통해 트리의 계층과 계층별 ID를 모두 확인할 수 있게 된다.
<표 1>은 "ItemTreeList"를 정의한 것이다.
Variable Name |
Req or Opt |
Data type |
Allowed Value |
Default Value |
ItemTreeList |
Opt |
String |
String |
- |
그리고, "ItemTreeList"의 값을 확인하기 위한 액션(Action)으로는 "GetItemTreeList"를 정의한다.
Name |
Req or Opt |
GetItemTreeList |
Opt |
그리고, "GetActionFinishedNotify"는 다음과 같다.
Argument(s) |
Direction |
Type |
Description |
relatedStateVariable |
GetItemTreeList |
OUT |
String |
ItemTreeList값을 전달 |
ItemTreeList |
이하의 <표 4>는 일반적인 DLNA 시스템에서 사용하는 액션 응답(Action Response)의 형식이며 <표 2>에 따른 "GetItemTreeList" 액션을 인보크(invoke)하였을 경우 응답 SOAP 메시지를 통해서 DMS의 컨텐츠들의 ID가 전달된다.
HTTP/1.1 200 OK CONTENT-TYPE: text/xml; charset="utf-8" <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <s:Body> <u:GetItemTreeListResponse xmlns:u="urn:schemas-upnp-org:service:serviceType:v"> <ItemTreeList> TREE ITEM ID XML FILE </ItemTreeList> </u:GetItemTreeListResponse> </s:Body> </s:Envelope> |
도 3 은 본 발명에 따른 DLNA 시스템에서의 DMS의 컨텐츠 업데이트 과정에 대한 제 1 실시예 동작 흐름도이다.
도 3을 참조하면, DMP(31)는 우선 DMS(32)에 대해 브라우즈 액션을 통해 DMS의 컨텐츠에 대한 모든 정보를 얻게 된다(301, 302).
이러한 브라우즈 액션은 DMS(32)가 가진 컨텐츠(item) 리스트를 XML 형식으로 수신하게 되며, XML 형식으로 수신되는 내용으로는 각 컨텐츠의 ID, 해당 컨텐츠의 parentID, child count, 컨텐츠 제목(content title), 컨텐츠 클래스(content class), 컨텐츠 사이즈(size) 등의 아이템 트리(Item Tree) 관련 내용 및 컨텐츠의 상세한 정보들을 모두 얻게 된다.
그리고 이렇게 브라우즈 액션을 통해 수신한 DMS(32)의 컨텐츠 정보에 대한 업데이트의 확인은 "ContentDirectory"의 "ContainerUpdateIDs" 이벤트를 통해 이루어진다(303). 이러한 "ContainerUpdateIDs" 이벤트는 일정 주기마다의 변경된 아이템들의 정보를 전송하게 된다. 그러나 DLNA 시스템의 기본 환경이 IP(Internet Protocl) 기반이고 네트워크 환경의 영향에 따라 패킷(Packet)이 순차적으로 전송되고 있는지에 대한 보장이 이루어지지 않기 때문에 아이템의 업데이트된 부분만을 전달하는 "ContainerUpdateIDs" 이벤트의 경우는 신뢰성에 문제가 발생한다.
현재의 DLNA 컨텐츠 디렉토리 스펙(Content Directory Spec)의 "ContainerUpdateIDs" 이벤트에서는 해당 이벤트가 한번이라도 손실될 경우 DMS(32)와 DMP(31)간의 보유하고 있는 컨텐츠(아이템)에 관한 정보가 맞지 않게 되는 경우가 발생하게 된다.
따라서, 잘못된 아이템에 대한 정보를 DMP(31)에서 DMS(32)에 접근하여 실행하려고 하는 경우, 아이템을 찾을 수 없어 일정 시간 대기(waiting)해야 한다거나, 다른 아이템에 접근하여 잘못된 정보나 컨텐츠를 접근하게 되기 때문에 서비스(Service)에 문제가 발생하게 된다. 또한, "ContainerUpdateIDs" 이벤트는 변경이 있을 때마다 전달되는 이벤트가 아니라 주기적으로 전달되는 이벤트로서 DMS(32)에서의 컨텐츠의 업데이트가 실시간으로 전달되지 않아 DMP(31)에서 컨텐츠 리스트를 사용시에 동기화가 안 되어 있는 경우가 발생하기도 한다.
따라서, 업데이트 정보가 유실되는 경우를 쉽게 가정할 수 있는데, 이러한 상황을 가정하면(304), 즉, 본 발명에 따른 DMP(31)가 업데이트 정보가 유실된 것으로 판단되는 경우, DMP(31)가 "GetItemTreeList" 액션을 통해(305) "ItemTreelist"를 수신한다(306).
이 경우, "ItemTreelist"는 아이템에 대한 트리의 계층과 계층별 ID 에 대한 정보만을 담고 있는 것으로, 기존의 브라우즈 액션을 통한 동작에 의해 수신되는 컨텐츠의 모든 정보에 비해 훨씬 작은 요량의 데이터만을 수신하면 된다.
이와 같이 "ItemTreelist"를 수신한 경우, DMP(31)는 자신이 저장하고 있는 정보와 수신된 "ItemTreelist"만을 비교함으로써(307), DMP(31)와 DMS(32) 간의 컨텐츠 정보의 상이점을 찾을 수 있다. 이 경우, 상이점이 찾아지면 브라우즈 액션을 통해(308) DMS의 컨텐츠에 대한 모든 정보를 얻게 된다(309).
한편, 상이점이 찾아지지 않으면 컨텐츠에 대한 업데이트가 유실되지 않은 것으로 생각하여 통상의 "ContainerUpdateIDs" 이벤트를 진행한다.
도 4 는 본 발명에 따른 DLNA 시스템에서의 DMS의 컨텐츠 업데이트 과정에 대한 제 2 실시예 동작 흐름도이다.
도 4를 참조하면, DMP(41)는 우선 DMS(42)에 대해 브라우즈 액션을 통해 DMS의 컨텐츠에 대한 모든 정보를 얻게 된다(401, 402).
이러한 브라우즈 액션은 DMS(42)가 가진 컨텐츠(item) 리스트를 XML 형식으로 수신하게 되며, XML 형식으로 수신되는 내용으로는 각 컨텐츠의 ID, 해당 컨텐츠의 parentID, child count, 컨텐츠 제목(content title), 컨텐츠 클래스(content class), 컨텐츠 사이즈(size) 등의 아이템 트리(Item Tree) 관련 내용 및 컨텐츠의 상세한 정보들을 모두 얻게 된다.
그리고 이렇게 브라우즈 액션을 통해 수신한 DMS(42)의 컨텐츠 정보에 대한 업데이트의 확인은 "ContentDirectory"의 "ContainerUpdateIDs" 이벤트를 통해 이루어진다(403). 이러한 "ContainerUpdateIDs" 이벤트는 일정 주기마다의 변경된 아이템들의 정보를 전송하게 된다. 그러나 DLNA 시스템의 기본 환경이 IP(Internet Protocol) 기반이고 네트워크 환경의 영향에 따라 패킷(Packet)이 순차적으로 전송되고 있는지에 대한 보장이 이루어지지 않기 때문에 아이템의 업데이트된 부분만을 전달하는 "ContainerUpdateIDs" 이벤트의 경우는 신뢰성에 문제가 발생한다.
현재의 DLNA 컨텐츠 디렉토리 스펙(Content Directory Spec)의 "ContainerUpdateIDs" 이벤트에서는 해당 이벤트가 한번이라도 손실될 경우 DMS(42)와 DMP(41)간의 보유하고 있는 컨텐츠(아이템)에 관한 정보가 맞지 않게 되는 경우가 발생하게 된다.
따라서, 잘못된 아이템에 대한 정보를 DMP(41)에서 DMS(42)에 접근하여 실행하려고 하는 경우, 아이템을 찾을 수 없어 일정 시간 대기(waiting)해야 한다거나, 다른 아이템에 접근하여 잘못된 정보나 컨텐츠를 접근하게 되기 때문에 서비스(Service)에 문제가 발생하게 된다. 또한, "ContainerUpdateIDs" 이벤트는 변경이 있을 때마다 전달되는 이벤트가 아니라 주기적으로 전달되는 이벤트로서 DMS(42)에서의 컨텐츠의 업데이트가 실시간으로 전달되지 않아 DMP(41)에서 컨텐츠 리스트를 사용시에 동기화가 안 되어 있는 경우가 발생하기도 한다.
따라서, 업데이트 정보가 유실되는 경우를 쉽게 가정할 수 있는데, 이러한 상황을 가정하면(404), 즉, 본 발명에 따른 DMP(41)가 업데이트 정보가 유실된 것으로 판단되는 경우, DMP(41)가 "GetItemTreeList" 액션을 통해(405) "ItemTreelist"를 수신한다(406).
이 경우, "ItemTreelist"는 아이템에 대한 트리의 계층과 계층별 ID 에 대한 정보만을 담고 있는 것으로, 기존의 브라우즈 액션을 통한 동작에 의해 수신되는 컨텐츠의 모든 정보에 비해 훨씬 작은 요량의 데이터만을 수신하면 된다.
이와 같이 "ItemTreelist"를 수신한 경우, DMP(41)는 자신이 저장하고 있는 정보와 수신된 "ItemTreelist"만을 비교함으로써(407), DMP(41)와 DMS(42) 간의 컨텐츠 정보의 상이점을 찾을 수 있다. 이 경우, 상이점이 찾아지면 상이한 리스트의 컨텐츠에 대한 정보를 요구하여(408) 해당 정보를 얻게 된다(409).
한편, 상이점이 찾아지지 않으면 컨텐츠에 대한 업데이트가 유실되지 않은 것으로 생각하여 통상의 "ContainerUpdateIDs" 이벤트를 진행한다.
도 5 는 본 발명에 따른 DLNA 시스템에서의 DMS의 컨텐츠 업데이트 과정에서 사용되는 "ItemTreelist" 상태 변수를 생성하기 위한 컨텐츠 디렉토리 아이템에 관한 예시도이다.
도 5를 참조하여, DMS(32, 42)를 통해 "ItemTreelist" 상태 변수를 생성하는 과정에 대해 살펴 보기로 한다.
도 5의 DMS 컨텐츠 디렉토리 아이템(contentDirectory's item)을 보면 컨테이너(container)와 아이템(Item)의 트리 형태로 되어 있다.
여기서, 각각의 노드(Node)들은 ID를 할당받고 있기 때문에, 트리의 구조를 확인하려면 각각의 트리 노드들의 ID와 위치된 계층을 확인하면 된다.
본 발명에서 정의된 상태 변수인 "ItemTreeList"는 XML 형식으로 각각의 노드들의 ID 번호를 저장하게 되며, 태그(Tag)의 계층과 순서에 따라서 트리의 계층과 순서를 확인할 수 있게 된다. 여기서, 트리의 탐색 방법은 트리의 왼쪽부터 오른쪽으로 이루어진다.
도 5를 예로 들면, 노드의 순서는 0, 1, 2, 3, 4, 5, 11, 21, 31, 32, 33의 순서대로 탐색이 될 것이며, "ItemTreeList"로 구성하여보면 다음의 <표 5>와 같을 것이다. 각각의 계층에 따라서 XML 태그의 중복 계층이 정해지어, DMP(31, 41)에서 트리의 ID와 함께 컨테이너와 아이템의 계층을 확인할 수 있게 되어 DMP(31, 41)의 컨텐츠 트리에 대한 확인이 가능하게 된다.
<Container id=0> <Container id=1> <Item id=2 /> <Item id=3 /> <Container id=4> <Item id=5 /> </Container> </Container> <Item id=11 /> <Container id=21> <Item id=22 /> </Container> <Container id=31> <Container id=32> <Item id=33 /> </Container> </Container> </Container> |
<표 6>은 <표 5>에 따른 트리 구조에 대해서 전송되는 "GetItemTreeList" 액션의 응답 메시지(Response message)이다. SOAP 패킷으로 응답하며 내용으로는 위에서 생성된 "ItemTreeList" 상태 변수의 값이 함께 전송되게 된다.
HTTP/1.1 200 OK CONTENT-TYPE: text/xml; charset="utf-8" <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <s:Body> <u:GetItemTreeListResponse xmlns:u="urn:schemas-upnp-org:service:serviceType:v"> <ItemTreeList> <Container id=0> <Container id=1> <Item id=2 /> <Item id=3 /> <Container id=4> <Item id=5 /> </Container> </Container> <Item id=11 /> <Container id=21> <Item id=22 /> </Container> <Container id=31> <Container id=32> <Item id=33 /> </Container> </Container> </Container> </ItemTreeList> </u:GetItemTreeListResponse> </s:Body> </s:Envelope> |
상술한 바와 같은 본 발명의 방법은 프로그램으로 구현되어 컴퓨터로 읽을 수 있는 형태로 기록매체(씨디롬, 램, 플로피 디스크, 하드 디스크, 광자기 디스크 등)에 저장될 수 있다.
이상에서 설명한 본 발명은, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에 있어 본 발명의 기술적 사상을 벗어나지 않는 범위내에서 여러 가지 치환, 변형 및 변경이 가능하므로 전술한 실시예 및 첨부된 도면에 의해 한정되는 것이 아니다.