KR100919254B1 - 유디피 홀펀칭을 이용한 피어 대 피어 데이터 전송을 통해스트리밍 데이터를 분산 전송하는 분산 스트리밍 시스템 및그 방법 - Google Patents

유디피 홀펀칭을 이용한 피어 대 피어 데이터 전송을 통해스트리밍 데이터를 분산 전송하는 분산 스트리밍 시스템 및그 방법

Info

Publication number
KR100919254B1
KR100919254B1 KR1020070095532A KR20070095532A KR100919254B1 KR 100919254 B1 KR100919254 B1 KR 100919254B1 KR 1020070095532 A KR1020070095532 A KR 1020070095532A KR 20070095532 A KR20070095532 A KR 20070095532A KR 100919254 B1 KR100919254 B1 KR 100919254B1
Authority
KR
South Korea
Prior art keywords
client
data
streaming
information
module
Prior art date
Application number
KR1020070095532A
Other languages
English (en)
Other versions
KR20090030160A (ko
Inventor
박근홍
Original Assignee
주식회사 그래텍
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 주식회사 그래텍 filed Critical 주식회사 그래텍
Priority to KR1020070095532A priority Critical patent/KR100919254B1/ko
Publication of KR20090030160A publication Critical patent/KR20090030160A/ko
Application granted granted Critical
Publication of KR100919254B1 publication Critical patent/KR100919254B1/ko

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • H04L67/1074Peer-to-peer [P2P] networks for supporting data block transmission mechanisms
    • H04L67/1078Resource delivery mechanisms
    • H04L67/108Resource delivery mechanisms characterised by resources being split in blocks or fragments
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • H04L67/1044Group management mechanisms 
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L61/00Network arrangements, protocols or services for addressing or naming
    • H04L61/09Mapping addresses
    • H04L61/25Mapping addresses of the same type
    • H04L61/2503Translation of Internet protocol [IP] addresses
    • H04L61/256NAT traversal
    • H04L61/2575NAT traversal using address mapping retrieval, e.g. simple traversal of user datagram protocol through session traversal utilities for NAT [STUN]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Theoretical Computer Science (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

본 발명은 복수의 부분 데이터로 구성되는 스트리밍 데이터의 분산 전송을 위한 분산 스트리밍 시스템 및 분산 스트리밍 방법에 관한 것이다. 본 발명의 분산 스트리밍 시스템은, 스트리밍 데이터를 전송하는 스트리밍 제공부, 클라이언트에 접속하고 상기 클라이언트로부터 스트리밍 데이터를 전송받는데 필요한 정보를 다른 클라이언트에게 전달하는 클라이언트 정보 관리부, 및 상기 복수의 클라이언트의 각각에 설치되고, 상기 스트리밍 제공부 및 다른 클라이언트 중 적어도 어느 하나로부터 스트리밍 데이터를 전송받거나, 또 다른 클라이언트에게 상기 전송받은 스트리밍 데이터를 전송하는 클라이언트측 제어부를 포함한다.
스트리밍 제공부는, 클라이언트로부터 스트리밍 데이터의 전송 요청을 수신하는 데이터 요청 수신 모듈, 및 스트리밍 데이터 중 전송 요청을 수신한 시점에 대응하는 하나 또는 그 이상의 부분 데이터를 클라이언트로 전송하는 데이터 전송 모듈을 포함한다. 클라이언트 정보 관리부는, 각각의 클라이언트에 접속하는데 필요한 정보인 접속 정보를 취득하는 접속 정보 취득 모듈, 각각의 클라이언트가 외부로부터 접속 가능한지 여부를 판단하는 접속 가능 여부 판단 모듈, 및 클라이언트에게 접속 가능 여부 판단 모듈에 의해 외부로부터 접속 가능하다고 판단된 다른 클라이언트에 대한 접속 정보를 전송하는 접속 정보 전송 모듈을 포함한다. 클라이언트측 제어부는, 클라이언트에 대한 접속 정보를 클라이언트 정보 관리부에 전달하는 접속 정보 전달 모듈, 클라이언트 정보 관리부로부터 수신한 테스트용 데이터에 응답하는 데이터를 클라이언트 정보 관리부에 전송하는 접속 가능 여부 응답 모듈, 클라이언트 정보 관리부로부터 외부 접속이 가능한 클라이언트에 대한 접속 정보를 수신하는 접속 정보 수신 모듈, 스트리밍 제공부에 스트리밍 데이터의 전송을 요청하는 데이터 요청 모듈, 외부 접속이 가능한 클라이언트에게 스트리밍 데이터의 전송을 요청하는 클라이언트 데이터 요청 모듈, 스트리밍 데이터의 부분 데이터를 수신하고 당해 부분 데이터를 클라이언트의 스트리밍 재생 모듈에 전달하는 데이터 수신 모듈, 및 다른 클라이언트로부터의 스트리밍 데이터 전송 요청에 응답하여 부분 데이터를 전송하는 클라이언트 데이터 전송 모듈을 포함한다.

Description

유디피 홀펀칭을 이용한 피어 대 피어 데이터 전송을 통해 스트리밍 데이터를 분산 전송하는 분산 스트리밍 시스템 및 그 방법 {A STREAMING DISTRIBUTION SYSTEM AND A METHOD FOR DISTRIBUTING TRANSFER OF STREAMING DATA THROUGH P2P DATA TRANSFER USING UDP HOLEPUNCHING}
본 발명은 라이브 스트리밍 데이터를 복수의 클라이언트 간에 피어 대 피어(peer to peer; P2P) 전송 방식을 이용하여 분산 전송하는 분산 스트리밍 시스템 및 그 방법에 관한 것이다. 특히, UDP 홀펀칭을 통해, 방화벽/NAT 등에 의해 외부로부터 접속이 불가능한 클라이언트를 P2P 전송에 참여시킴으로써, 복수의 클라이언트 간에 스트리밍 데이터를 분산 전송하는 시스템 및 그 방법에 관한 것이다.
기존의 라이브 스트리밍 시스템은 다수의 클라이언트가 하나의 서버에 접속하여 데이터를 전송받는 N:1의 구조였다. 이 경우, 접속하는 클라이언트의 수에 비례하여 서버에 걸리는 부하가 증가하고, 따라서 클라이언트의 수가 증가함에 따라 서버를 증설해야 하는 부담으로 인해 많은 수의 클라이언트가 접속하는 시스템에 대해서는 적합하지 않았다. 이러한 문제를 해결하기 위해, 분산 스트리밍 시스템이 고안되었다.
분산 스트리밍 시스템이란, 서버가 제공하고자 하는 스트리밍 데이터를 상기 서버가 전적으로 전송하지 않더라도, 클라이언트 사이에서 상기 데이터를 전송 및 수취하도록 하는 시스템을 말한다. 이로써, 다수의 클라이언트에게 동시에 스트리밍 데이터를 전송해야 하는 경우에 있어서의 서버의 부담을 경감할 수 있는 동시에 클라이언트는 다른 클라이언트를 제2의 서버로 하여 스트리밍 데이터를 전송받을 수 있으므로 더욱 신속한 데이터의 전송이 이루어질 수 있다.
그러나, 종래의 방식에 의한 클라이언트 간의 데이터의 전송, 즉 피어 대 피어(peer to peer; P2P) 방식의 데이터 전송에 있어서는 방화벽/NAT 등에 의해 외부로부터 접속이 불가능한 클라이언트가 상기 P2P 데이터 전송에 참여할 수 없는 문제가 있다. 즉, 방화벽 내부에 있는 피어의 경우, 당해 피어와 방화벽 외부의 피어 사이에는 직접적인 TCP 연결이 구성될 수 없고, 그로 인해 특별한 조치를 취하지 않는 한, 이들 간에는 데이터 통신이 불가능하므로, 방화벽 외부에 있는 피어 사이에만 데이터 전송이 가능하였다. 이와 같이, TCP로 직접 연결할 수 없는 피어를 포기할 수밖에 없으므로 데이터 분산 효율이 떨어지는 문제점이 있었다.
이러한 문제를 해결하기 위해, 외부로부터 방화벽 내부의 피어에 접속하는 것이 아니라, 방화벽 내부에 있는 피어가 방화벽이 없는 피어에게 거꾸로 접속하여 데이터를 전송해주는 방식(connection reversal)도 채택되었지만, 이는 양쪽의 피어가 모두 방화벽 내부에 있는 경우에는 적용될 수 없었다.
본 발명은 상기 과제를 해결하기 위하여 안출된 것으로서, 스트리밍 데이터를 복수의 부분 데이터로 분할하고 서버에 접속한 복수의 클라이언트 간에 상기 부분 데이터를 송수신하게 함으로써, 서버가 모든 클라이언트에게 스트리밍 데이터 전체를 전송하는 종래 기술에 비해 서버의 부담을 크게 경감할 수 있는 분산 스트리밍 시스템을 제공하는 것을 목적으로 한다.
또한, 본 발명은 방화벽 내부에 있는 클라이언트 간에도 데이터를 주고 받을 수 있는 방법인 UDP 홀펀칭을 라이브 스트리밍 시스템에 적용하기 위해, 스트리밍 데이터를 전송받기 위해 서버에 접속하는 클라이언트들로부터 그에 접속하여 데이터를 전송받는데 필요한 정보를 취득하고, 그 정보를 다른 클라이언트에게 통지하여 줌으로써, 방화벽/NAT 등에 의해 직접 접속이 어려운 클라이언트도 데이터 분산에 참여시킬 수 있는, 분산 효율이 높은 분산 스트리밍 시스템을 제공하는 것을 목적으로 한다.
또한, UDP를 이용한 네트워크 통신은 TCP와 달리 신뢰성 있게 데이터를 주고 받을 수 없다는 단점을 극복하기 위한 개선 방법을 제공하여 신뢰성 있게 서비스를 제공하는 방법을 제공하는 것을 목적으로 한다.
상기 과제를 해결하기 위하여, 본 발명의 일 국면에 의하면, UDP 홀펀칭을 이용한 피어 대 피어(peer to peer; p2p) 데이터 전송을 통해 라이브 스트리밍 데이터의 분산 전송을 가능하게 하는 분산 스트리밍 시스템이며, 상기 시스템에 접속하여 스트리밍 데이터를 요청하는 복수의 클라이언트의 각각에, 소정의 식별 정보에 의해 서로 구분되는 복수의 부분 데이터로 구성되는 스트리밍 데이터를 전송하는 스트리밍 제공부, 및 상기 클라이언트에 관한 정보를 취득하고 상기 시스템에 접속한 다른 클라이언트에게 상기 정보를 전달하는 클라이언트 정보 관리부를 포함한다. 상기 스트리밍 제공부는, 상기 클라이언트로부터 상기 스트리밍 데이터의 전송 요청을 수신하는 데이터 요청 수신 모듈 및 상기 요청에 응답하여 상기 스트리밍 데이터 중 상기 요청을 수신한 시점에 대응하는 하나 또는 그 이상의 부분 데이터를 상기 클라이언트로 전송하는 데이터 전송 모듈을 포함한다. 상기 클라이언트 정보 관리부는, 상기 복수의 클라이언트의 각각에 대해, 외부로부터 당해 클라이언트에 접속하는데 필요한 접속 정보를 취득하는 접속 정보 취득 모듈, 상기 복수의 클라이언트의 각각에 대해, 외부로부터의 접속이 가능한지 여부를 판단하는 접속 가능 여부 판단 모듈, 및 상기 스트리밍 제공부에 상기 스트리밍 데이터의 전송을 요청한 클라이언트에게, 당해 클라이언트가 다른 클라이언트에 접속하여 그로부터 상기 스트리밍 데이터를 수취할 수 있도록, 상기 접속 가능 여부 판단 모듈에 의해 외부로부터의 접속이 가능하다고 판단된 다른 클라이언트에 대한 접속 정보를 전송하는 접속 정보 전송 모듈을 포함한다.
상기 클라이언트 정보 관리부는, 상기 복수의 클라이언트의 각각을, 상기 접속 가능 여부 판단 모듈에 의해 판단된 외부로부터의 접속 가능성 및 각 클라이언트의 데이터 전송 속도에 관한 정보를 기초로 계층적으로 분류하는 계층화 모듈을 더 포함해도 좋고, 이 경우 상기 접속 정보 전송 모듈은, 상기 스트리밍 제공부에 상기 스트리밍 데이터의 전송을 요청한 클라이언트에게, 상기 계층화 모듈에 의해 분류된 클라이언트 군(群) 중 당해 클라이언트보다 상위 계층에 속하는 클라이언트에 대한 접속 정보를 전송해도 좋다.
또한 상기 접속 정보 전송 모듈은, 당해 클라이언트가 속하는 계층의 바로 상위 계층에 속하는 클라이언트에 대한 접속 정보를 전송해도 좋다.
본 발명은, 상기 계층화 모듈을 더 포함함으로써, 서버는 P2P 데이터 전송을 이용한 분산 스트리밍에 있어서 특정 클라이언트가 스트리밍 데이터를 전송받기 위하여 접속할 다른 클라이언트를 보다 효율적으로 선택할 수 있다. 이로써 다른 클라이언트에게 스트리밍 데이터를 전송할, 즉 서버 역할을 할 클라이언트를 선정하는 것에 따른 서버의 부담이 감소되며, 동시에 각각의 클라이언트는 외부로부터 접속이 가능한 클라이언트 중에서 데이터를 전송받기에 적합한 클라이언트를 선택하기 위하여 각각의 클라이언트에 일일이 접속해야 하는 수고를 덜게 되어 각 클라이언트의 부담이 감소될 수 있다. 또한, 복수의 클라이언트 간의 계층 구조를 통해 최상위 클라이언트로부터 최하위 클라이언트로 이어지는 최적화된 스트리밍 데이터 전송망을 구축할 수 있으므로 전체 시스템의 데이터 전송 지연을 방지할 수 있고 보다 신속하게 데이터를 전송할 수 있는 효과가 있다.
상기 접속 정보 취득 모듈은 상기 접속 정보로서, 상기 클라이언트로부터 공인 아이피와 포트에 관한 정보, 및 사설 아이피와 포트에 관한 정보를 취득해도 좋다. 본 발명은 상기 접속 정보 취득 모듈에 의해 클라이언트로부터 공인/사설 아이피와 포트에 관한 정보를 취득함으로써, 당해 클라이언트가 물리적 방화벽이나 인터넷 공유기를 사용하고 있는지 여부를 판단할 수 있게 되는 효과가 있다.
상기 접속 가능 여부 판단 모듈은, 상기 접속 정보 취득 모듈이 취득한 정보를 기초로, 상기 클라이언트에게 UDP 프로토콜을 이용하여 테스트용 데이터를 전송하고 상기 클라이언트가 상기 데이터를 전송받을 수 있는 경우에, 상기 클라이언트를 외부로부터 접속이 가능한 클라이언트로서 판정해도 좋다. 이로써 본 발명은, 각 클라이언트에 대해 다른 클라이언트들이 당해 클라이언트로부터 UDP 프로토콜을 이용하여 데이터를 전송받을 수 있는지 여부를 판단할 수 있으며, 따라서 각 클라이언트가 UDP 홀펀칭을 이용한 P2P 데이터 전송에 있어서 다른 클라이언트에 대하여 서버 역할을 할 수 있는 클라이언트인지 여부를 판단할 수 있다.
나아가 상기 스트리밍 제공부는, 상기 스트리밍 데이터를 소정의 크기로 분할하여 부분 데이터를 생성하고 상기 부분 데이터의 각각에 일련 번호를 할당하는 데이터 분할 모듈을 더 포함해도 좋다.
이 경우 상기 부분 데이터는, 256바이트에서 8k바이트의 범위를 갖되, UDP 패킷으로 한번에 전달 가능한 크기를 넘지 않는 크기를 가져도 좋다.
본 발명은 상기 데이터 분할 모듈을 더 포함함으로써, 각각의 부분 데이터가 식별 정보인 일련 번호를 통해 식별되도록 할 수 있고, 이로써 서버나 다른 클라이언트와의 스트리밍 데이터의 전송 도중 연결이 끊어지거나 데이터가 누락되더라도 상기 일련 번호를 기초로 필요한 부분 데이터를 요청함으로써 다시 이어받도록 할 수 있는 효과가 있다. 또한, 네트워크의 상황에 무관하게 미리 정해진 일정한 크기로 분할된 부분 데이터를 전송하는 것이 아니라, 데이터가 스트리밍 되는 당시의 네트워크 상황에 적합한 크기로 데이터를 분할하여 각 클라이언트에게 전송함으로써 더욱 효율적인 스트리밍 서비스를 제공할 수 있는 효과가 있다.
상기 스트리밍 제공부는, 상기 부분 데이터를 순차적으로 일정 시간 저장하는 버퍼를 더 포함하되, 상기 데이터 전송 모듈은 상기 버퍼에 저장된 부분 데이터를 상기 클라이언트로 전송해도 좋다.
또한 상기 데이터 요청 수신 모듈은, 상기 클라이언트로부터 특정 일련 번호의 부분 데이터의 전송 요청을 수신하고, 상기 데이터 전송 모듈은, 상기 데이터 요청 수신 모듈이 상기 수신한 일련 번호에 해당하는 부분 데이터를 전송해도 좋다.
한편, 본 발명의 다른 국면에 의하면, UDP 홀펀칭을 이용한 피어 대 피어(peer to peer; p2p) 데이터 전송을 통해 라이브 스트리밍 데이터의 분산 전송을 가능하게 하는 분산 스트리밍 방법이며, 서버가 그에 접속한 복수의 클라이언트 각각으로부터, 외부로부터 당해 클라이언트에 접속하는데 필요한 접속 정보를 취득하는 접속 정보 취득 단계, 상기 서버가 상기 복수의 클라이언트의 각각에 대해, 외부로부터의 접속이 가능한지 여부를 판단하는 접속 가능 여부 판단 단계, 상기 서버가 상기 클라이언트로부터, 소정의 식별 정보에 의해 서로 구분되는 복수의 부분 데이터로 구성되는 상기 스트리밍 데이터의 전송 요청을 수신하는 데이터 요청 수신 단계, 상기 요청에 응답하여, 상기 서버가 상기 스트리밍 데이터 중 상기 요청을 수신한 시점에 대응하는 하나 또는 그 이상의 부분 데이터를 상기 클라이언트로 전송하는 데이터 전송 단계, 상기 서버에 상기 스트리밍 데이터의 전송을 요청한 클라이언트에게, 상기 접속 가능 여부 판단 단계에서 외부로부터의 접속이 가능하다고 판단된 다른 클라이언트에 대한 접속 정보를 전송하는 접속 정보 전송 단계, 및 상기 서버에 상기 스트리밍 데이터의 전송을 요청한 상기 클라이언트가, 상기 접속 정보 전송 단계에서 전송받은 정보를 기초로 다른 클라이언트에게 접속하여 상기 스트리밍 데이터의 전송을 요청하는 P2P 전송 단계를 포함하는 분산 스트리밍 방법을 제공한다.
상기 분산 스트리밍 방법은, 상기 복수의 클라이언트의 각각을, 상기 접속 가능 여부 판단 단계에서 판단된 외부로부터의 접속 가능성 및 각 클라이언트의 데이터 전송 속도에 관한 정보를 기초로 계층적으로 분류하는 계층화 단계를 더 포함해도 좋고, 이 경우 상기 접속 정보 전송 단계에서, 상기 서버에 상기 스트리밍 데이터의 전송을 요청한 클라이언트에게, 상기 계층화 단계에서 분류된 클라이언트 군 중, 당해 클라이언트보다 상위 계층에 속하는 클라이언트에 대한 접속 정보를 전송해도 좋다.
또한 상기 분산 스트리밍 방법은, 상기 접속 정보 전송 단계에서, 당해 클라이언트가 속하는 계층의 바로 상위 계층에 속하는 클라이언트에 대한 접속 정보를 전송해도 좋다.
상기 분산 스트리밍 방법은, 상기 접속 정보 취득 단계에서, 상기 클라이언트의 공인 아이피와 포트에 관한 정보, 및 사설 아이피와 포트에 관한 정보를 상기 접속 정보로서 취득해도 좋다.
상기 분산 스트리밍 방법은, 상기 접속 가능 여부 판단 단계에서, 상기 접속 정보 취득 단계에서 취득된 정보를 기초로, 상기 클라이언트에게 UDP 프로토콜을 이용하여 테스트용 데이터를 전송하고, 상기 클라이언트가 상기 데이터를 전송받을 수 있는 경우에, 상기 클라이언트를 외부로부터 접속 가능한 클라이언트로서 판정해도 좋다.
상기 분산 스트리밍 방법은, 상기 스트리밍 데이터를 소정의 크기로 분할하여 부분 데이터를 생성하고 상기 부분 데이터의 각각에 일련 번호를 할당하는 데이터 분할 단계를 더 포함해도 좋다. 여기서 상기 부분 데이터는, 256바이트에서 8k바이트의 범위를 갖되, UDP 패킷으로 한번에 전달 가능한 크기를 넘지 않는 크기를 가져도 좋다.
상기 분산 스트리밍 방법은, 상기 부분 데이터를 순차적으로 일정 시간 버퍼에 저장하는 단계를 더 포함하되, 상기 데이터 전송 단계에서, 상기 버퍼에 저장된 부분 데이터를 상기 클라이언트로 전송해도 좋다.
상기 분산 스트리밍 방법은, 상기 데이터 요청 수신 단계에서, 상기 클라이언트로부터 특정 일련 번호의 부분 데이터 전송 요청을 수신하고, 상기 데이터 전송 단계에서, 상기 수신한 일련 번호에 해당하는 부분 데이터를 전송해도 좋다.
본 발명의 또다른 국면에 의하면, UDP 홀펀칭을 이용한 피어 대 피어(peer to peer; p2p) 데이터 전송을 통해 라이브 스트리밍 데이터의 분산 전송을 가능하게 하는 분산 스트리밍 시스템이며, 상기 시스템에 접속하여 스트리밍 데이터를 요청하는 복수의 클라이언트의 각각에, 소정의 식별 정보에 의해 서로 구분되는 복수의 부분 데이터로 구성되는 스트리밍 데이터를 전송하는 스트리밍 제공부, 상기 클라이언트에 관한 정보를 취득하고 상기 시스템에 접속한 다른 클라이언트에게 상기 정보를 전달하는 클라이언트 정보 관리부, 및 상기 복수의 클라이언트의 각각에 설치되고, 상기 스트리밍 제공부 및 다른 클라이언트 중 적어도 어느 하나로부터 스트리밍 데이터를 전송받거나, 또 다른 클라이언트에게 상기 전송받은 스트리밍 데이터를 전송하는 클라이언트측 제어부를 포함한다. 상기 스트리밍 제공부는, 상기 클라이언트로부터 상기 스트리밍 데이터의 전송 요청을 수신하는 데이터 요청 수신 모듈, 및 상기 요청에 응답하여 상기 스트리밍 데이터 중 상기 요청을 수신한 시점에 대응하는 하나 또는 그 이상의 부분 데이터를 상기 클라이언트로 전송하는 데이터 전송 모듈을 포함한다. 상기 클라이언트 정보 관리부는, 상기 복수의 클라이언트의 각각에 대해, 외부로부터 당해 클라이언트에 접속하는데 필요한 접속 정보를 취득하는 접속 정보 취득 모듈, 상기 복수의 클라이언트의 각각에 대해 테스트용 데이터를 전송하고, 상기 테스트용 데이터에 대한 응답을 기초로 외부로부터의 접속이 가능한지 여부를 판단하는 접속 가능 여부 판단 모듈, 및 상기 스트리밍 제공부에 상기 스트리밍 데이터의 전송을 요청한 클라이언트에게, 상기 접속 가능 여부 판단 모듈에 의해 외부로부터의 접속이 가능하다고 판단된 다른 클라이언트에 대한 접속 정보를 전송하는 접속 정보 전송 모듈을 포함한다. 상기 클라이언트측 제어부는, 당해 클라이언트에 대한 접속 정보를 취득하고, 이를 상기 클라이언트 정보 관리부에 전달하는 접속 정보 전달 모듈, 상기 클라이언트 정보 관리부로부터 상기 테스트용 데이터를 수신하고, 상기 테스트용 데이터에 응답하는 데이터를 상기 클라이언트 정보 관리부에 전송하는 접속 가능 여부 응답 모듈, 상기 클라이언트 정보 관리부로부터 상기 외부 접속이 가능한 클라이언트에 대한 접속 정보를 수신하는 접속 정보 수신 모듈, 상기 스트리밍 제공부에 상기 스트리밍 데이터의 전송을 요청하는 데이터 요청 모듈, 상기 접속 정보 수신 모듈에 의해 수신된 정보를 기초로 상기 외부 접속이 가능한 클라이언트에게 상기 스트리밍 데이터의 전송을 요청하는 클라이언트 데이터 요청 모듈, 상기 스트리밍 제공부 또는 상기 외부 접속이 가능한 클라이언트로부터 스트리밍 데이터의 부분 데이터를 수신하고, 상기 수신된 부분 데이터를 당해 클라이언트의 스트리밍 재생 모듈에 전달하는 데이터 수신 모듈, 다른 클라이언트로부터 상기 스트리밍 데이터에 관한 전송 요청이 수신되면, 이에 응답하여, 상기 스트리밍 데이터 중 당해 요청을 수신한 시점에 대응하는 하나 또는 그 이상의 부분 데이터를, 상기 다른 클라이언트에게 전송하는 클라이언트 데이터 전송 모듈을 포함한다.
상기 클라이언트 정보 관리부는, 상기 접속 가능 여부 판단 모듈에 의해 판단된 외부로부터의 접속 가능성 및 각 클라이언트의 데이터 전송 속도에 관한 정보를 기초로, 상기 복수의 클라이언트를 계층적으로 분류하는 계층화 모듈을 더 포함해도 좋다. 이 경우, 상기 접속 정보 전송 모듈은, 상기 스트리밍 제공부에 상기 스트리밍 데이터의 전송을 요청한 클라이언트에게, 상기 계층화 모듈에 의해 분류된 클라이언트 군(群) 중 당해 클라이언트보다 상위 계층에 속하는 클라이언트에 대한 접속 정보를 전송해도 좋다.
또한, 상기 클라이언트측 제어부는, 상기 클라이언트 정보 관리부에게 상기 외부 접속이 가능한 클라이언트에 대한 접속 정보의 전송을 요청하는 접속 정보 요청 모듈을 더 포함해도 좋다. 이 경우, 클라이언트 정보 관리부는, 상기 클라이언트로부터의 다른 클라이언트에 대한 접속 정보의 요청을 수신하는 접속 정보 요청 수신 모듈을 더 포함해도 좋고, 상기 접속 정보 전송 모듈은, 상기 접속 정보 요청 수신 모듈이 수신한 요청에 응답하여 당해 요청을 전송한 클라이언트에게, 상기 접속 가능 여부 판단 모듈에 의해 외부로부터의 접속이 가능하다고 판단된 다른 클라이언트에 대한 접속 정보를 전송해도 좋다.
또한 상기 접속 정보 요청 모듈은, 상기 클라이언트 정보 관리부에게, 당해 클라이언트보다 상위 계층에 속하는 클라이언트에 대한 접속 정보를 요청해도 좋다. 이 경우, 상기 접속 정보 전송 모듈은, 상기 스트리밍 제공부에 상기 스트리밍 데이터의 전송을 요청한 클라이언트에게, 상기 계층화 모듈에 의해 분류된 클라이언트 군(群) 중 당해 클라이언트보다 상위 계층에 속하는 클라이언트에 대한 접속 정보를 전송해도 좋다.
본 발명은 상기 구성에 의하여, 각 클라이언트가 다른 클라이언트에 대한 접속 정보를 요청한 때에, 서버 즉 클라이언트 정보 관리부로부터 당해 클라이언트에게 다른 클라이언트에 대한 접속 정보를 전송하는 기능을 실현할 수 있다. 따라서, 서버가 모든 클라이언트에게 외부로터 접속 가능한 다른 클라이언트에 대한 접속 정보를 전송하는 것에 따른 시스템 부하가 감소되고, 또한 각 클라이언트는 다른 클라이언트에 대한 접속 정보를 전송받는 시점을 선택할 수 있다.
또한, 상기 클라이언트측 제어부는, 상기 스트리밍 제공부 또는 다른 클라이언트로부터 수신한 부분 데이터를 저장하는 버퍼를 더 포함할 수 있다. 이 경우, 상기 클라이언트측 제어부의 상기 데이터 수신 모듈은, 상기 접속 정보 전송 모듈로부터 접속 정보가 전송된 상위 계층의 클라이언트 중 하나 또는 그 이상으로부터 부분 데이터를 수신하고, 상기 수신된 부분 데이터를 조합하여 스트리밍 데이터를 구성해도 좋다. 이로써 본 발명은, 각 클라이언트가 서버 또는 다른 클라이언트로부터 수신한 부분 데이터를 상기 버퍼에 저장하고, 또 다른 클라이언트로부터 상기 데이터에 관한 요청이 있는 경우, 상기 버퍼에 저장된 데이터를 소정의 데이터베이스로부터의 검색 과정을 거치지 않고서 전송할 수 있으므로, 다른 클라이언트로 전송할 부분 데이터의 검색에 따른 각 클라이언트 측의 부하가 감소되고 동시에 데이터의 신속한 전송이 가능하게 된다.
한편 본 발명의 또다른 국면에 의하면, UDP 홀펀칭을 이용한 피어 대 피어(peer to peer; p2p) 데이터 전송을 통해 라이브 스트리밍 데이터의 분산 전송을 가능하게 하는 분산 스트리밍 방법에 있어서, 복수의 클라이언트가 서버에 접속하는 단계, 상기 서버가 상기 클라이언트로부터 그에 접속하는데 필요한 접속 정보를 수신하는 단계, 상기 서버가 상기 클라이언트에 대해, 당해 클라이언트에 대한 상기 접속 정보를 이용하여 테스트용 데이터를 전송하는 접속 가능 여부 시험 단계, 상기 클라이언트가 상기 서버로부터 전송되는 상기 테스트용 데이터를 수신하고, 상기 테스트용 데이터에 응답하는 데이터를 상기 서버에 전송하는 접속 가능 여부 응답 단계, 상기 서버가, 상기 접속 가능 여부 응답 단계에서 상기 클라이언트로부터 전송된 데이터를 기초로, 상기 클라이언트가 외부로부터의 접속이 가능하지 여부를 판단하는 접속 가능 여부 판단 단계, 상기 클라이언트가 상기 서버에게 소정의 식별 정보에 의해 서로 구분되는 복수의 부분 데이터로 구성되는 스트리밍 데이터의 전송을 요청하는 데이터 요청 단계, 상기 서버가 상기 클라이언트로부터 상기 스트리밍 데이터의 전송 요청을 수신하는 데이터 요청 수신 단계, 상기 서버가, 상기 클라이언트로부터의 상기 스트리밍 데이터의 전송 요청에 응답하여, 상기 스트리밍 데이터 중 상기 데이터의 전송 요청을 수신한 시점에 대응하는 하나 또는 그 이상의 부분 데이터를 상기 클라이언트로 전송하는 데이터 전송 단계, 상기 클라이언트가 상기 서버로부터 전송되는 상기 스트리밍 데이터의 부분 데이터를 수신하는 데이터 수신 단계, 상기 서버가 상기 클라이언트에게, 상기 접속 가능 여부 판단 단계에서 외부로부터의 접속이 가능하다고 판단된 다른 클라이언트에 대한 접속 정보를 전송하는 접속 정보 전송 단계, 상기 클라이언트가 상기 서버로부터 상기 다른 클라이언트에 대한 접속 정보를 수신하는 접속 정보 수신 단계, 상기 클라이언트가, 상기 접속 정보 수신 단계에서 수신된 정보를 기초로, 상기 다른 클라이언트에게 상기 스트리밍 데이터의 전송을 요청하는 클라이언트 데이터 요청 단계, 상기 클라이언트로부터의 상기 스트리밍 데이터의 전송 요청을, 상기 다른 클라이언트가 수신하는 클라이언트 데이터 요청 수신 단계, 상기 다른 클라이언트가, 상기 스트리밍 데이터의 전송 요청에 응답하여, 상기 스트리밍 데이터 중 상기 데이터의 전송 요청을 수신한 시점에 대응하는 하나 또는 그 이상의 부분 데이터를 전송하는 클라이언트 데이터 전송 단계, 상기 클라이언트가 상기 다른 클라이언트로부터 전송되는 스트리밍 데이터의 상기 부분 데이터를 수신하는 클라이언트 데이터 수신 단계, 및 상기 클라이언트가, 상기 서버 또는 상기 다른 클라이언트로부터 수신된 부분 데이터를 당해 클라이언트의 스트리밍 재생 모듈에 전달하는 데이터 전달 단계를 포함하는 분산 스트리밍 방법을 제공한다.
본 발명에 의하면, 스트리밍 데이터를 요청하기 위해 클라이언트가 서버에 접속하면, 서버가 당해 클라이언트에 접속하는데 필요한 정보, 예컨대, IP와 포트 정보를 취득하고 그 정보를 다른 클라이언트에게 통지함으로써, 두 클라이언트 사이에 스트리밍 데이터의 전송이 이루어질 수 있다. 이로써, 클라이언트들이 서버가 아닌 다른 클라이언트에 접속하여 그로부터 스트리밍 데이터를 전송받기 때문에, 서버가 그에 접속한 복수의 클라이언트 모두에게 스트리밍 데이터 전체를 전송할 필요가 없고, 이에 따라 서버의 부담이 크게 경감된다. 즉, 서버가 그에 접속한 N개의 모든 클라이언트에 1:N 방식으로 데이터 스트림을 전송하는 것이 아니라, 일부의 클라이언트에게만 데이터 스트림을 전송하면 상기 데이터를 전송받은 클라이언트가 다른 클라이언트에게 상기 데이터를 전송하는 방식을 통해 데이터 전송을 분산하여 서버의 부담을 감소시킬 수 있다.
또한 본 발명에 의하면, 서버가 그에 접속하는 클라이언트의 IP 및 포트 정보 등의 접속 정보를 취득하고 당해 정보를 다른 클라이언트에게 통지하여 줌으로써, 방화벽/NAT 등에 의하여 외부에서 직접적으로는 연결이 불가능한 클라이언트도 다른 클라이언트와 데이터 송수신이 가능하게 된다. 따라서, 방화벽 내부에 있는 클라이언트들끼리는 서로 데이터를 송수신할 수 없었던 기존의 기술에 비해 스트리밍 데이터의 전송 분산의 효율을 크게 향상시킬 수 있다.
또한 본 발명에 의한 분산 스트리밍 시스템은, 스트리밍 데이터의 전송을 위한 각 클라이언트 측의 스트리밍 재생용 모듈과는 별도로 유지 보수되므로, 프로그램의 개발 및 유지 보수가 유리해질 수 있다.
도 1은, 기존의 기술에 의한 분산 스트리밍 시스템과 그에 접속한 사용자측 클라이언트 사이의 접속 네트워크를 개념적으로 도시한 개념도이다.
도 2는, 본 발명에 의한 분산 스트리밍 시스템 100의 구성을 개념적으로 도시하는 블록도이다.
도 3은, 본 발명에 의한 분산 스트리밍 시스템 100 및 그에 접속한 사용자측 클라이언트 사이의 데이터 전송을 개념적으로 도시한 개념도이다.
도 4a 및 4b는, 본 발명에 의한 분산 스트리밍 시스템에 의한 스트리밍 분산 과정을 순차적으로 도시한 흐름도이다.
도 5a 내지 5f는, 본 발명에 의한 분산 스트리밍 시스템과 사용자측 클라이언트 사이의 접속 네트워크를 개념적으로 도시한 개념도이다.
도 6a 내지 6d는, 본 발명의 계층화 모듈에 의해 계층화된 복수의 클라이언트를 개념적으로 도시한 개념도이다.
이하, 발명의 실시의 형태를 통해 본 발명을 설명하지만, 이하의 실시 형태는 청구의 범위에 의한 발명을 한정하는 것은 아니며, 또한 실시 형태 중에 설명되고 있는 특징의 조합 전부가 발명의 해결 수단에 필수적이라고는 할 수 없다.
도 1a은 기존의 기술에 의한 분산 스트리밍 시스템과 그에 접속한 사용자측 클라이언트 사이의 접속 네트워크를 개념적으로 도시한 개념도이고, 도 1b는 본 발명에 의한 분산 스트리밍 시스템과 함께 그에 접속한 사용자측 클라이언트를 도시한 P2P 네트워크를 개념적으로 도시한 개념도이다. 도 1a에 도시된 바와 같이, 기존의 기술에 의하면, 서버에 접속하여 스트리밍 데이터를 요청한 클라이언트 중 방화벽 내부에 있는 클라이언트 210, 230은 다른 클라이언트들과 직접 TCP 연결을 구성할 수 없어 데이터 분산 효율이 떨어진다. 반면, 도 1b에 도시된 바와 같이, 본 발명에 의한 서버 100에 접속한 클라이언트 210, 230은 방화벽 외부에 있는 다른 클라이언트들 220과 240뿐만 아니라 방화벽 내부에 있는 클라이언트 210, 230 상호 간에도 패킷 데이터를 송수신할 수 있다. 이에 따라, 데이터 분산 효율이 크게 향상되고, 서버의 데이터 전송 부담도 경감할 수 있다.
본 발명에 의한 멀티미디어 라이브 스트리밍 시스템은, 그에 접속한 클라이언트에게 멀티미디어 콘텐츠를 라이브 스트리밍으로 공급하고 클라이언트들에 관한 정보를 관리하는 서버 100이다. 상기 사용자측 클라이언트 210 내지 240(이들을 통칭하여, "클라이언트 200"이라고 한다)은, 인터넷망 등의 유선 또는 무선 네트워크를 통하여 상기 서버 100에 접속할 수 있는 단말기이다. 특히, 클라이언트 200은, 유선 또는 무선 인터넷 접속기능을 가진 개인용 컴퓨터, 개인 휴대 단말기 등으로 구현될 수 있으며, 이러한 클라이언트를 구현하기 위한 하드웨어 및 소프트웨어의 상세에 관하여는, 본 발명의 기술 분야에서 이미 널리 알려져 있으므로 이를 생략한다. 나아가, 상기 서버 100과 클라이언트 200의 기능을 지원하는 모든 통상적인 하드웨어 및 소프트웨어 자원도 역시 상기 서버 100 및 클라이언트 200에 구비되는 것으로 이해되어야 한다.
상기 서버 100은, 스트리밍 데이터를 클라이언트로 전송하는 스트리밍 서버 110과, 각각의 클라이언트에 접속할 수 있는 정보를 취득하고, 당해 클라이언트가 외부로부터의 접속이 가능한지를 판단하여, 접속 가능하다고 판단한 클라이언트에 대한 정보를 다른 클라이언트로 전송하는 클라이언트 정보 관리 서버 120을 포함한다. 상기 스트리밍 데이터는, 클라이언트 측의 단말기에 의해 수신되고, 디코딩 및 렌더링되는 패킷의 스트림이며, 각각이 고유의 식별 정보에 의해 식별가능한 복수의 부분 데이터로 구성된다. 이와 같이 스트리밍 데이터를 복수의 부분 데이터로 분할하는 이유는, P2P 방식에서 피어 역할을 담당하는 클라이언트들에게 데이터 전송 부하를 분산시킬 수 있기 때문이다. 여기서, 부분 데이터는 스트리밍 데이터를 일정한 데이터 단위로 분할한 것일 수 있지만, 이에 한정되지는 않는다. 이와 같은 패킷 스트림을 생산하고 공급하기 위한 하드웨어 또는 소프트웨어적 구현 기술은 이미 본 발명의 기술 분야에서 널리 알려져 있는 것이므로, 본 발명의 특징적인 부분에 필요한 것 이외에는 그 상세를 생략한다.
클라이언트 200에는, 당해 클라이언트에 대한 접속 정보를 취득하고, 이를 서버 100에게 전달하는 접속 정보 전달 모듈, 상기 서버 100의 외부로부터의 접속 가능성 판단 동작에 대해 응답하는 접속 가능 여부 응답 모듈, 상기 서버 100으로부터 다른 클라이언트의 접속 정보를 수신하는 접속 정보 수신 모듈, 상기 서버 100에게 스트리밍 데이터의 전송을 요청하는 데이터 요청 모듈, 상기 서버 100으로부터 수신한 다른 클라이언트에 대한 접속 정보를 기초로 다른 클라이언트에게 스트리밍 데이터의 전송을 요청하는 클라이언트 데이터 요청 모듈, 서버 100 또는 다른 클라이언트로부터 스트리밍 데이터를 수신하고, 상기 수신된 데이터를 당해 클라이언트의 스트리밍 재생 모듈에 전달하는 데이터 수신 모듈, 및 다른 클라이언트로부터 스트리밍 데이터에 관한 전송 요청이 수신되면, 이에 응답하여 소정의 스트리밍 데이터를 전송하는 클라이언트 데이터 전송 모듈을 포함하는 소프트웨어(이하, 전용 소프트웨어라고 함)가 설치된다. 또한 상기 전용 소프트웨어는, 서버 또는 다른 클라이언트로부터 수신한 부분 데이터를 저장하는 버퍼를 더 포함할 수 있다.
상기 전용 소프트웨어에 의해 상기 서버 100과 클라이언트 200 사이, 그리고 각각의 클라이언트 200 사이의 통신이 가능하게 된다. 또한, 상기 클라이언트 200에는 수신한 패킷 스트림을 디코딩하고 랜더링하는 스트리밍 재생용 소프트웨어가 설치되며, 필요에 따라, 부분 데이터의 형태로 전송되는 스트리밍 데이터를 조합하여 재생 가능한 형태로 복원하는 데이터 조합 모듈이 설치될 수 있고, 서버 또는 다른 클라이언트로부터 스트리밍 데이터의 부분 데이터를 수신하는 데이터 수신 모듈이 상기 기능을 수행할 수 있고, 당해 데이터 조합 모듈은 상기 재생용 소프트웨어 내에 구현된 소정의 기능적 모듈로서 포함될 수도 있다.
이때 상기 전용 소프트웨어 및/또는 재생용 소프트웨어 등의 설치 방법에는, 사용자가 최초로 서버에 접속한 때 서버 100으로부터 액티브 엑스(Active X) 방식으로 클라이언트 200에 자동적으로 설치되도록 하는 방법, 또는 최초 접속시 상기 전용 소프트웨어를 다운로드(Download)하여 설치하도록 하는 방법, 또는 미리 제작된 설치용 기록매체(예컨대, CD-ROM)로 사용자가 직접 자신의 개인용 컴퓨터에 설치하도록 하는 방법 등이 있을 수 있다. 상기 전용 소프트웨어 및 재생용 소프트웨어는 그와 동일한 동작을 실현하는 하드웨어로서 구현될 수도 있다는 사실 또한 당업자에게 자명하다.
이하에서 도 2 내지 도 6을 참조하여, 본 발명의 분산 스트리밍 시스템의 실시예에 관하여 구체적으로 설명한다.
도 2는 발명의 일 실시예에 의한 서버 100의 구성을 도시한다. 도 2에 도시된 바와 같이, 서버 100은, 스트리밍 서버 110, 클라이언트 정보 관리 서버 120, 중앙 처리 장치, 네트워크 어댑터 등과 같은 하드웨어 140, 특정한 기능들을 수행하기 위한 애플리케이션들, 상기 하드웨어와 애플리케이션들을 운영하고 제어하는 운영체계 등의 소프트웨어 150, 월드 와이드 웹(World Wide Web) 서비스를 제공하기 위한 웹 페이지 160을 포함한다. 이들 구성요소들은 버스 170을 통하여 상호 간에 데이터를 송수신한다. 그러나, 서버 100의 구성은 이에 한정되지 않는다. 예컨대, 상기 스트리밍 서버 110과 클라이언트 정보 관리 서버 120은 물리적으로 서로 분리되어도 좋고, 물리적으로 통합된 서버로서 구성되어도 좋으며, 각 구성 요소가 버스 170으로 연결되지 않고, 스트리밍 서버 110과 클라이언트 정보 관리 서버 120이 인터넷 등의 통신망에 의해 데이터를 송수신함으로써 서로 연결되어도 좋다. 그러나, 설명의 단순화를 위하여, 도 2에 도시된 서버의 구성을 중심으로 그 동작을 설명한다.
상기 스트리밍 서버 110은, 클라이언트 200이 스트리밍 데이터의 전송을 요청하는 경우 상기 요청을 수신하는 데이터 요청 수신 모듈 112, 상기 요청에 응답하여 스트리밍 데이터의 헤더 및 스트리밍 데이터를 상기 클라이언트 200으로 전송하는 데이터 전송 모듈 114를 포함한다.
상기 스트리밍 데이터는 스트리밍 데이터베이스에 저장될 수 있다. 스트리밍 데이터베이스에 저장되는 스트리밍 데이터는 하나 또는 그 이상일 수 있고, 복수의 스트리밍 데이터가 저장된 경우 상기 서버 100은 상기 복수의 스트리밍 데이터 중 클라이언트 200이 요청하는 데이터를 선택하여 로딩할 수 있는 모듈을 더 포함할 수 있다. 또한, 서버 100은, 상기 스트리밍 데이터베이스에 저장된 데이터를 신규 저장, 변경, 삭제 등의 동작을 행할 수 있는 모듈을 더 포함할 수 있으며, 상기 스트리밍 데이터베이스는 하드 디스크를 포함하는 각종 형태의 저장 장치로서 상기 서버 100과 물리적으로 통합된 장치 내에 구현될 수 있음은 물론, 인터넷 등의 통신망에 의해 연결되는 원격 장치 내에 구현될 수도 있다.
또한, 상기 스트리밍 데이터는 미리 디지털 형태로 저장되어 있는 데이터가 아닌, 아날로그 데이터로부터 실시간으로 디지털 데이터로 변환되는 데이터일 수 있다. 이 경우, 상기 서버 100은, 아날로그 데이터를 디지털 데이터로 변환할 수 있는 변환 모듈을 포함할 수 있고, 상기 변환된 데이터를 클라이언트에게 스트리밍하기 위해 일정한 시간 동안 상기 변환된 데이터의 일부 또는 전부를 저장하는 버퍼를 더 포함할 수 있다.
도 2에 도시된 바와 같이, 데이터 전송 모듈 114에 의해 전송될 스트리밍 데이터 115는, 복수 개의 부분 데이터로 구성된다. 상기 스트리밍 데이터의 헤더는 스트리밍에 대한 기초적인 정보들, 예컨대, 비디오 해상도, 비트 레이트(bit rate), 오디오 정보 등을 포함한다. 그리고 상기 부분 데이터는, 데이터 분할 모듈 130에 의해 전체 스트리밍 데이터로부터 분할되어 블록화되고, 재생되어야 할 순서에 따라 1, 2, 3,...의 순차적으로 증가하는 정수인 일련 번호가 부여될 수 있다. 이에 관하여는 후술한다.
데이터 전송 모듈 114는 어떤 클라이언트 200으로부터 데이터 요청이 있으면, 그 요청을 수신한 시점에 대응하는 부분 데이터를 당해 클라이언트 200으로 전송한다. 보다 구체적으로, 상기 데이터 요청 수신 모듈 112가 상기 클라이언트 200의 데이터 요청 모듈로부터 스트리밍 데이터의 전송에 관한 요청을 수신한 경우, 그 요청을 수신한 시점에 대응하는 부분 데이터를 상기 헤더와 함께, 소정의 스트리밍 데이터베이스 또는 내부 버퍼로부터 당해 클라이언트 200으로 전송하고, 상기 전송되는 데이터를 상기 클라이언트 200의 데이터 수신 모듈이 수신한다. 이때, 데이터 전송 모듈 114에 의해 클라이언트 200으로 전송되는 부분 데이터의 수는 단지 하나일 수도 있고, 복수일 수도 있으며, 이는 부분 데이터가 분할되는 방식이나 서로 다른 클라이언트들이 서버 100에 접속하는 빈도 등에 따라 결정되는 것이 바람직하다. 도 3을 참조하면, 클라이언트 210이 스트리밍 서버 110에 스트리밍 데이터를 요청했을 때 그 시점에 대응하는 부분 데이터의 일련 번호가 "1"이라면 스트리밍 서버 110은 클라이언트 210으로 데이터 헤더와 함께 부분 데이터 "1"을 전송한다. 그리고 서버 110은 다른 클라이언트가 접속할 때까지 부분 데이터를 순차적으로 클라이언트 210으로 전송한다. 다른 클라이언트 230이 스트리밍 서버 110에 스트리밍 데이터를 요청하면, 스트리밍 서버 110은 클라이언트 210에 대한 데이터 전송을 잠시 중단하고 클라이언트 230에 대한 데이터 전송을 개시할 수 있다. 예를 들어, 클라이언트 230이 데이터 전송을 요청한 시점에서 부분 데이터 "4"가 스트리밍 되어야 한다면, 스트리밍 서버 110은 헤더와 부분 데이터 "4"를 클라이언트 230으로 전송한다. 그리고, 클라이언트 210은 접속 정보 수신 모듈을 통해, 후술할 클라이언트 정보 관리 서버 120으로부터 클라이언트 230에 대한 접속 정보를 전송받고, 상기 정보를 기초로 클라이언트 230에 접속하여 그로부터 부분 데이터 "4"를 전송받을 수 있다. 여기서, 만약 클라이언트 230으로의 데이터 전송이 실패하거나 클라이언트 230이 외부로부터 접속이 불가능한 클라이언트인 경우, 서버 110은 클라이언트 210에 계속하여 데이터를 전송하고, 클라이언트 230은 클라이언트 정보 관리 서버 120으로부터 클라이언트 210에 대한 접속 정보를 전송받고, 상기 정보를 기초로 클라이언트 210에 접속하여 부분 데이터 "4"를 전송받을 수 있다. 도 3에 도시된 바와 같이 상기 클라이언트 210 및 230이 방화벽 내부에 있는 피어인 경우에도, 상기와 같이 접속 가능하도록 하는 구성 및 동작에 관해서는 이하에서 상세히 기술한다.
클라이언트 정보 관리 서버 120은, 서버 100에 접속한 각각의 클라이언트에 대해, 외부로부터 당해 클라이언트에 접속하는데 필요한 접속 정보를 취득하는 접속 정보 취득 모듈 122, 상기 클라이언트의 각각에 대해, 외부로부터의 접속이 가능한지 여부를 판단하는 접속 가능 여부 판단 모듈 124, 및 상기 스트리밍 서버 110에 상기 스트리밍 데이터의 전송을 요청한 클라이언트에게, 당해 클라이언트가 다른 클라이언트에 접속하여 그로부터 상기 스트리밍 데이터를 수취할 수 있도록, 상기 접속 가능 여부 판단 모듈 124에 의해 외부로부터의 접속이 가능하다고 판단된 다른 클라이언트에 대한 접속 정보를 전송하는 접속 정보 전송 모듈 126을 포함한다. 상기 서버 100은, 그에 접속하는 사용자 각각에 대하여, 예컨대, 분산 스트리밍 시스템이 운영하는 웹페이지의 회원으로 가입된 정당한 사용자인지 여부를 확인하는 인증 동작을 수행하는 것이 바람직하지만, 이러한 인증 동작은 본 발명에 필수적인 것은 아니라는 점에 유의하여야 한다.
이하 도 4와 도 5를 참조하여, 스트리밍 서버 110과 클라이언트 정보 관리 서버 120의 동작에 관하여 구체적으로 살펴본다.
우선, 도 4a를 참조한다. 분산 스트리밍 시스템의 동작이 개시되고(S1000), 클라이언트 정보 관리 서버 120과 클라이언트 200의 접속이 이루어지면(S1002), 접속 정보 취득 모듈 122가 클라이언트 200으로부터 당해 클라이언트에 접속하여 데이터를 전송받는데 필요한 정보(이하, "접속 정보"라고도 함)를 취득한다. 이때, 상기 접속 정보 취득 모듈 122는 상기 접속 정보로서, 상기 클라이언트로부터 공인 아이피와 포트에 관한 정보, 및 사설 아이피와 포트에 관한 정보를 취득할 수 있다. 본 발명은 상기 접속 정보 취득 모듈 122가 클라이언트로부터 공인/사설 아이피와 포트에 관한 정보를 취득함으로써, 당해 클라이언트가 물리적 방화벽이나 인터넷 공유기를 사용하고 있는지 여부를 판단할 수 있다.
보다 구체적으로, 도 5a에 도시된 바와 같이, 클라이언트 200이 접속 정보 전달 모듈을 통해 외부로부터 당해 클라이언트에 접속하는데 필요한 접속 정보, 예컨대, 사설 IP 및 포트(PORT) 정보와 같은 접속 정보를 취득하고 이를 서버 100 측에 전달하면, 전달된 정보를 상기 접속 정보 취득 모듈 122가 수신한다(S1004). 이러한 접속 정보의 취득은, 필요에 따라, 서버 100 측에서 상기 클라이언트 200 측에 접속 정보를 요청하고, 상기 클라이언트 200이 당해 요청을 수신하고 그에 응답하여 접속 정보를 전송함으로써 이루어질 수도 있다. 상기 접속 정보 취득 모듈 122는, 예를 들면, 소켓 관련 함수를 이용하여 당해 클라이언트의 공인 IP 및 포트 정보를 취득할 수 있다.
다음으로, 도 5b에 도시된 바와 같이, 접속 가능 여부 판단 모듈 124가 상기 클라이언트 200이 외부에서 접속 가능한 클라이언트인지 여부인지 판단한다(S1006). 보다 구체적으로, 상기 접속 가능 여부 판단 모듈 124가 상기 클라이언트에게 테스트용 데이터를 전송하면, 상기 클라이언트의 접속 가능 여부 응답 모듈이 상기 전송된 테스트용 데이터를 수신한 다음 상기 테스트용 데이터에 응답하는 응답 데이터를 서버 100 측에 전송한다. 그리고, 상기 접속 가능 여부 판단 모듈 124가 상기 전송된 응답 데이터를 수신하고, 상기 응답 데이터를 기초로 상기 클라이언트가 외부에서 접속이 가능한 클라이언트인지 여부를 판단한다.
이때, 상기 접속 가능 여부 판단 모듈 124는, 상기 접속 정보 취득 모듈 122가 취득한 접속 정보를 기초로, 상기 클라이언트 200에게 UDP 프로토콜을 이용하여 테스트용 데이터를 전송하고, 상기 클라이언트 200이 상기 데이터를 전송받을 수 있는지 여부에 따라 상기 클라이언트가 외부로부터의 접속이 가능한 클라이언트인지를 판단할 수 있다. 본 발명은, 상기 접속 가능 여부 판단 모듈 124가 각 클라이언트에 대하여 UDP 프로토콜을 이용한 데이터의 전송이 가능한지 여부를 판단함으로써, 다른 클라이언트에게 당해 클라이언트에 대한 접속 정보를 전송하여 상기 다른 클라이언트가 당해 클라이언트에 접속하고 데이터를 전송받도록 할 것인지 아닌지를 결정할 수 있다.
보다 구체적으로, 상기 접속 가능 여부 판단 모듈 124는, 상기 접속 정보 취득 모듈 122가 수취한 사설 IP/포트 정보 및 공인 IP/포트 정보가 일치하지 않는 경우 상기 클라이언트가 물리적 방화벽이나 인터넷 공유기를 사용하고 있다고 판단할 수 있다. 그러나, 경우에 따라서는 별도의 사설 IP를 제공하는 경우가 아닌 순수한 방화벽 기능만을 담당하는 방화벽이 있는 경우에도 상기 사설 IP/포트 정보 및 공인 IP/포트 정보가 일치하지 않을 수 있다. 따라서, 상기 접속 가능 여부 판단 모듈 124는, i) 상기 클라이언트의 사설 IP/포트 정보와 공인 IP/포트 정보가 일치하는 경우에는 물리적 방화벽이나 인터넷 공유기를 사용하고 있지 않으므로, 상기 테스트용 데이터를 통해 외부로부터의 접속 가능 여부를 판단하지 않고도 상기 클라이언트가 외부에서 접속 가능하다고 판정할 수 있고, ii) 상기 클라이언트의 사설 IP/포트 정보와 공인 IP/포트 정보가 일치하지 않는 경우에는, 상기 클라이언트에게 UDP 프로토콜을 이용하여 테스트용 데이터, 예를 들면 핑(PING) 메시지를 전송하고 상기 클라이언트가 상기 전송된 UDP 패킷을 수취할 수 있는 경우 상기 클라이언트 200이 외부로부터 접속 가능한 클라이언트이고, 상기 UDP 패킷을 수취할 수 없는 경우 상기 클라이언트 200이 외부에서 접속 불가능한 클라이언트라고 판정할 수 있다.
다음으로, 도 5c에 도시된 바와 같이 클라이언트 200의 데이터 요청 모듈이 서버 100에 스트리밍 데이터를 요청하면, 데이터 요청 수신 모듈 112가 상기 요청을 수신하고 그에 응답하여 데이터 전송 모듈 114가 스트리밍 데이터, 예를 들면 스트리밍 헤더 및 부분 데이터를 전송한다(S1008). 그리고 그 전송된 데이터를 상기 클라이언트 200의 데이터 수신 모듈이 수신한다. 이 경우, 라이브 스트리밍 데이터를 전송하는 데이터 전송 모듈 114는 클라이언트 200이 접속한 시점에 대응하는 스트리밍 데이터 115의 부분 데이터를 당해 클라이언트에 전송한다. 예를 들면, 도 5d에 도시된 바와 같이, 클라이언트 210이 접속한 시점에 대응하는 스트리밍 데이터 115의 부분 데이터가 2인 경우, 상기 스트리밍 서버 110은 클라이언트 210에 대해서 부분 데이터 2부터 스트리밍을 개시하고, 클라이언트 220이 접속한 시점에 대응하는 부분 데이터가 4인 경우, 상기 스트리밍 서버 110은 클라이언트 220에 대해서 부분 데이터 4부터 스트리밍을 개시하고, 클라이언트 230이 접속한 시점에 대응하는 부분 데이터가 5인 경우, 상기 스트리밍 서버 110은 클라이언트 230에 대해서 부분 데이터 5부터 스트리밍을 개시한다. 즉, 라이브 스트리밍 시스템에 있어서, 특정한 시점(혹은 시간대)에 클라이언트에게 전송되는 데이터는, 스트리밍 데이터의 전송을 요청한 클라이언트가 그 이전의 시점에 전송된 데이터를 수취했는지 여부와 무관하게, 현재의 특정 시점에 대응하는 소정의 데이터가 될 수 있다.
한편, 상기 데이터 요청 수신 모듈 122는, 상기 클라이언트 200으로부터 특정 부분 데이터, 예를 들면, 특정한 일련 번호로 식별되는 부분 데이터에 관한 요청을 수신할 수 있고, 이 경우 상기 데이터 전송 모듈 114는, 상기 요청에 대응되는 부분 데이터를 전송할 수 있다. 또한, 상기 클라이언트 200이 특정한 부분 데이터를 요청하지 않는 경우에는, 상기 클라이언트 200으로부터의 스트리밍 전송에 관한 최초의 요청으로 인식하고, 효율적인 버퍼링에 적합한 임의의 부분 데이터를 전송할 수도 있다. 예를 들면, 라이브 스트리밍 시스템에 있어서, 상기한 바와 같이 스트리밍 데이터의 전송을 요청한 시점에 대응하는 부분 데이터를 전송할 수 있다. 또는, 가장 최근에 스트리밍된 일련 번호의 부분 데이터 또는 그 다음 일련 번호의 부분 데이터를 전송할 수도 있으며, 경우에 따라, 상기 스트리밍 서버 110으로부터 제공되는 스트리밍 데이터를 처음부터 스트리밍하도록 최초의 일련 번호를 갖는 부분 데이터를 전송할 수도 있다. 이에 관한 구성은 구현상의 선택 사항에 지나지 않으며, 본 발명의 기술 분야에서 통상의 지식을 가진 자는 다양한 변형, 변경 및 대체를 인식할 수 있을 것이다.
도 5d는 또한, UDP 분산 스트리밍을 개시하기 전, 클라이언트 200이 보다 빠른 버퍼링을 위해 스트리밍 서버 110에 접속하여 최초 스트리밍 데이터를 수취하는 것을 도시한다. 클라이언트 200이 네트워크의 지연 등으로 인해 재생이 지연되는 것을 방지하기 위해서는, 상기 클라이언트 200의 내부에서 충분한 버퍼링이 이루어져야 한다. 그런데, 처음부터 UDP 프로토콜을 이용한 P2P 분산 스트리밍을 통해 스트리밍 데이터를 전송하는 경우에는 초기 버퍼링의 시간이 지연될 수 있다. 따라서, 초기 버퍼링에 있어서는 그 시간을 단축시키기 위해, 다른 클라이언트로부터 데이터를 수취하지 않고, 보다 빠른 속도가 보장되는 스트리밍 서버 110으로부터 직접 데이터를 전송받는 것이 바람직하다. 또한 이 경우, 클라이언트 200은 TCP 프로토콜을 통해 상기 스트리밍 서버 110과 통신하는 것이 바람직하고, 이로써 보다 신뢰성 있고 안정적인 접속을 보장할 수 있다. 물론, 필요한 경우 초기 버퍼링에 있어서도 UDP 프로토콜을 사용할 수 있다.
한편, 상기 스트리밍 데이터의 초기 버퍼링은 상기 클라이언트의 접속 정보 취득(S1004)과 상기 클라이언트의 외부로부터의 접속 가능성의 판단(S1006)보다 선행될 수 있고, 상기 접속 정보 취득과 외부로부터의 접속 가능성의 판단 사이에 행해질 수도 있다. 또한, 상기 초기 버퍼링은 상기 클라이언트에 대한 접속 정보 취득 또는 외부로부터의 접속 가능성 판단이 이루어지는 도중에 행해질 수도 있다. 또한, 상기 스트리밍 데이터의 초기 버퍼링은 상기 클라이언트에 대한 접속 정보 취득 단계와 동시에 시작될 수도 있고, 상기 외부로부터의 접속 가능성의 판단 단계와 동시에 시작될 수도 있음을 유의하여야 할 것이다.
나아가 라이브 스트리밍에 있어서, 상기 스트리밍 데이터는 정해진 시간에 데이터 전송이 이루어져야 하므로, 수신측에서 데이터를 정상적으로 수신하지 못했을 경우, 이 데이터를 다시 보낸다고 해도 재생되어야 할 타이밍에 도착하지 못하면 끊긴 소리나 영상을 원상태로 되돌릴 수 없다. 따라서, TCP와 같이 수신 확인 응답에 의해 오류를 검출하고 오류가 있는 경우 다시 데이터를 전송하는 방법은 라이브 스트리밍 데이터를 전송하는데 비효율적이므로, 데이터 전송 모듈 114는 초기 버퍼링을 제외한 일반적인 스트리밍 데이터 전송의 경우 UDP를 사용하여 스트리밍 데이터 115를 전송하는 것이 바람직하다. 그러나 경우에 따라 초기 버퍼링과 같이 안정적인 접속이 보장되어야 하는 경우에는 TCP 프로토콜을 이용하여 데이터를 전송할 수 있다.
다음으로, 도 5e에 도시된 바와 같이 접속 정보 전송 모듈 216이 클라이언트 200에게 외부로부터 접속 가능한 하나 또는 그 이상의 다른 클라이언트에 대한 접속 정보를 전송하고(S1012), 상기 클라이언트 200의 접속 정보 수신 모듈이 상기 전송된 접속 정보를 수신한다. 그런 다음, 도 5f에 도시된 바와 같이, 상기 클라이언트 200의 상기 데이터 요청 모듈이 상기 접속 정보 수신 모듈에 의해 수신된 정보를 기초로 외부로부터 접속 가능한 다른 클라이언트에 접속하여 스트리밍 데이터의 전송을 요청한다. 이때 상기 데이터 요청 모듈은, 하나의 다른 클라이언트에게 스트리밍 데이터의 전송을 요청할 수 있고, 둘 이상의 다른 클라이언트에게 동시에 상기 스트리밍 데이터의 전송을 요청할 수도 있다. 상기 클라이언트로부터의 스트리밍 데이터의 전송 요청은, 상기 외부로부터 접속 가능한 다른 클라이언트의 클라이언트 데이터 전송 모듈이 수신하고, 상기 요청에 대한 응답으로서, 상기 스트리밍 데이터 중 당해 요청을 수신한 시점에 대응하는 하나 또는 그 이상의 부분 데이터를, 예를 들면 UDP 프로토콜에 의해 상기 클라이언트 200에게 전송한다. 전송된 상기 부분 데이터는, 상기 클라이언트 200의 데이터 수신 모듈에 의해 수신되며, 수신된 부분 데이터는 당해 클라이언트의 스트리밍 재생용 소프트웨어에 전달된다. 상기 전달된 부분 데이터는 상기 데이터 수신 모듈 또는 별도의 데이터 조합 모듈에 의해 스트리밍 데이터로서 조합되어 재생 가능하게 구성될 수 있고, 상기 구성된 스트리밍 데이터는 재생 소프트웨어에 의해 디코딩되어 재생되게 된다.
한편, 상기 클라이언트 200이 외부로부터 접속이 가능한 경우에는, 상기 클라이언트 200의 클라이언트 데이터 전송 모듈이 또 다른 클라이언트로부터 스트리밍 데이터에 관한 전송 요청을 수신하고, 당해 요청에 대응되는 데이터를 상기 또 다른 클라이언트에게 전송할 수 있다. 다시 말해, 각각의 클라이언트 200은 상기 모듈들을 통해 서버 100 및 특정 클라이언트에 대해서는 통상적인 클라이언트의 역할을 수행하면서, 다른 특정 클라이언트에 대해서는 서버로서의 역할을 수행할 수 있는데, 이 경우 당해 클라이언트가 다른 특정 클라이언트로부터의 데이터 전송 요청에 응답하여 네트워크를 통해 전송하는 데이터는 소정의 버퍼로부터 로딩될 수 있다.
보다 구체적으로, 상기 데이터 수신 모듈에 의해 수신된 스트리밍 데이터의 부분 데이터가 상기 소정의 버퍼에 저장될 수 있다. 상기 버퍼에는, 당해 클라이언트가 서버 또는 다른 클라이언트로부터 소정의 스트리밍 데이터를 전송받는 경우 상기 수신된 데이터가 저장되며, 한편, 당해 클라이언트가 다른 클라이언트에게 스트리밍 데이터에 관한 전송 요청을 수신하여 그에 응답하는 데이터를 전송하는 경우 상기 버퍼로부터 전송될 데이터가 로딩된다. 따라서, 당해 클라이언트는, 전송할 데이터를 다른 소정의 데이터베이스로부터 별도로 검색하는 과정이 없이도, 상기 다른 클라이언트에게 요청받은 부분 데이터를 전송할 수 있다. 따라서, 상기 버퍼에 저장되는 데이터는 부분 데이터의 형태이지만, 필요한 경우 상기 데이터 수신 모듈 또는 데이터 조합 모듈에 의해 구성된 재생 가능한 형태의 스트리밍 데이터의 형태가 될 수 있으며, 상기 두 가지 형태가 혼용되어 상기 버퍼에 저장될 수도 있다. 상기 버퍼는 상기 클라이언트에 설치된 상기 전용 소프트웨어를 위해 별도로 구비된 저장 공간은 물론 클라이언트의 단말기 장치에 구비된 하드 디스크, 플래시 메모리 등 소정의 저장 공간으로서 상기 전용 소프트웨어가 서버 또는 다른 클라이언트와의 스트리밍 데이터 송수신을 위해 데이터를 저장하고 읽어올 수 있으면 그 종류 및 기능에 제한은 없다.
서버 100의 상기 접속 정보 전송 모듈 216이 각각의 클라이언트에게 다른 클라이언트에 대한 접속 정보를 전송하는 방식은 도 4b에 더욱 자세히 도시되어 있다.
도 4b는, 두 개의 클라이언트 210과 230 간에 UDP 데이터 전송을 연결하는 과정을 도시하는 흐름도이다. 도 4b를 참조하면, 상기 접속 정보 취득 모듈 122는 상기 클라이언트 210 및 230으로부터 공인/사설 IP 및 포트에 관한 정보를 취득한다(S2002). 다음으로, 상기 접속 가능 여부 판단 모듈 124는, 상기 클라이언트 210에게 UDP 프로토콜을 이용하여 테스트용 데이터 패킷, 예를 들면 핑(PING) 메시지를 전송한다(S2004). 이에 대해 클라이언트 210이 상기 데이터를 수신하고 정상적으로 응답하는 경우 상기 클라이언트 210은 외부에서 접속 가능한, 즉 UDP 홀펀칭을 통해 데이터 전송이 가능한 클라이언트로 판정되고(S2008), 그렇지 않은 경우 상기 클라이언트 210은 외부에서 접속이 불가능한 클라이언트로 판정된다(S2010). 나아가 상기 클라이언트 230에 대하여도 동일한 방식으로 외부로부터의 접속 가능성을 판정할 수 있다(S2012 및 S2014). 상기 클라이언트 210이 외부에서 접속 가능한 클라이언트로 판정된 경우(S2008)에 있어서, 상기 클라이언트 230도 외부에서 접속이 가능한 클라이언트로 판정된다면(S2012에서 예), 상기 스트리밍 서버 110은 상기 클라이언트 210과 230 중 보다 속도가 빠른 클라이언트에게 스트리밍 데이터를 전송하고, 다른 클라이언트는 상기 속도가 빠른 클라이언트로부터 상기 스트리밍 서버 110이 전송한 데이터를 전달받는다(S2022). 이를 위해, 상기 접속 정보 전송 모듈 216은, 상기 클라이언트 210과 230 중 어느 클라이언트가 보다 속도가 빠른 클라이언트인지를 판단하여, 상기 속도가 빠른 클라이언트에 대한 접속 정보를 상기 다른 클라이언트에게 전송할 수 있다. 한편, 상기 클라이언트 230이 외부에서 접속이 불가능한 클라이언트로 판정된 경우(S2012에서 아니오), 상기 스트리밍 서버 110은 상기 클라이언트 210에게 상기 스트리밍 데이터를 전송하고, 상기 클라이언트 230은 상기 클라이언트 210으로부터 상기 데이터를 전달받는다(S2024). 이를 위해, 상기 접속 정보 전송 모듈 216은 상기 클라이언트 230에게 상기 클라이언트 210에 대한 접속 정보를 전송하고, 상기 클라이언트 230은 상기 정보를 기초로 상기 클라이언트 210에 접속하여 상기 데이터의 전송을 요청할 수 있다.
한편, 상기 클라이언트 210이 외부에서 접속이 불가능한 클라이언트로 판정된 경우에는(S2010), 상기 클라이언트 230에 대한 외부로부터의 접속 가능성을 판단하여(S2014), 상기 클라이언트 230이 외부로부터 접속 가능하다고 판정된 경우(S2014에서 예) 상기 스트리밍 서버 110은 상기 클라이언트 230에게 상기 스트리밍 데이터를 전송하고 상기 클라이언트 210은 상기 클라이언트 230으로부터 상기 데이터를 전달받는다(S2026). 이를 위해, 상기 접속 정보 전송 모듈 216은 상기 클라이언트 210에게 상기 클라이언트 230에 대한 접속 정보를 전송할 수 있다. 상기 정보를 전송받은 클라이언트 210은, 상기 정보를 기초로 클라이언트 230에 접속하여 상기 데이터의 전송을 요청한다. 그리고, 상기 클라이언트 230 또한 외부로부터 접속 불가능하다고 판정된 경우(S2014에서 아니오)에는, 상기 클라이언트 210과 230은 각각 상기 스트리밍 서버 110으로부터 데이터를 전송받는다(S2028). 이 경우, 상기 접속 정보 전송 모듈 216은 상기 클라이언트 210 및 230에 대해 어떤 클라이언트에 대한 정보도 전송하지 않을 수 있고, 또는, 다른 적합한 클라이언트가 접속을 개시하기 전까지는 서버로부터 계속 데이터를 전송받도록 하는 메시지를 전송할 수도 있다. 물론 이는 설계상의 선택 사항에 지나지 아니하며, 당해 기술 분야에서 통상의 지식을 지닌 자는 다양한 변경, 수정 및 대체를 인식할 것이다.
나아가, 상기 접속 정보 전송 모듈 216은, 도 5d 및 도 5e에 도시된 바와 같이 상기 클라이언트 200에 대한 초기 버퍼링을 위한 데이터의 전송이 완료된 때에 상기 정보를 전송할 수 있지만, 초기 버퍼링 전이라도 상기 클라이언트 200이 클라이언트 정보 관리 서버 120에 접속한 때에 상기 정보를 전송할 수도 있고, 또는 상기 클라이언트 200이 다른 클라이언트에 대한 접속 정보를 요청하는 때에 전송할 수도 있다. 또한, 각 클라이언트에게 외부로부터 접속이 가능한 다른 클라이언트에 대한 정보를 제공하는 단계는, 상기 각 클라이언트에 대한 접속 정보 취득 및 외부 접속 가능성 판단 단계와는 별도로 진행될 수 있다. 즉, 클라이언트가 서버에 접속한 후 바로 스트리밍 데이터의 초기 버퍼링과 다른 클라이언트에 대한 정보 제공 단계를 행함으로써 당해 클라이언트가 소정의 스트리밍 데이터를 전송받도록 한 후에, 서버가 당해 클라이언트에 대한 접속 정보 취득 등의 단계를 행할 수 있는 한편, 당해 클라이언트에 대한 접속 정보 취득과 외부 접속 가능성 판단의 단계를 먼저 행한 후에 외부 접속이 가능한 다른 클라이언트에 대한 접속 정보를 제공하여 스트리밍 데이터의 전송이 개시되도록 할 수도 있다. 이는 상기 시스템의 설계에 따른 선택 사항에 지나지 아니하며, 이에 대해 다양한 변형, 변경 및 대체가 가능하다는 것이 본 발명이 속하는 기술 분야에서 통상의 지식을 지닌 자에게 자명하다.
상기 접속 정보 전송 모듈 216로부터 외부 접속이 가능한 다른 클라이언트에 대한 접속 정보를 전송받은 클라이언트는, 상기 정보를 기초로 상기 다른 클라이언트에 접속하여 스트리밍 데이터를 전송받는다. 예를 들면, 도 3에서와 같이, 클라이언트 230이 서버에 접속한 시점에, 클라이언트 210이 이미 상기 스트리밍 서버 110으로부터 부분 데이터 1, 2, 3을 전송받았다고 할 때, 상기 클라이언트 230은, 신속하고 안정적인 초기 버퍼링을 위해 상기 스트리밍 서버 110으로부터 접속한 시점에 대응하는 부분 데이터 4를 전송받은 후, 상기 클라이언트 정보 관리 서버 120에게 외부로부터 접속 가능한 다른 클라이언트에 대한 전송 정보를 요청하고, 상기 접속 정보 전송 모듈 216으로부터 상기 클라이언트 210에 대한 접속 정보를 전송받아, 상기 클라이언트 210에 접속하여 그로부터 부분 데이터 5, 6, 7,...을 전송받을 수 있다. 또한, 상기 서버 100에 접속한, 외부로부터 접속 가능한 다른 클라이언트 220이 상기 클라이언트 230에게 전송할 수 있을 정도의 분량의 부분 데이터를 전송받은 경우, 클라이언트 230은 클라이언트 210으로부터는 짝수의 일련 번호의 부분 데이터를 전송받고, 클라이언트 220으로부터는 홀수의 일련 번호의 부분 데이터를 전송받을 수도 있다. 나아가, 상기 서버 100에 접속한 외부로부터 접속 가능한 다른 클라이언트가 N개 존재하는 경우, 각각의 다른 클라이언트에게 (N, 2N, 3N,...), (N+1, 2N+1, 3N+1,...) ... (N+(N-1), 2N+(N-1), 3N+(N-1),...)번째에 해당하는 일련 번호의 부분 데이터를 전송받을 수 있다. 물론, 상기 외부로부터 접속 가능한 다른 클라이언트의 모두로부터, 스트리밍 데이터를 수취할 필요는 없으며, 어느 범위의 개수의 클라이언트에게 데이터의 전송을 요청할 것인지는 네트워크의 환경 및 각각의 단말기의 성능에 따라 변경될 수 있다.
또한, 상기한 바와 같이, 라이브 스트리밍 시스템에 있어서, 각각의 클라이언트가 서버나 다른 클라이언트로부터 전송받는 데이터는 각 클라이언트가 상기 시스템에 접속하여 상기 스트리밍 서버에게 데이터의 전송을 요청한 시점 또는 다른 클라이언트에 대해 상기 데이터의 전송을 요청한 시점에 대응한다. 즉, 네트워크나 단말기마다의 성능에 따라 어느 정도의 오차는 있을 수 있지만, 복수의 클라이언트의 각각에 전송되는 부분 데이터는, 일정한 시간대에 있어서 그 시간대에 대응하는 소정의 일련 번호가 할당된 부분 데이터가 된다. 따라서, 예를 들면, 클라이언트 210이 접속한 시간대에 전송된 부분 데이터가 3이고, 그 후 4와 5의 부분 데이터가 전송되었으며, 클라이언트 230이 접속하고, 그 접속한 시간대에 전송되는 부분 데이터가 6이라고 하면, 상기 클라이언트 210과 클라이언트 230은 동일한 시간대에 동일한 부분 데이터 6을 전송받는다. 즉, 이미 이전 시간대에 전송되었던 데이터를 전송받아야 하는 경우를 제외하면, 동일 시간대에 접속 중인 클라이언트들의 집단은 모두 동일한 데이터를 전송받게 되므로, 어떤 클라이언트가 어떤 부분 데이터를 이미 전송받았는지를 고려할 필요 없이, 각각의 클라이언트는 다른 클라이언트가 스트리밍 서버 120 또는 또 다른 클라이언트로부터 전송받은 현재 시간대에 전송되는 부분 데이터를 전달받으면 된다. 나아가, 네트워크 지연 등으로 인해 특정 일련 번호에 해당하는 부분 데이터의 전송이 지연되거나 누락되는 경우, 당해 부분 데이터가 전송되기를 기다려 스트리밍 데이터를 재생할 것인지 아니면 당해 부분 데이터를 건너뛰어 다음 부분 데이터를 재생할 것인지 선택할 수 있다. 전자의 경우 재생이 지연되는 대신 재생 품질을 향상시킬 수 있고, 후자의 경우 재생이 중간에 끊어지게 되어 재생 품질은 하락하지만 신속한 재생이 보장된다는 장점이 있으므로, 이는 전체 시스템 및 네트워크의 환경에 적합하게 결정될 수 있을 것이다.
한편, 상기 클라이언트 정보 관리 서버 120은, 복수의 클라이언트의 각각을, 상기 접속 가능 여부 판단 모듈 124에 의해 판단된 외부로부터의 접속 가능성 및 각 클라이언트의 데이터 전송 속도에 관한 정보를 기초로 계층적으로 분류하는 계층화 모듈 128을 더 포함할 수 있다. 이 경우, 상기 접속 정보 전송 모듈 126은, 상기 스트리밍 서버 110에 상기 스트리밍 데이터의 전송을 요청한 클라이언트에게, 상기 계층화 모듈 128에 의해 분류된 클라이언트 군(群) 중 당해 클라이언트보다 상위 계층에 속하는 클라이언트에 대한 접속 정보를 전송한다. 또한, 이 경우 상기 클라이언트의 상기 전용 소프트웨어는, 상기 클라이언트 정보 관리 서버 120에게 당해 클라이언트보다 상위 계층에 속하는 클라이언트에 대한 정보를 요청하는 모듈, 및 필요에 따라 당해 클라이언트보다 하위 계층에 속하는 클라이언트에 대한 정보를 요청하는 모듈 등을 더 포함할 수 있다.
보다 구체적으로 상기 계층화 모듈 128은, 도 6d에 도시된 바와 같이 상기 접속 가능 여부 판단 모듈 124에 의해 판단된 각각의 클라이언트에 대한 외부로부터의 접속 가능성 및 패킷의 전달 속도 등을 기초로, 각각의 클라이언트에게 소정의 레벨을 부여하고, 상기 레벨을 기초로 계층을 설정할 수 있다. 예를 들면, 외부로부터 접속이 가능하고 패킷의 전달 속도가 빠른 클라이언트를 상위 계층으로 분류하고, 그보다 속도가 느린 클라이언트를 상기 상위 계층에 대한 하위 계층으로 분류하고, 외부에서 접속이 불가능한 클라이언트 또는 속도가 매우 느린 클라이언트를 최하위 계층에 분류할 수 있다. 상기 계층화 모듈 128에 의해 최하위 계층으로 분류된 클라이언트는 다른 클라이언트로부터 스트리밍 데이터를 전송받기만 하고 업로드 스트림을 제공하지는 않는다. 상기 계층은 하나 또는 그 이상으로 개수로 분류될 수 있으며, 그 수에는 제한이 없으나, 말단 계층에 해당하는 클라이언트가 될수록 스트리밍 데이터를 전송받기까지의 지연 시간이 길어지므로, 네트워크의 대역폭 및 단말기의 성능 등에 따라 적절하게 설정될 필요가 있을 것이다. 나아가, 각각의 클라이언트는 당해 클라이언트에 대하여 설정된 계층에 관한 정보를 저장함으로써 이후의 접속시에 보다 신속하게 계층화가 될 수 있도록 할 수 있고, 또는, 상기 계층화 모듈 128이 계층 설정을 위해 이용하는 정보를 별도로 저장함으로써 계층화로 인해 발생되는 시스템의 부하나 속도의 저하를 감소시킬 수 있다.
상기 계층화 모듈 128에 의해 분류된 클라이언트들의 계층적 구조를 기초로, 상기 접속 정보 전송 모듈 126이, 상기 클라이언트에게, 당해 클라이언트가 속하는 계층보다 상위 계층에 속하는 하나 또는 그 이상의 클라이언트에 대한 접속 정보를 전송한다. 이 경우, 상기 접속 정보 전송 모듈 126은, 당해 클라이언트가 속하는 계층의 바로 상위 계층에 속하는 클라이언트에 대한 접속 정보를 전송할 수도 있다. 예를 들면, 도 6d에서 레벨 3에 속하는 클라이언트에게는 레벨 0 내지 2에 속하는 모든 상위 클라이언트에 대한 접속 정보를 전송할 수 있고, 레벨 2에 속하는 바로 상위 계층의 클라이언트에 대한 접속 정보만을 전송할 수도 있다.
상기 상위 계층에 속하는 클라이언트에 대한 정보를 전송받은 당해 클라이언트는, 상기 전송받은 정보를 기초로 상위 계층에 속하는 하나 또는 그 이상의 클라이언트로부터, 스트리밍 데이터의 부분 데이터를 수신한다. 상기 수신은 데이터 수신 모듈에 의해 이루어질 수 있고, 상기 데이터 수신 모듈은 상기 수신된 부분 데이터를 조합하여 스트리밍 데이터를 구성할 수 있음은 상기한 바와 같다.
한편, 멀티미디어 라이브 스트리밍 서비스에서는, 오디오 데이터와 비디오 데이터를 동시에 전달하기 위해서는 통상적으로 500kbps에서 1Mkbps 정도의 대역폭을 필요로 한다. 따라서, P2P로 스트리밍 데이터를 분산 제공하기 위해서는, 각각의 클라이언트가 다운로드 스트림의 1~2배에 해당하는 업로드 스트림을 제공해야 하고, 그렇지 않으면 데이터의 원활한 분산 전송이 이루어지기 곤란하다. 따라서, ADSL과 같은 비대칭형 네트워크를 사용하는 클라이언트의 경우, 1Mbps에서 2Mbps에 달하는 업로드 스트림을 제공하기가 불가능하므로 문제가 된다. 도 6a는 클라이언트가 전송받은, 즉 다운로드 받은 만큼의 스트리밍 데이터를 하나의 다른 클라이언트에게 전송하는, 즉 업로드하는 분산 스트리밍 시스템을 도시하는 개념도이다. 당해 도면에 있어서는, 각각의 클라이언트에 요구되는 업로드 스트림 대역폭의 요구량은 다운로드의 경우와 동일한 500kbps에서 1Mbps 정도이다. 따라서, 클라이언트에 대한 업로드 스트림 대역폭의 요구량이 크지 않지만, 모든 클라이언트가 외부로부터 P2P 전송이 가능하고 또한 모든 클라이언트가 다운로드 스트림 대역폭만큼 업로드 스트림을 제공해야 할 뿐만 아니라, 서버 100에 접속하는 클라이언트의 수가 증가될 경우 서버 100으로부터 제공된 스트리밍 데이터가 말단의 클라이언트에 도달하는데 걸리는 시간이 매우 길어 스트리밍 데이터의 재생이 크게 지연된다는 문제가 발생한다.
이러한 문제점을 개선하기 위하여 도 6b와 같이 하나의 클라이언트가 2대의 클라이언트에게 데이터를 전송하는 경우를 고려할 수 있다. 하나의 클라이언트로부터 2대의 클라이언트가 데이터를 전송받을 수 있기 때문에, 말단 클라이언트가 원하는 스트리밍 데이터를 재생하는데 걸리는 지연 시간이 상기 도 6a에 비해 짧아질 수 있지만, 스트림 데이터를 다른 클라이언트에게 전송할 수 있는 상위 클라이언트가 항상 다운로드 스트림의 2배에 달하는 업로드 스트림 대역폭을 가져야 한다는 어려움이 있다. 즉, 상기한 바와 같이 ADSL과 같은 비대칭형 네트워크를 사용하는 클라이언트의 경우에는 1Mbps에서 2Mbps에 달하는 업로드 스트림을 제공하는 것이 사실상 불가능하므로, 도 6b에 해당하는 시스템의 경우, 상위 클라이언트가 될 수 있는 클라이언트가 제한되고, 그로 인해 P2P를 통한 분산 스트리밍의 효율이 떨어지게 된다는 문제점이 있다. 나아가, 말단 클라이언트가 스트리밍 데이터를 재생하는데 걸리는 지연 시간을 더욱 단축시키기 위해 하나의 상위 클라이언트로부터 데이터를 전송받는 하위 클라이언트의 수를 3대, 4대로 증가시킨다면 그러한 문제점은 더욱 심각해진다.
따라서, 상기와 같은 문제점을 해결하기 위하여, 도 6c에 도시된 바와 같이, 계층화 모듈 128은, 일 군의 하위 클라이언트가, 그에 대응하는 상위 클라이언트의 수의 약 1.5배에서 2배가 되도록 클라이언트의 계층을 분류 및 설정하는 것이 바람직하다. 예를 들면, 레벨 0에 해당하는 클라이언트의 수가 10대라고 할 때, 상기 레벨 0에 해당하는 클라이언트의 하위 클라이언트인 레벨 1에 해당하는 클라이언트의 수는 15대, 레벨 1에 해당하는 클라이언트의 하위 클라이언트인 레벨 2에 해당하는 클라이언트의 수는 22대, 그리고 레벨 2의 하위 클라이언트인 레벨 3의 클라이언트는 33대가 되는 식으로 상기 클라이언트의 계층을 설정할 수 있다. 하위 클라이언트는 1개 이상의 상위 클라이언트의 목록을 상기 접속 정보 전송 모듈 126으로부터 수취하고, 상기 1개 이상의 상위 클라이언트로부터 데이터를 분산하여 전송받는다. 따라서, 일 군의 하위 클라이언트의 수를 상위 클라이언트 군에 속하는 수의 약 1.5배에서 2배가 되도록 설정하면, 상위 클라이언트는 다운로드 스트림 대역폭의 약 0.5배에서 2배의 범위 내에서 변동될 수 있는 업로드 스트림 대역폭을 제공할 수 있다. 또한, 상기 각 레벨(즉 계층)에 속하는 클라이언트의 수는 상기 서버 100에 접속된 전체 클라이언트의 수를 기초로 결정될 수 있다. 예를 들면, 계층이 총 4개의 계층으로 나누어지고, 각 계층이 레벨 0에서 4로 명명된 경우, 레벨 0의 계층에는 전체 클라이언트의 10%에 해당하는 수의 클라이언트가 분류되고, 레벨 1에는 20%, 레벨 3에는 30%, 레벨 4에는 40%가 분류되는 방식으로 각 계층에 분류되는 클라이언트의 수를 결정할 수 있다.
또한, 상기 계층화 모듈 128은, 클라이언트의 로그인/로그아웃이 발생할 때마다 또는 수시/정기적으로 상기 클라이언트의 계층을 갱신함으로써, 각각의 시간대에 적합한 계층 구조를 유지하는 것이 바람직하다. 예를 들면, 상위 계층에 속하는 클라이언트가 로그아웃할 경우, 바로 하위 계층에 속하는 클라이언트 중 가장 데이터 전송 속도가 빠르고 외부로부터 접속이 가능한 클라이언트를 상위 계층으로 재분류함으로써 계층 구조를 최적의 상태로 유지할 수 있다.
나아가, 상기 계층화 모듈 128에 의해 계층화를 거치게 된 클라이언트는, 상기 클라이언트 정보 관리 서버 120으로부터 자신보다 상위 계층에 해당하는 클라이언트에 대한 정보를 전송받게 된다. 즉, 상기 접속 정보 전송 모듈 126에 의해 전송되는 접속 정보가, 상기 정보를 제공받는 클라이언트보다 상위 계층에 해당하는 클라이언트에 대한 접속 정보가 된다. 상기 예에 있어서와 같이, 각각의 클라이언트에게 부여된 레벨에 따라 계층이 분류된 경우에는 레벨 2에 해당하는 클라이언트의 경우 레벨 1의 클라이언트에 대한 접속 정보를 전송받을 것이다(도 6d 참조). 경우에 따라, 상기 레벨 2에 해당하는 클라이언트는 레벨 0과 1에 해당하는 클라이언트에 대한 접속 정보를 모두 전송받을 수도 있다. 상기 상위 클라이언트에 대한 접속 정보를 제공받은 클라이언트는, 상위 클라이언트에 대해 UDP 홀펀칭을 통해 데이터 전송이 가능한지 여부를 확인한다. 그 결과, 데이터 전송이 가능한 상위 클라이언트가 1대일 경우 당해 클라이언트로부터 전체 스트리밍 데이터를 요청하여 전송받게 되고, 상기 데이터 전송이 가능한 클라이언트가 2개 이상일 경우, 가장 속도가 빠른 클라이언트를 2대 선별하여 그 중 하나로부터 짝수의 일련 번호에 해당하는 부분 데이터를, 나머지 하나로부터 홀수의 일련 번호에 해당하는 부분 데이터를 전송받을 수 있다. 또한, 데이터 전송이 가능한 상위 클라이언트가 N개 있을 경우, 속도가 빠른 2개의 클라이언트를 선별하지 않고 N개의 상위 클라이언트 모두로부터 스트리밍 데이터를 전송받을 수도 있으며, 그에 관한 방법은 상기한 바와 같다. 나아가, 상위 클라이언트 중 데이터를 전송받을 클라이언트를 선별하는 방법은, 상기와 같이 i) 그 중 가장 속도가 빠른 클라이언트를 선택하거나, ii) 상위 클라이언트들 중 현재 그에 접속해 있는 하위 클라이언트의 수가 가장 적은(즉, 데이터 전송 부하가 가장 적은) 클라이언트를 선택하는 방법을 취할 수 있으며, iii) 상기 i)과 ii)의 조건을 함께 취하되 각 조건에 일정한 가중치를 부가하여 상위 클라이언트를 선택할 수도 있고, 나아가 iv) 예를 들면 핑(ping) 시간이 3초 이하인 경우에만 연결하고 해당 클라이언트에 접속한 하위 클라이언트의 수가 5대 이상이면 연결하지 않는 식의 특정 조건을 부가하여 접속할 상위 클라이언트를 선택할 수도 있다. 그리고, 상기 레벨 0에 해당하는 최상위 계층의 클라이언트는 서버로부터 스트리밍 데이터를 전송받게 되고, 최하위 계층의 클라이언트는 다른 클라이언트로부터(경우에 따라 서버로부터) 상기 데이터를 전송받고, 또 다른 클라이언트에게 상기 데이터를 전송하지는 않는다.
한편, 상기 스트리밍 제공부 110은, 클라이언트에게 제공하는 상기 스트리밍 데이터를 소정의 크기로 분할하여 부분 데이터를 생성하고 상기 부분 데이터의 각각에 일련 번호를 할당하는 데이터 분할 모듈 130을 더 포함할 수 있다.
보다 구체적으로, 상기 부분 데이터는 예를 들면 256바이트에서 8k바이트의 범위를 갖되, UDP 패킷으로 한번에 전달 가능한 크기를 넘지 않는 크기로 분할되어 블록화될 수 있다. 상기 블록화된 부분 데이터에는, 각각의 부분 데이터를 식별하기 위한 식별 정보로서, 재생되어야 할 순서에 따라 1, 2, 3,...의 순차적으로 증가 또는 m, m-1, m-2,...의 순차적으로 감소하는 정수인 일련 번호가 부여될 수 있다. 상기 일련 번호는 상기 식별 정보의 일례일 뿐이며, 당해 기술 분야에서 통상의 지식을 지닌 자는 다양한 변경, 수정 및 대체를 인식할 것이다.
한편, 상기 데이터 요청 수신 모듈 112는, 상기 클라이언트로부터 특정 일련 번호의 부분 데이터의 전송 요청을 수신할 수 있고, 상기 데이터 전송 모듈 114는, 상기 데이터 요청 수신 모듈 112가 수신한 일련 번호에 해당하는 부분 데이터를 상기 클라이언트로 전송할 수 있다. 나아가, 상기 클라이언트가 요청하는 부분 데이터의 일련 번호에 관한 정보가 잘못되었거나 버퍼링 한계를 벗어나서 전송할 수 없는 경우 에러 메시지를 응답할 수 있다.
나아가, 상기 스트리밍 제공부 110은, 상기 데이터 분할 모듈 130에 의해 생성된 상기 부분 데이터를 순차적으로 일정 시간 동안 저장하는 버퍼를 더 포함할 수 있다. 그리고, 상기 데이터 전송 모듈 114는 상기 버퍼에 저장된 부분 데이터를 상기 클라이언트에게 전송할 수 있다. 상기 버퍼가 특정 시점에 있어서 전송되는 부분 데이터를 소정의 시간 동안 저장함으로써, 상기 데이터의 전송에 어느 정도의 지연이 발생하더라도 각 클라이언트는 상기 부분 데이터를 보다 안정적으로 전송받을 수 있다. 또한, 아날로그 데이터를 실시간으로 디지털 데이터로 변환하여 스트리밍하는 경우, 클라이언트로부터 스트리밍 데이터의 전송이 요청된 시점에 대응하는 부분 데이터만을 상기 버퍼에 저장하고, 상기 데이터 전송 모듈 114는 상기 버퍼에 저장된 부분 데이터를 상기 클라이언트에게 전송할 수 있다. 이 경우, 디지털화된 전체 데이터를 모두 저장하기 위한 저장 공간을 별도로 구비할 필요가 없으므로 시스템 복잡도와 비용을 감소할 수 있다.
이상, 본 발명의 라이브 스트리밍 시스템을 구체적인 실시예를 사용하여 설명하였으나 이러한 설명은 특정한 것만을 예시하여 설명한 것일 뿐, 본 발명의 기술 사상이 여기에 한정되는 것은 아님을 주의하여야 한다.
또한, 클라이언트의 전용 소프트웨어는 라이브 스트리밍의 재생에 필요한 재생용 프로그램과 별개의 프로그램으로 구현되는 것이 바람직하다. 상기 전용 소프트웨어와 재생용 프로그램을 별개의 프로그램으로 개발하고 데이터의 송수신은 전용 프로그램 측에서만 담당하도록 함으로써, 전용 소프트웨어가 사용하는 데이터 분산 방식이 변경되어도 재생용 프로그램은 이에 관계없이 동작할 수 있다. 따라서, 프로그램의 개발 및 유지, 보수가 유리해진다.

Claims (14)

  1. UDP 홀펀칭을 이용한 피어 대 피어(peer to peer; p2p) 데이터 전송을 통해 라이브 스트리밍 데이터의 분산 전송을 가능하게 하는 분산 스트리밍 시스템에 있어서,
    상기 시스템에 접속하여 스트리밍 데이터를 요청하는 복수의 클라이언트의 각각에, 소정의 식별 정보에 의해 서로 구분되는 복수의 부분 데이터로 구성되는 스트리밍 데이터를 전송하는 스트리밍 제공부; 및
    상기 클라이언트에 관한 정보를 취득하고 상기 시스템에 접속한 다른 클라이언트에게 상기 정보를 전달하는 클라이언트 정보 관리부를 포함하되,
    상기 스트리밍 제공부는,
    상기 클라이언트로부터 상기 스트리밍 데이터의 전송 요청을 수신하는 데이터 요청 수신 모듈; 및
    상기 요청에 응답하여 상기 스트리밍 데이터 중 상기 요청을 수신한 시점에 대응하는 하나 또는 그 이상의 부분 데이터를 상기 클라이언트로 전송하는 데이터 전송 모듈을 포함하며,
    상기 클라이언트 정보 관리부는,
    상기 복수의 클라이언트의 각각에 대해, 외부로부터 당해 클라이언트에 접속하는데 필요한 접속 정보를 취득하는 접속 정보 취득 모듈;
    상기 복수의 클라이언트의 각각에 대해 외부로부터의 접속이 가능한지 여부를 판단하는 접속 가능 여부 판단 모듈; 및
    상기 스트리밍 제공부에 상기 스트리밍 데이터의 전송을 요청한 클라이언트에게, 당해 클라이언트가 다른 클라이언트에 접속하여 그로부터 상기 스트리밍 데이터를 수취할 수 있도록, 상기 접속 가능 여부 판단 모듈에 의해 외부로부터의 접속이 가능하다고 판단된 다른 클라이언트에 대한 접속 정보를 전송하는 접속 정보 전송 모듈을 포함하는 분산 스트리밍 시스템.
  2. 제1항에 있어서,
    상기 클라이언트 정보 관리부는, 상기 접속 가능 여부 판단 모듈에 의해 판단된 외부로부터의 접속 가능성 및 각 클라이언트의 데이터 전송 속도에 관한 정보를 기초로, 상기 복수의 클라이언트를 계층적으로 분류하는 계층화 모듈을 더 포함하되,
    상기 접속 정보 전송 모듈은, 상기 스트리밍 제공부에 상기 스트리밍 데이터의 전송을 요청한 클라이언트에게, 상기 계층화 모듈에 의해 분류된 클라이언트 군(群) 중 당해 클라이언트보다 상위 계층에 속하는 클라이언트에 대한 접속 정보를 전송하는 분산 스트리밍 시스템.
  3. 제1항 또는 제2항에 있어서,
    상기 스트리밍 제공부는, 상기 스트리밍 데이터를 소정의 크기로 분할하여 부분 데이터를 생성하고 상기 부분 데이터의 각각에 일련 번호를 할당하는 데이터 분할 모듈을 더 포함하는 분산 스트리밍 시스템.
  4. 제1항 또는 제2항에 있어서,
    상기 접속 정보 취득 모듈은 상기 접속 정보로서, 상기 클라이언트로부터 공인 아이피와 포트에 관한 정보, 및 사설 아이피와 포트에 관한 정보를 취득하는 분산 스트리밍 시스템.
  5. 제4항에 있어서,
    상기 접속 가능 여부 판단 모듈은, 상기 접속 정보 취득 모듈이 취득한 정보를 기초로, 상기 클라이언트에게 UDP 프로토콜을 이용하여 테스트용 데이터를 전송하고 상기 클라이언트가 상기 데이터를 전송받을 수 있는 경우에, 상기 클라이언트를 외부로부터 접속 가능한 클라이언트로서 판정하는 분산 스트리밍 시스템.
  6. UDP 홀펀칭을 이용한 피어 대 피어(peer to peer; p2p) 데이터 전송을 통해 라이브 스트리밍 데이터의 분산 전송을 가능하게 하는 분산 스트리밍 시스템에 있어서,
    상기 시스템에 접속하여 스트리밍 데이터를 요청하는 복수의 클라이언트의 각각에, 소정의 식별 정보에 의해 서로 구분되는 복수의 부분 데이터로 구성되는 스트리밍 데이터를 전송하는 스트리밍 제공부;
    상기 클라이언트에 관한 정보를 취득하고 상기 시스템에 접속한 다른 클라이언트에게 상기 정보를 전달하는 클라이언트 정보 관리부; 및
    상기 복수의 클라이언트의 각각에 설치되고, 상기 스트리밍 제공부 및 다른 클라이언트 중 적어도 어느 하나로부터 스트리밍 데이터를 전송받거나, 또 다른 클라이언트에게 상기 전송받은 스트리밍 데이터를 전송하는 클라이언트측 제어부를 포함하되,
    상기 스트리밍 제공부는,
    상기 클라이언트로부터 상기 스트리밍 데이터의 전송 요청을 수신하는 데이터 요청 수신 모듈; 및
    상기 요청에 응답하여 상기 스트리밍 데이터 중 상기 요청을 수신한 시점에 대응하는 하나 또는 그 이상의 부분 데이터를 상기 클라이언트로 전송하는 데이터 전송 모듈을 포함하고,
    상기 클라이언트 정보 관리부는,
    상기 복수의 클라이언트의 각각에 대해, 외부로부터 당해 클라이언트에 접속하는데 필요한 접속 정보를 취득하는 접속 정보 취득 모듈;
    상기 복수의 클라이언트의 각각에 대해 테스트용 데이터를 전송하고, 상기 테스트용 데이터에 대한 응답을 기초로 당해 클라이언트가 외부로부터의 접속이 가능한지 여부를 판단하는 접속 가능 여부 판단 모듈; 및
    상기 스트리밍 제공부에 상기 스트리밍 데이터의 전송을 요청한 클라이언트에게, 상기 접속 가능 여부 판단 모듈에 의해 외부로부터의 접속이 가능하다고 판단된 다른 클라이언트에 대한 접속 정보를 전송하는 접속 정보 전송 모듈을 포함하며,
    상기 클라이언트측 제어부는,
    당해 클라이언트에 대한 접속 정보를 취득하고, 이를 상기 클라이언트 정보 관리부에 전달하는 접속 정보 전달 모듈;
    상기 클라이언트 정보 관리부로부터 상기 테스트용 데이터를 수신하고, 상기 테스트용 데이터에 응답하는 데이터를 상기 클라이언트 정보 관리부에 전송하는 접속 가능 여부 응답 모듈;
    상기 클라이언트 정보 관리부로부터 상기 외부 접속이 가능한 클라이언트에 대한 접속 정보를 수신하는 접속 정보 수신 모듈;
    상기 스트리밍 제공부에 상기 스트리밍 데이터의 전송을 요청하는 데이터 요청 모듈;
    상기 접속 정보 수신 모듈에 의해 수신된 정보를 기초로 상기 외부 접속이 가능한 클라이언트에게 상기 스트리밍 데이터의 전송을 요청하는 클라이언트 데이터 요청 모듈;
    상기 스트리밍 제공부 또는 상기 외부 접속이 가능한 클라이언트로부터 스트리밍 데이터의 부분 데이터를 수신하고, 상기 수신된 부분 데이터를 당해 클라이언트의 스트리밍 재생 모듈에 전달하는 데이터 수신 모듈; 및
    다른 클라이언트로부터 상기 스트리밍 데이터에 관한 전송 요청이 수신되면, 이에 응답하여, 상기 스트리밍 데이터 중 당해 요청을 수신한 시점에 대응하는 하나 또는 그 이상의 부분 데이터를, 상기 다른 클라이언트에게 전송하는 클라이언트 데이터 전송 모듈을 포함하는 분산 스트리밍 시스템.
  7. 제6항에 있어서,
    상기 클라이언트 정보 관리부는, 상기 접속 가능 여부 판단 모듈에 의해 판단된 외부로부터의 접속 가능성 및 각 클라이언트의 데이터 전송 속도에 관한 정보를 기초로, 상기 복수의 클라이언트를 계층적으로 분류하는 계층화 모듈을 더 포함하되,
    상기 접속 정보 전송 모듈은, 상기 스트리밍 제공부에 상기 스트리밍 데이터의 전송을 요청한 클라이언트에게, 상기 계층화 모듈에 의해 분류된 클라이언트 군(群) 중 당해 클라이언트보다 상위 계층에 속하는 클라이언트에 대한 접속 정보를 전송하는 분산 스트리밍 시스템.
  8. 제7항에 있어서,
    상기 클라이언트측 제어부는,
    상기 스트리밍 제공부 또는 다른 클라이언트로부터 수신한 부분 데이터를 저장하는 버퍼를 더 포함하되,
    상기 클라이언트측 제어부의 상기 데이터 수신 모듈은, 상기 접속 정보 전송 모듈로부터 접속 정보가 전송된 상위 계층의 클라이언트 중 하나 또는 그 이상으로부터 부분 데이터를 수신하고, 상기 수신된 부분 데이터를 조합하여 스트리밍 데이터를 구성하는 분산 스트리밍 시스템.
  9. UDP 홀펀칭을 이용한 피어 대 피어(peer to peer; p2p) 데이터 전송을 통해 라이브 스트리밍 데이터의 분산 전송을 가능하게 하는 분산 스트리밍 방법에 있어서,
    서버가 그에 접속한 복수의 클라이언트 각각에 대해, 외부로부터 당해 클라이언트에 접속하는데 필요한 접속 정보를 취득하는 접속 정보 취득 단계;
    상기 서버가 상기 복수의 클라이언트의 각각에 대해 외부로부터의 접속이 가능한지 여부를 판단하는 접속 가능 여부 판단 단계;
    상기 서버가 상기 클라이언트로부터, 소정의 식별 정보에 의해 서로 구분되는 복수의 부분 데이터로 구성되는 스트리밍 데이터의 전송 요청을 수신하는 데이터 요청 수신 단계;
    상기 요청에 응답하여, 상기 서버가 상기 스트리밍 데이터 중 상기 요청을 수신한 시점에 대응하는 하나 또는 그 이상의 부분 데이터를 상기 클라이언트로 전송하는 데이터 전송 단계; 및
    상기 서버에 상기 스트리밍 데이터의 전송을 요청한 클라이언트에게, 당해 클라이언트가 다른 클라이언트에 접속하여 그로부터 상기 스트리밍 데이터를 수취할 수 있도록, 상기 접속 가능 여부 판단 단계에서 외부로부터의 접속이 가능하다고 판단된 다른 클라이언트에 대한 접속 정보를 전송하는 접속 정보 전송 단계를 포함하는 분산 스트리밍 방법.
  10. 제9항에 있어서,
    상기 복수의 클라이언트의 각각을, 상기 접속 가능 여부 판단 단계에서 판단된 외부로부터의 접속 가능성 및 각 클라이언트의 데이터 전송 속도에 관한 정보를 기초로 계층적으로 분류하는 계층화 단계를 더 포함하되,
    상기 접속 정보 전송 단계에서, 상기 서버에 상기 스트리밍 데이터의 전송을 요청한 클라이언트에게, 상기 계층화 단계에서 분류된 클라이언트 군 중, 당해 클라이언트보다 상위 계층에 속하는 클라이언트에 대한 접속 정보를 전송하는 분산 스트리밍 방법.
  11. 제9항 또는 제10항에 있어서,
    상기 스트리밍 데이터를 소정의 크기로 분할하여 부분 데이터를 생성하고 상기 부분 데이터의 각각에 일련 번호를 할당하는 데이터 분할 단계를 더 포함하는 분산 스트리밍 방법.
  12. 제9항 또는 제10항에 있어서,
    상기 접속 정보 취득 단계에서, 상기 클라이언트의 공인 아이피와 포트에 관한 정보, 및 사설 아이피와 포트에 관한 정보가 상기 접속 정보로서 취득되는 분산 스트리밍 방법.
  13. 제10항에 있어서,
    상기 접속 가능 여부 판단 단계에서, 상기 접속 정보 취득 단계에서 취득된 정보를 기초로, 상기 클라이언트에게 UDP 프로토콜을 이용하여 테스트용 데이터를 전송하고, 상기 클라이언트가 상기 데이터를 전송받을 수 있는 경우에, 상기 클라이언트를 외부로부터 접속 가능한 클라이언트로서 판정하는 분산 스트리밍 방법.
  14. UDP 홀펀칭을 이용한 피어 대 피어(peer to peer; p2p) 데이터 전송을 통해 라이브 스트리밍 데이터의 분산 전송을 가능하게 하는 분산 스트리밍 방법에 있어서,
    복수의 클라이언트가 서버에 접속하는 단계;
    상기 서버가 상기 클라이언트로부터 그에 접속하는데 필요한 접속 정보를 수신하는 단계;
    상기 서버가 상기 클라이언트에 대해 상기 접속 정보를 이용하여 테스트용 데이터를 전송하는 접속 가능 여부 시험 단계;
    상기 클라이언트가 상기 서버로부터 전송되는 상기 테스트용 데이터를 수신하고, 상기 테스트용 데이터에 응답하는 데이터를 상기 서버에 전송하는 접속 가능 여부 응답 단계;
    상기 서버가, 상기 접속 가능 여부 응답 단계에서 상기 클라이언트로부터 전송된 데이터를 기초로, 상기 클라이언트가 외부로부터의 접속이 가능하지 여부를 판단하는 접속 가능 여부 판단 단계;
    상기 클라이언트가 상기 서버에게 소정의 식별 정보에 의해 서로 구분되는 복수의 부분 데이터로 구성되는 스트리밍 데이터의 전송을 요청하는 데이터 요청 단계;
    상기 서버가 상기 클라이언트로부터 상기 스트리밍 데이터의 전송 요청을 수신하는 데이터 요청 수신 단계;
    상기 서버가 상기 클라이언트로부터의 상기 스트리밍 데이터의 전송 요청에 응답하여, 상기 스트리밍 데이터 중 상기 데이터의 전송 요청을 수신한 시점에 대응하는 하나 또는 그 이상의 부분 데이터를 상기 클라이언트로 전송하는 데이터 전송 단계;
    상기 클라이언트가 상기 서버로부터 전송되는 상기 스트리밍 데이터의 부분 데이터를 수신하는 데이터 수신 단계;
    상기 서버가 상기 클라이언트에게, 상기 접속 가능 여부 판단 단계에서 외부로부터의 접속이 가능하다고 판단된 다른 클라이언트에 대한 접속 정보를 전송하는 접속 정보 전송 단계;
    상기 클라이언트가 상기 서버로부터 상기 다른 클라이언트에 대한 접속 정보를 수신하는 접속 정보 수신 단계;
    상기 클라이언트가, 상기 접속 정보 수신 단계에서 수신된 정보를 기초로, 상기 다른 클라이언트에게 상기 스트리밍 데이터의 전송을 요청하는 클라이언트 데이터 요청 단계;
    상기 클라이언트로부터의 상기 스트리밍 데이터의 전송 요청을, 상기 다른 클라이언트가 수신하는 클라이언트 데이터 요청 수신 단계;
    상기 다른 클라이언트가, 상기 스트리밍 데이터의 전송 요청에 응답하여, 상기 스트리밍 데이터 중 상기 데이터의 전송 요청을 수신한 시점에 대응하는 하나 또는 그 이상의 부분 데이터를 전송하는 클라이언트 데이터 전송 단계;
    상기 클라이언트가 상기 다른 클라이언트로부터 전송되는 스트리밍 데이터의 상기 부분 데이터를 수신하는 클라이언트 데이터 수신 단계; 및
    상기 클라이어트가, 상기 서버 또는 상기 다른 클라이언트로부터 수신된 부분 데이터를 당해 클라이언트의 스트리밍 재생 모듈에 전달하는 데이터 전달 단계를 포함하는 분산 스트리밍 방법.
KR1020070095532A 2007-09-19 2007-09-19 유디피 홀펀칭을 이용한 피어 대 피어 데이터 전송을 통해스트리밍 데이터를 분산 전송하는 분산 스트리밍 시스템 및그 방법 KR100919254B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020070095532A KR100919254B1 (ko) 2007-09-19 2007-09-19 유디피 홀펀칭을 이용한 피어 대 피어 데이터 전송을 통해스트리밍 데이터를 분산 전송하는 분산 스트리밍 시스템 및그 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020070095532A KR100919254B1 (ko) 2007-09-19 2007-09-19 유디피 홀펀칭을 이용한 피어 대 피어 데이터 전송을 통해스트리밍 데이터를 분산 전송하는 분산 스트리밍 시스템 및그 방법

Publications (2)

Publication Number Publication Date
KR20090030160A KR20090030160A (ko) 2009-03-24
KR100919254B1 true KR100919254B1 (ko) 2009-09-30

Family

ID=40696604

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020070095532A KR100919254B1 (ko) 2007-09-19 2007-09-19 유디피 홀펀칭을 이용한 피어 대 피어 데이터 전송을 통해스트리밍 데이터를 분산 전송하는 분산 스트리밍 시스템 및그 방법

Country Status (1)

Country Link
KR (1) KR100919254B1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109039915A (zh) * 2018-08-24 2018-12-18 珠海迈越信息技术有限公司 一种建立数据连接通道的方法及系统
KR101944946B1 (ko) 2017-09-28 2019-02-01 김지태 Udp 통신 테스트 장치 및 그 방법

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101155203B1 (ko) * 2010-12-21 2012-06-13 (주)네오위즈게임즈 패키지 파일의 다운로드 및 어플리케이션 설치를 병행하는 단말기 및 그 방법
KR102579413B1 (ko) * 2017-10-23 2023-09-18 한국전자통신연구원 다수의 디스플레이 기기에 신속한 데이터 전달을 위한 디스플레이 기기의 연결 방법
CN113676757A (zh) * 2020-05-15 2021-11-19 杭州晨熹多媒体科技有限公司 一种数据传输方法、装置和系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030204602A1 (en) * 2002-04-26 2003-10-30 Hudson Michael D. Mediated multi-source peer content delivery network architecture
US20040148344A1 (en) * 2003-11-19 2004-07-29 Serenade Systems Content distribution architecture
US7174385B2 (en) * 2004-09-03 2007-02-06 Microsoft Corporation System and method for receiver-driven streaming in a peer-to-peer network

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030204602A1 (en) * 2002-04-26 2003-10-30 Hudson Michael D. Mediated multi-source peer content delivery network architecture
US20040148344A1 (en) * 2003-11-19 2004-07-29 Serenade Systems Content distribution architecture
US7174385B2 (en) * 2004-09-03 2007-02-06 Microsoft Corporation System and method for receiver-driven streaming in a peer-to-peer network

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101944946B1 (ko) 2017-09-28 2019-02-01 김지태 Udp 통신 테스트 장치 및 그 방법
CN109039915A (zh) * 2018-08-24 2018-12-18 珠海迈越信息技术有限公司 一种建立数据连接通道的方法及系统
CN109039915B (zh) * 2018-08-24 2021-07-23 珠海迈越信息技术有限公司 一种建立数据连接通道的方法及系统

Also Published As

Publication number Publication date
KR20090030160A (ko) 2009-03-24

Similar Documents

Publication Publication Date Title
US11539768B2 (en) System and method of minimizing network bandwidth retrieved from an external network
EP1633111B1 (en) A system and method for distributed streaming of scalable media
EP1633112B1 (en) A system and method for erasure coding of streaming media
US9325786B2 (en) Peer-to-peer interactive media-on-demand
KR101183430B1 (ko) 피어-투-피어 네트워크에서의 수신자 구동형 스트리밍을위한 시스템 및 방법
US8131971B2 (en) Methods and systems for push-to-storage
US7995473B2 (en) Content delivery system for digital object
Li PeerStreaming: A practical receiver-driven peer-to-peer media streaming system
US20080071907A1 (en) Methods and apparatus for data transfer
JP2010027053A (ja) データ配信システム及び方法
KR100919254B1 (ko) 유디피 홀펀칭을 이용한 피어 대 피어 데이터 전송을 통해스트리밍 데이터를 분산 전송하는 분산 스트리밍 시스템 및그 방법
US11843649B2 (en) System and method of minimizing network bandwidth retrieved from an external network
KR101695910B1 (ko) P2p 기반의 스트리밍 서비스에서 데이터 스트림을 패킷타이징하는 시스템 및 방법
KR100741885B1 (ko) 다진 트리 구조를 이용한 응용계층 멀티캐스트 그룹 구성방법
KR101649562B1 (ko) P2p 기반의 스트리밍 서비스에서 데이터 스트림을 패킷타이징하는 시스템 및 방법
KR20120116378A (ko) P2p 기반의 스트리밍 서비스에서 버퍼링을 수행하는 시스템 및 방법 그리고 클라이언트에서 버퍼링을 처리하는 어플리케이션을 배포하는 시스템

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20120724

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20130725

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20150825

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20160912

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20170825

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20190826

Year of fee payment: 11