KR101600469B1 - 스트리밍 서비스를 위한 클라이언트 및 서버의 동작 방법 - Google Patents

스트리밍 서비스를 위한 클라이언트 및 서버의 동작 방법 Download PDF

Info

Publication number
KR101600469B1
KR101600469B1 KR1020140089679A KR20140089679A KR101600469B1 KR 101600469 B1 KR101600469 B1 KR 101600469B1 KR 1020140089679 A KR1020140089679 A KR 1020140089679A KR 20140089679 A KR20140089679 A KR 20140089679A KR 101600469 B1 KR101600469 B1 KR 101600469B1
Authority
KR
South Korea
Prior art keywords
file
data
client
parameter
resolution
Prior art date
Application number
KR1020140089679A
Other languages
English (en)
Other versions
KR20160009322A (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 KR1020140089679A priority Critical patent/KR101600469B1/ko
Priority to US15/318,679 priority patent/US20170134463A1/en
Priority to JP2017502886A priority patent/JP2017529726A/ja
Priority to CN201580038102.5A priority patent/CN106537924A/zh
Priority to PCT/KR2015/003230 priority patent/WO2016010229A1/ko
Priority to EP15821394.2A priority patent/EP3171604A4/en
Publication of KR20160009322A publication Critical patent/KR20160009322A/ko
Application granted granted Critical
Publication of KR101600469B1 publication Critical patent/KR101600469B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/75Media network packet handling
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/60Network structure or processes for video distribution between server and client or between remote clients; Control signalling between clients, server and network components; Transmission of management data between server and client, e.g. sending from server to client commands for recording incoming content stream; Communication details between server and client 
    • H04N21/61Network physical structure; Signal processing
    • H04N21/6106Network physical structure; Signal processing specially adapted to the downstream path of the transmission network
    • H04N21/6125Network physical structure; Signal processing specially adapted to the downstream path of the transmission network involving transmission via Internet
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/236Assembling of a multiplex stream, e.g. transport stream, by combining a video stream with other content or additional data, e.g. inserting a URL [Uniform Resource Locator] into a video stream, multiplexing software data into a video stream; Remultiplexing of multiplex streams; Insertion of stuffing bits into the multiplex stream, e.g. to obtain a constant bit-rate; Assembling of a packetised elementary stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/70Media network packetisation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/75Media network packet handling
    • H04L65/756Media network packet handling adapting media to device capabilities
    • 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
    • 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/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/22Parsing or analysis of headers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/434Disassembling of a multiplex stream, e.g. demultiplexing audio and video streams, extraction of additional data from a video stream; Remultiplexing of multiplex streams; Extraction or processing of SI; Disassembling of packetised elementary stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/60Network structure or processes for video distribution between server and client or between remote clients; Control signalling between clients, server and network components; Transmission of management data between server and client, e.g. sending from server to client commands for recording incoming content stream; Communication details between server and client 
    • H04N21/63Control signaling related to video distribution between client, server and network components; Network processes for video distribution between server and clients or between remote clients, e.g. transmitting basic layer and enhancement layers over different transmission paths, setting up a peer-to-peer communication via Internet between remote STB's; Communication protocols; Addressing
    • H04N21/637Control signals issued by the client directed to the server or network components
    • H04N21/6377Control signals issued by the client directed to the server or network components directed to server
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/60Network structure or processes for video distribution between server and client or between remote clients; Control signalling between clients, server and network components; Transmission of management data between server and client, e.g. sending from server to client commands for recording incoming content stream; Communication details between server and client 
    • H04N21/63Control signaling related to video distribution between client, server and network components; Network processes for video distribution between server and clients or between remote clients, e.g. transmitting basic layer and enhancement layers over different transmission paths, setting up a peer-to-peer communication via Internet between remote STB's; Communication protocols; Addressing
    • H04N21/643Communication protocols
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/60Network structure or processes for video distribution between server and client or between remote clients; Control signalling between clients, server and network components; Transmission of management data between server and client, e.g. sending from server to client commands for recording incoming content stream; Communication details between server and client 
    • H04N21/65Transmission of management data between client and server
    • H04N21/658Transmission by the client directed to the server
    • H04N21/6587Control parameters, e.g. trick play commands, viewpoint selection
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/83Generation or processing of protective or descriptive data associated with content; Content structuring
    • H04N21/845Structuring of content, e.g. decomposing content into time segments
    • H04N21/8455Structuring of content, e.g. decomposing content into time segments involving pointers to the content, e.g. pointers to the I-frames of the video stream

Abstract

스트리밍 서비스를 위한 클라이언트 및 서버의 동작 방법이 개시된다. 일 실시예에 따른 클라이언트는 데이터 요청을 지시하는 매개변수를 포함하는 요청 패킷을 서버로 전송한다. 일 실시예에 따른 서버는 매개변수에 대응하는 주소 범위의 데이터를 포함하는 응답 패킷을 클라이언트로 전송한다.

Description

스트리밍 서비스를 위한 클라이언트 및 서버의 동작 방법{OPERATING METHOD OF CLIENT AND SERVER FOR STREAMING SERVICE}
아래 실시예들은 스트리밍 서비스를 위한 클라이언트 및 서버의 동작 방법에 관한 것이다.
본 발명의 배경이 되는 기술은 다음의 문헌에 개시되어 있다.
1) 한국 공개특허공보 제2014-0054138호 (2014.05.08 공개)
2) 한국 공개특허공보 제2012-0117384호 (2012.10.24 공개)
과거 대부분의 스트리밍 기술들은 실시간 스트리밍 프로토콜(Real Time Streaming Protocol, RTSP)과 같은 스트리밍 전용 프로토콜을 이용해 왔다. 하지만, 최근 스트리밍 기술들은 인터넷과 같이 넓게 분포된 HTTP 네트워크 상에서 효율적으로 동작할 수 있도록 설계된다. 예를 들어, 가변 비트레이트 스트리밍(adaptive bitrate streaming)은 네트워크의 상태 혹은 전송 속도 등을 기반으로 대역폭이 소화할 수 있는 화질의 컨텐츠를 전송하는 HTTP 기반의 스트리밍 기법이다.
가변 비트레이트 스트리밍은 파일을 시간 단위로 나누어 전송한다. 예를 들어, 가변 비트레이트 스트리밍은 2~10초의 컨텐츠를 저장하는 조각(chunk)을 이용하여 스트리밍 서비스를 제공할 수 있다. 이 때, 전송되는 조각들 각각은 I-frame 등 미리 정해진 키 프레임으로 시작될 것이 요구된다. 이러한 조건을 만족시키기 위하여, 가변 비트레이트 스트리밍에서는 영상 파일을 스트리밍용 파일로 변환(transcoding)하는 과정이 필수적으로 요구된다. 이러한 변환 과정에서 영상 파일의 화질이 저하되고, 또한 변환을 위한 부수적인 시간 및 컴퓨팅 파워가 추가적으로 소모된다.
또한, 가변 비트레이트 스트리밍은 매니페스트(manifest) 파일을 필수적으로 이용한다. 매니페스트 파일은 스트리밍용 파일의 각 조각들에 대한 정보를 저장하는 파일이다. 매니페스트 파일은 영상 파일이 스트리밍용 파일로 변환될 때 생성된다. 가변 비트레이트 스트리밍에 따르면, 클라이언트는 스트리밍 서비스를 제공받기 위하여 매니페스트 파일을 필수적으로 참조하여야 한다.
아래에서 설명할 실시예들은 스트리밍용 파일 포맷을 이용하지 않고, 영상 파일 포맷을 그대로 이용하는 HTTP 기반 스트리밍 기술을 제공한다. 실시예들은 영상 파일을 용량 단위로 나누어 전송하는 기술을 제공한다. 예를 들어, 실시예들은 영상 파일을 실제로 분할하지 않고 영상 파일의 일부를 바이트 주소 단위로 전송하는 스트리밍 서비스를 제공할 수 있다. 실시예들에 따르면, 전송되는 조각들은 키 프레임으로 시작될 것이 요구되지 않으며, 영상 파일을 스트리밍용 파일로 변환하는 과정이 생략될 수 있다.
실시예들은 영상 파일을 스트리밍용 파일로 변환하는 과정을 생략함으로써, 변환 시 발생되는 화질 저하를 방지하고 서버의 부하를 감소시킬 수 있다. 또한, 실시예들에 따르면, 영상 파일이 서버에 업로드된 이후 영상 파일을 스트리밍용 파일로 변환하는 시간이 요구되지 않으므로, 보다 신속한 스트리밍 서비스가 제공될 수 있다. 뿐만 아니라, 실시예들에 따르면 스트리밍용 파일이 별도로 생성되지 않으므로, 스트리밍용 파일의 조각 정보를 저장하는 매니페스트 파일이 요구되지 않는다.
일 측에 따른 스트리밍 서비스를 위한 클라이언트의 동작 방법은 파일 URL 및 재생 정보 요청을 지시하는 제1 매개변수를 포함하는 제1 요청 패킷을 전송하는 단계; 상기 파일 URL에 대응하는 파일의 재생 정보를 포함하는 제1 응답 패킷을 수신하는 단계; 상기 파일 URL 및 데이터 요청을 지시하는 제2 매개변수를 포함하는 제2 요청 패킷을 전송하는 단계; 및 상기 파일 내 상기 제2 매개변수에 대응하는 주소 범위의 데이터를 포함하는 제2 응답 패킷을 수신하는 단계를 포함한다.
상기 클라이언트의 동작 방법은 상기 제1 매개변수를 미리 정해진 제1 지시자로 설정하는 단계; 및 상기 제1 응답 패킷으로부터 상기 파일을 분할하는 조각의 크기, 상기 조각의 개수, 상기 파일에 저장된 컨텐츠의 해상도, 상기 해상도와 다른 제2 해상도의 컨텐츠를 저장하는 제2 파일의 URL, 및 상기 제2 해상도를 추출하는 단계를 더 포함할 수 있다.
상기 클라이언트의 동작 방법은 상기 제2 매개변수를 최초 인덱스로 설정하는 단계; 및 상기 제2 응답 패킷의 데이터를 버퍼에 입력하는 단계를 더 포함할 수 있다. 상기 클라이언트의 동작 방법은 버퍼의 잔량을 체크하는 단계; 상기 버퍼의 잔량이 임계 값 이하가 되면, 상기 제2 매개변수를 다음 재생할 조각의 인덱스로 설정하는 단계; 및 상기 제2 응답 패킷의 데이터를 상기 버퍼에 입력하는 단계를 더 포함할 수 있다.
상기 클라이언트의 동작 방법은 상기 제2 매개변수를 최초 인덱스로 설정하는 단계; 및 상기 제2 응답 패킷으로부터 상기 파일의 키 프레임 정보를 위한 오프셋 주소를 추출하는 단계를 더 포함할 수 있다. 상기 클라이언트의 동작 방법은 상기 오프셋 주소의 데이터가 상기 제2 응답 패킷에 포함된 경우, 상기 제2 응답 패킷으로부터 상기 키 프레임 정보를 추출하는 단계를 더 포함할 수 있다.
상기 클라이언트의 동작 방법은 상기 오프셋 주소의 데이터가 상기 제2 응답 패킷에 포함되지 않는 경우, 데이터 요청을 지시하는 제3 매개변수를 상기 오프셋 주소로 설정하는 단계; 상기 파일 URL 및 상기 제3 매개변수를 포함하는 제3 요청 패킷을 전송하는 단계; 상기 파일 내 상기 제3 매개변수에 대응하는 주소 범위의 데이터를 포함하는 제3 응답 패킷을 수신하는 단계; 및 상기 제3 응답 패킷으로부터 상기 키 프레임 정보를 추출하는 단계를 더 포함할 수 있다.
상기 클라이언트의 동작 방법은 상기 제2 응답 패킷의 데이터를 버퍼에 입력하는 단계; 상기 데이터가 재생되는 동안 상기 파일의 키 프레임들을 추출하는 단계; 및 상기 키 프레임들에 기초하여 상기 파일의 키 프레임 정보를 생성하는 단계를 더 포함할 수 있다.
상기 클라이언트의 동작 방법은 해상도 변경 입력을 수신하는 단계; 상기 파일 URL을 상기 해상도 변경 입력에 포함된 새로운 해상도에 대응하는 제2 파일의 URL로 설정하는 단계; 상기 제1 매개변수를 미리 정해진 제2 지시자로 설정하는 단계; 및 상기 제1 응답 패킷으로부터 상기 제2 파일을 분할하는 조각의 크기, 및 상기 조각의 개수를 추출하는 단계를 더 포함할 수 있다.
상기 클라이언트의 동작 방법은 해상도 변경 입력을 수신하는 단계; 상기 파일 URL을 상기 해상도 변경 입력에 포함된 새로운 해상도에 대응하는 제2 파일의 URL로 설정하는 단계; 상기 제2 파일의 키 프레임 정보에 기초하여 현재 재생 시간에 대응하는 키 프레임을 검출하는 단계; 상기 제2 매개변수를 상기 검출된 키 프레임의 주소로 설정하는 단계; 및 상기 제2 응답 패킷의 데이터를 버퍼에 입력하는 단계를 더 포함할 수 있다.
상기 클라이언트의 동작 방법은 해상도 변경 입력을 수신하는 단계; 상기 파일 URL을 상기 해상도 변경 입력에 포함된 새로운 해상도에 대응하는 제2 파일의 URL로 설정하는 단계;
현재 재생 시간 및 전체 재생 시간에 기초하여 상기 현재 재생 시간에 대응하는 조각을 추정하는 단계; 상기 제2 매개변수를 상기 추정된 조각의 인덱스로 설정하는 단계; 상기 제2 응답 패킷의 시간 범위가 상기 현재 재생 시간을 포함하는 경우, 상기 제2 응답 패킷의 데이터로부터 상기 현재 재생 시간에 가장 가까운 키 프레임을 검출하는 단계; 및 상기 검출된 키 프레임 이후의 데이터를 상기 버퍼에 입력하는 단계를 더 포함할 수 있다.
상기 클라이언트의 동작 방법은 상기 제2 응답 패킷의 시간 범위가 상기 현재 재생 시간을 포함하지 않는 경우, 상기 현재 재생 시간에 대응하는 새로운 인덱스를 추정하는 단계; 데이터 요청을 지시하는 제3 매개변수를 상기 새로운 인덱스로 설정하는 단계; 상기 파일 URL 및 상기 제3 매개변수를 포함하는 제3 요청 패킷을 전송하는 단계; 상기 파일 내 상기 제3 매개변수에 대응하는 주소 범위의 데이터를 포함하는 제3 응답 패킷을 수신하는 단계; 및 상기 제3 응답 패킷의 데이터로부터 상기 현재 재생 시간에 가장 가까운 키 프레임을 검출하는 단계를 더 포함할 수 있다.
상기 클라이언트의 동작 방법은 탐색 시간을 수신하는 단계; 상기 파일의 키 프레임 정보를 이용하여 상기 탐색 시간에 대응하는 키 프레임을 검출하는 단계; 상기 제2 매개변수를 상기 검출된 키 프레임의 주소로 설정하는 단계; 및 상기 제2 응답 패킷의 데이터를 버퍼에 입력하는 단계를 더 포함할 수 있다.
상기 클라이언트의 동작 방법은 탐색 시간을 수신하는 단계; 상기 탐색 시간과 상기 파일의 전체 재생 시간에 기초하여 상기 탐색 시간에 대응하는 조각을 추정하는 단계; 상기 제2 매개변수를 상기 추정된 조각의 인덱스로 설정하는 단계; 상기 제2 응답 패킷의 시간 범위가 상기 탐색 시간을 포함하는 경우, 상기 제2 응답 패킷의 데이터로부터 상기 탐색 시간에 가장 가까운 키 프레임을 검출하는 단계; 및 상기 검출된 키 프레임 이후의 데이터를 버퍼에 입력하는 단계를 더 포함할 수 있다.
상기 클라이언트의 동작 방법은 상기 제2 응답 패킷의 시간 범위가 상기 탐색 시간을 포함하지 않는 경우, 상기 탐색 시간에 대응하는 새로운 인덱스를 추정하는 단계; 데이터 요청을 지시하는 제3 매개변수를 상기 새로운 인덱스로 설정하는 단계; 상기 파일 URL 및 상기 제3 매개변수를 포함하는 제3 요청 패킷을 전송하는 단계; 상기 파일 내 상기 제3 매개변수에 대응하는 주소 범위의 데이터를 포함하는 제3 응답 패킷을 수신하는 단계; 및 상기 제3 응답 패킷의 데이터로부터 상기 탐색 시간에 가장 가까운 키 프레임을 검출하는 단계를 더 포함할 수 있다.
다른 일 측에 따른 스트리밍 서비스를 위한 서버의 동작 방법은 파일 URL 및 매개변수를 포함하는 요청 패킷을 수신하는 단계; 상기 매개변수가 데이터 요청을 지시하는 경우, 상기 파일 URL에 대응하는 파일 내 상기 매개변수에 대응하는 주소 범위의 데이터를 응답하는 단계; 및 상기 매개변수가 재생 정보 요청을 지시하는 경우, 상기 파일의 재생 정보를 응답하는 단계를 포함한다.
상기 데이터를 응답하는 단계는 상기 매개 변수가 인덱스를 포함하는 경우, 상기 파일 내 상기 인덱스에 대응하는 주소 범위의 데이터를 응답하는 단계; 및 상기 매개 변수가 주소를 포함하는 경우, 상기 파일 내 상기 주소에 대응하는 주소 범위의 데이터를 응답하는 단계 중 적어도 하나를 포함할 수 있다.
상기 주소에 대응하는 주소 범위의 데이터를 응답하는 단계는 상기 매개 변수가 두 개의 주소들을 포함하는 경우, 상기 파일 내 상기 두 개의 주소들 사이의 데이터를 응답하는 단계; 및 상기 매개 변수가 하나의 주소를 포함하는 경우, 상기 파일 내 상기 하나의 주소와 상기 파일의 끝 사이의 데이터를 응답하는 단계 중 적어도 하나를 포함할 수 있다.
상기 재생 정보를 응답하는 단계는 상기 매개변수가 미리 정해진 제1 지시자를 포함하는 경우, 상기 파일을 분할하는 조각의 크기, 상기 조각의 개수, 상기 파일에 저장된 컨텐츠의 해상도, 상기 해상도와 다른 제2 해상도의 컨텐츠를 저장하는 제2 파일의 URL, 및 상기 제2 해상도를 응답하는 단계; 및 상기 매개변수가 미리 정해진 제2 지시자를 포함하는 경우, 상기 조각의 크기 및 상기 조각의 개수를 응답하는 단계 중 적어도 하나를 포함할 수 있다.
도 1은 일 실시예에 따른 클라이언트의 동작 방법을 설명하는 도면.
도 2 내지 도 7은 일 실시예에 따른 서버의 동작 방법을 설명하는 도면들.
도 8은 일 실시예에 따른 클라이언트의 기본 동작을 설명하는 도면.
도 9 내지 도 11은 일 실시예에 따른 키 프레임 정보를 획득하는 동작을 설명하는 도면들.
도 12 내지 도 14는 일 실시예에 따른 해상도 변경 동작을 설명하는 도면들.
도 15 내지 도 17은 일 실시예에 따른 탐색 동작을 설명하는 도면들.
도 18 및 도 19는 복수의 url 스트림들을 이용하는 클라이언트의 동작을 설명하는 도면들.
이하, 실시예들을 첨부된 도면을 참조하여 상세하게 설명한다. 각 도면에 제시된 동일한 참조 부호는 동일한 부재를 나타낸다. 하기에서 설명될 실시예들은 스트리밍 서비스를 위한 클라이언트, 또는 서버에 적용될 수 있다.
일 실시예에 따른 클라이언트는 스트리밍 서비스를 제공받는 컴퓨팅 장치로, 예를 들어 퍼스널 컴퓨터, 랩톱 컴퓨터, 테블릿 컴퓨터, PDA, 스마트 폰 등을 포함할 수 있다. 클라이언트에는 http 프로토콜을 이용하여 서버와 통신하는 클라이언트 어플리케이션, 예를 들어 swf 플레이어 등이 설치될 수 있다. 일 실시예에 따른 서버는 스트리밍 서비스를 제공하는 컴퓨팅 장치로, 예를 들어 웹 서버 등을 포함할 수 있다. 서버는 서버 전용 컴퓨팅 장치뿐 아니라 퍼스널 컴퓨터, 랩톱 컴퓨터, 테블릿 컴퓨터, PDA, 스마트 폰 등으로도 구성될 수 있다. 서버에는 http 프로토콜을 이용하여 클라이언트와 통신하는 서버 어플리케이션, 예를 들어 아파치 서버 등이 설치될 수 있다.
도 1은 일 실시예에 따른 클라이언트의 동작 방법을 설명하는 도면이다. 도 1을 참조하면, 일 실시예에 따른 클라이언트(110)는 제1 요청 패킷을 서버(120)로 전송한다. 제1 요청 패킷은 파일 URL 및 재생 정보 요청을 지시하는 제1 매개변수를 포함할 수 있다. 여기서, 파일 URL은 컴퓨터 네트워크 상의 자원을 고유하게 지시하는 정보로, 예를 들어 스트리밍 서비스의 대상이 되는 영상 파일을 고유하게 지시하는 정보일 수 있다. 재생 정보 요청을 지시하는 제1 매개변수는 미리 정해진 문자 또는 문자열로, 예를 들어 'i' 또는 'r' 등일 수 있다. 클라이언트(110)는 제1 요청 패킷을 서버(120)에 전송함으로써, 파일 URL에 대응하는 파일의 재생 정보를 요청할 수 있다. 파일의 재생 정보는 스트리밍 서비스를 통하여 파일을 재생하기 위한 정보로, 예를 들어 전송을 위하여 파일이 분할된 정보 등을 포함할 수 있다.
클라이언트(110)는 서버(120)로부터 제1 응답 패킷을 수신한다. 제1 응답 패킷은 파일 URL에 대응하는 파일의 재생 정보를 포함할 수 있다. 전술한 바와 같이, 실시예들은 파일을 용량 단위로 나누어 전송하는 스트리밍 기술을 제공할 수 있다. 이하, 파일을 분할하는 개개의 용량 단위는 조각이라고 지칭될 수 있다.
일 실시예에 따르면, 파일을 분할하는 조각의 크기는 서버(120)에 의하여 정해질 수 있다. 서버(120)는 파일을 분할하는 조각의 크기에 따라 파일을 분할하는데 필요한 조각의 개수를 계산할 수 있다. 이 경우, 제1 응답 패킷의 재생 정보는 조각의 크기 및 조각의 개수를 포함할 수 있다. 또는, 서버(120)는 제1 응답 패킷에 조각의 크기 및 파일의 총 크기를 포함시킬 수 있다. 이 경우, 클라이언트(110)는 조각의 크기 및 파일의 총 크기에 기초하여 파일을 분할하는데 필요한 조각의 개수를 계산할 수 있다.
다른 실시예에 따르면, 파일을 분할하는 조각의 크기는 클라이언트(120)에 의하여 정해질 수 있다. 클라이언트(120)는 조각의 크기를 제1 매개변수에 포함시켜 서버(120)로 전송할 수 있다. 서버(120)는 수신된 조각의 크기에 기초하여 파일을 분할하는데 필요한 조각의 개수를 계산할 수 있다. 이 경우, 제1 응답 패킷의 재생 정보는 조각의 개수를 포함할 수 있다. 또는, 서버(120)는 제1 응답 패킷에 파일의 총 크기를 포함시킬 수 있다. 이 경우, 클라이언트(110)는 이미 조각의 크기를 알고 있으므로, 파일의 총 크기에 기초하여 파일을 분할하는데 필요한 조각의 개수를 계산할 수 있다.
클라이언트(110)는 제2 요청 패킷을 서버(120)로 전송한다. 제2 요청 패킷은 파일 URL 및 데이터 요청을 지시하는 제2 매개변수를 포함할 수 있다. 데이터 요청을 지시하는 제2 매개변수는 파일 내 주소를 지시하는 숫자 또는 문자열로, 예를 들어 '주소r' 또는 '주소1r주소2' 등일 수 있다. 이하, 파일 내 주소는 바이트 주소일 수 있다. 클라이언트(110)는 제2 요청 패킷을 서버(120)에 전송함으로써, 파일 URL에 대응하는 파일의 적어도 일부를 용량 단위로 요청할 수 있다.
클라이언트(110)는 서버(120)로부터 제2 응답 패킷을 수신한다. 제2 응답 패킷은 파일 URL에 대응하는 파일 내 제2 매개변수에 대응하는 주소 범위의 데이터를 포함할 수 있다. 클라이언트(110)는 제2 응답 패킷의 데이터를 버퍼에 입력할 수 있다. 아래에서 상세히 설명하겠으나, 버퍼에 입력된 데이터는 디먹스 및/또는 디코더를 통하여 재생될 수 있다.
도 2 내지 도 7은 일 실시예에 따른 서버의 동작 방법을 설명하는 도면들이다. 도 2를 참조하면, 일 실시예에 따른 서버(220)는 클라이언트(210)로부터 요청 패킷을 수신한다. 요청 패킷은 파일 URL 및 매개변수를 포함할 수 있다. 파일 URL은 컴퓨터 네트워크 상의 자원을 고유하게 지시하는 정보로, 예를 들어 서버(220)에 저장된 파일을 지시하는 정보일 수 있다.
서버(220)는 매개변수가 데이터 요청을 지시하는지, 혹은 재생 정보 요청을 지시하는지 여부를 판단할 수 있다. 예를 들어, 서버(220)는 요청 패킷에 포함된 매개변수가 재생 정보 요청을 지시하는 제1 매개변수인지, 혹은 데이터 요청을 지시하는 제2 매개변수인지 여부를 판단할 수 있다. 재생 정보 요청을 지시하는 제1 매개변수 및 데이터 요청을 지시하는 제2 매개변수는 미리 정해질 수 있고, 서버(220)와 클라이언트(210)는 미리 정해진 제1 매개변수 및 제2 매개변수를 공유할 수 있다.
매개변수가 재생 정보 요청을 지시하는 경우, 서버(220)는 파일의 재생 정보를 응답할 수 있다. 일 예로, 도 3을 참조하면, 서버(320)는 클라이언트(310)로부터 파일1 URL 및 제1 지시자를 포함하는 요청 패킷을 수신할 수 있다. 여기서, 제1 지시자는 미리 정해진 문자 또는 문자열로, 예를 들어 'r'일 수 있다. 요청 패킷 내에서 파일1 URL 및 제1 지시자는 미리 정해진 부호, 예를 들어 '?'로 구분될 수 있다. 서버(320)는 요청 패킷에 포함된 매개변수가 제1 지시자를 포함하는지 여부를 판단할 수 있다.
요청 패킷에 포함된 매개변수가 제1 지시자를 포함하는 경우, 서버(320)는 파일1 URL에 대응하는 제1 파일을 분할하는 조각의 크기(chunk 크기), 조각의 개수(chunk 개수), 및 파일 리스트를 응답할 수 있다. 파일 리스트는 제1 파일의 해상도, 및 제1 파일에 저장된 컨텐츠의 제1 해상도와 다른 해상도의 컨텐츠를 저장하는 적어도 하나의 파일의 URL 및 해상도를 포함할 수 있다. 예를 들어, 파일 리스트는 제1 파일에 저장된 컨텐츠의 제1 해상도(파일1해상도), 제1 해상도와 다른 제2 해상도의 컨텐츠를 저장하는 제2 파일의 URL(파일2URL), 및 제2 해상도(파일2해상도) 등을 포함할 수 있다. 제1 해상도와 다른 해상도의 컨텐츠를 저장하는 파일들이 복수인 경우, 파일 리스트는 복수의 파일들의 URL들 및 해상도들을 포함할 수 있다.
서버(320)는 파일1 URL에 대응하는 제1 파일이 저장된 디렉토리 내에서 제1 해상도와 다른 해상도의 컨텐츠를 저장하는 적어도 하나의 파일을 검색할 수 있다. 예를 들어, 제1 파일이 저장된 디렉토리에 표 1과 같은 파일들이 저장되어 있고, 제1 파일이 '뮤직비디오.mp4'인 경우, 서버(320)는 '뮤직비디오_720p.mp4', '뮤직비디오_480p.mp4', 및 '뮤직비디오_360p.mp4'를 검색할 수 있다.
뮤직비디오.mp4
뮤직비디오_720p.mp4
뮤직비디오_480p.mp4
뮤직비디오_360p.mp4

이 경우, 서버(320)는 표 2와 같은 응답 패킷을 생성하고, 응답 패킷을 클라이언트(310)로 전송할 수 있다.
2097152 97 1080 URL2 720 URL3 480 URL4 360

여기서, 응답 패킷의 첫 번째 원소는 chunk 크기이고, 두 번째 원소는 chunk 개수이며, 세 번째 원소는 파일1해상도이고, 네 번째 원소는 파일2URL이며, 다섯 번째 원소는 파일2해상도이고, 여섯 번째 원소는 파일3URL이며, 일곱 번째 원소는 파일3해상도이고, 여덟 번째 원소는 파일4URL이며, 아홉 번째 원소는 파일4해상도이다. chunk 크기는 바이트 단위일 수 있다.
경우에 따라서 통일성 있는 자료 구조를 위하여, 파일 리스트는 동일한 컨텐츠에 대응하는 모든 파일들의 URL들 및 해상도들을 포함할 수 있다. 예를 들어, 파일 리스트는 제1 파일의 URL, 제1 파일의 해상도, 및 제1 파일의 해상도와 다른 해상도의 컨텐츠를 저장하는 적어도 하나의 파일의 URL 및 해상도를 포함할 수 있다. 이 경우, 서버(320)는 표 3과 같은 응답 패킷을 생성하고, 응답 패킷을 클라이언트(310)로 전송할 수 있다.
2097152 97 URL1 1080a URL2 720 URL3 480 URL4 360

여기서, 응답 패킷의 첫 번째 원소는 chunk 크기이고, 두 번째 원소는 chunk 개수이며, 세 번째 원소는 파일1URL이고, 네 번째 원소는 파일1해상도이며, 다섯 번째 원소는 파일2URL이고, 여섯 번째 원소는 파일2해상도이며, 일곱 번째 원소는 파일3URL이고, 여덟 번째 원소는 파일3해상도이며, 아홉 번째 원소는 파일4URL이고, 열 번째 원소는 파일4해상도이다. chunk 크기는 바이트 단위일 수 있다. 현재 요청된 파일(제1 파일)의 해상도가 1080(파일1해상도)라는 것을 표시하기 위하여, 파일1해상도의 말미에 미리 정해진 문자 또는 문자열, 예를 들어 'a'가 추가될 수 있다.
각각의 파일들은 파일명에 해상도를 포함할 수 있다. 예를 들어, 서버(320)는 원본 영상 파일인 '뮤직비디오.mp4'의 업로드가 완료되면, '뮤직비디오.mp4'를 새로운 해상도로 인코딩을 할 수 있다. 이 때, 서버(320)는 원본 영상 파일의 파일명에 새로운 해상도를 부가하여, 새로운 해상도의 파일명을 결정할 수 있다. 이 경우, 서버(320)는 파일명에 기초하여 해당하는 파일에 저장된 컨텐츠의 해상도를 획득(obtain)할 수 있다.
다른 예로, 도 4를 참조하면, 서버(420)는 클라이언트(410)로부터 파일 URL 및 제2 지시자를 포함하는 요청 패킷을 수신할 수 있다. 여기서, 제2 지시자는 미리 정해진 문자 또는 문자열로, 예를 들어 'i'일 수 있다. 요청 패킷 내에서 파일 URL 및 제2 지시자는 미리 정해진 부호, 예를 들어 '?'로 구분될 수 있다. 서버(420)는 요청 패킷에 포함된 매개변수가 제2 지시자를 포함하는지 여부를 판단할 수 있다. 요청 패킷에 포함된 매개변수가 제2 지시자를 포함하는 경우, 서버(420)는 파일 URL에 대응하는 파일을 분할하는 조각의 크기(chunk 크기), 및 조각의 개수(chunk 개수)를 응답할 수 있다.
예를 들어, 요청 패킷이 '파일3URL?i'인 경우, 서버(420)는 표 4와 같은 응답 패킷을 생성하고, 응답 패킷을 클라이언트(410)로 전송할 수 있다.
1048576 86

여기서, 응답 패킷의 첫 번째 원소는 chunk 크기이고, 두 번째 원소는 chunk 개수이다. chunk 크기는 바이트 단위일 수 있다. 표 1을 참조하면, 각각의 파일들을 분할하는 chunk 크기는 서로 다르게 설정될 수 있다. 다만, 실시예들은 각각의 파일들을 분할하는 chunk 크기가 서로 다르게 설정되도록 제한되지 않는다. 예를 들어, 각각의 파일들을 분할하는 chunk 크기는 서로 동일하게 설정될 수도 있다.
다시 도 2를 참조하면, 매개변수가 데이터 요청을 지시하는 경우, 서버(220)는 파일 URL에 대응하는 파일 내 매개변수에 대응하는 주소 범위의 데이터를 응답할 수 있다. 일 예로, 도 5를 참조하면, 서버(520)는 클라이언트(510)로부터 파일 URL 및 인덱스를 포함하는 요청 패킷을 수신할 수 있다. 여기서, 인덱스는 0 이상의 정수일 수 있다. 요청 패킷 내 파일 URL 및 인덱스는 미리 정해진 부호, 예를 들어 '?'로 구분될 수 있다. 서버(520)는 요청 패킷에 포함된 매개변수가 인덱스를 포함하는지 여부를 판단할 수 있다. 요청 패킷에 포함된 매개변수가 인덱스를 포함하는 경우, 서버(520)는 파일 URL에 대응하는 파일 내 인덱스에 대응하는 주소 범위의 데이터를 응답할 수 있다.
예를 들어, 요청 패킷이 '파일URL?n'인 경우, 서버(520)는 파일URL에 대응하는 파일을 분할하는 조각의 크기를 획득할 수 있다. 파일을 위한 chunk 크기가 2097152 바이트인 경우, 서버(520)는 표 5와 같은 데이터를 클라이언트(510)로 전송할 수 있다. 표 5의 데이터는 chunk-n으로 지칭될 수 있다.
[(2097152)*n, (2097152)*(n+1)-1]

여기서, [제1 바이트 주소, 제2 바이트 주소]는 제1 바이트 주소부터 제2 바이트 주소까지의 데이터이다.
다른 예로, 파일 URL 및 인덱스를 포함하는 요청 패킷은 헤더(header)를 포함할 수 있다. 헤더는 주소 범위 파라미터를 포함할 수 있다. 헤더는 http 헤더일 수 있다. 서버(520)는 요청 패킷의 헤더에 포함된 주소 범위 파라미터를 이용하여 인덱스에 대응하는 조각의 일부 데이터를 클라이언트(510)로 전송할 수 있다. 예를 들어, 요청 패킷에 포함된 파일 URL에 대응하는 파일을 위한 chunk 크기가 2097152 바이트이고, 요청 패킷에 포함된 인덱스가 n이며, 요청패킷의 주소 범위 파라미터가 (start range, end range)인 경우, 서버(520)는 표 6과 같은 데이터를 클라이언트(510)로 전송할 수 있다.
[(2097152)*n + start range, (2097152)*n + end range]

여기서, start range와 end range의 단위는 바이트일 수 있다. 서버(520)는 캐시 서버를 포함할 수 있다. 캐시 서버는 파일 URL 및 인덱스에 기초하여 조각 데이터를 캐시할 수 있다. 이 경우, 요청 패킷의 헤더에 포함된 주소 범위 파라미터가 상이하더라도, 요청 패킷에 포함된 파일 URL 및 인덱스가 동일하면, 캐시 서버에 캐싱된 조각 데이터가 활용될 수 있다.
또 다른 예로, 도 6을 참조하면, 서버(620)는 클라이언트(610)로부터 파일 URL 및 주소를 포함하는 요청 패킷을 수신할 수 있다. 여기서, 주소는 바이트 주소일 수 있다. 요청 패킷 내 파일 URL 및 주소는 미리 정해진 부호, 예를 들어 '?'로 구분될 수 있다. 주소와 인덱스를 구별하기 위하여, 주소 뒤에는 미리 정해진 문자 또는 문자열, 예를 들어 'r'이 추가될 수 있다. 서버(620)는 요청 패킷에 포함된 매개변수가 주소를 포함하는지 여부를 판단할 수 있다. 요청 패킷에 포함된 매개변수가 주소를 포함하는 경우, 서버(620)는 파일 URL에 대응하는 파일 내 주소에 대응하는 주소 범위의 데이터를 응답할 수 있다.
예를 들어, 요청 패킷이 '파일URL?주소r'인 경우, 서버(620)는 표 7과 같은 데이터를 클라이언트(610)로 전송할 수 있다.
[주소, 파일 끝]

여기서, [주소, 파일 끝]은 주소부터 파일 끝까지의 데이터이다.
또 다른 예로, 도 7을 참조하면, 서버(720)는 클라이언트(710)로부터 파일 URL 및 복수의 주소들, 예를 들어 제1 주소와 제2 주소를 포함하는 요청 패킷을 수신할 수 있다. 여기서, 복수의 주소들은 각각 바이트 주소일 수 있다. 요청 패킷 내 파일 URL 및 복수의 주소들은 미리 정해진 부호, 예를 들어 '?'로 구분될 수 있다. 또한, 복수의 주소들을 서로 구별하기 위하여, 복수의 주소들 사이에 미리 정해진 문자 또는 문자열, 예를 들어 'r'이 추가될 수 있다. 서버(720)는 요청 패킷에 포함된 매개변수가 복수의 주소들을 포함하는지 여부를 판단할 수 있다. 요청 패킷에 포함된 매개변수가 복수의 주소들을 포함하는 경우, 서버(720)는 파일 URL에 대응하는 파일 내 복수의 주소들에 대응하는 주소 범위의 데이터를 응답할 수 있다.
예를 들어, 요청 패킷이 '파일URL?주소1r주소2'인 경우, 서버(720)는 표 8과 같은 데이터를 클라이언트(710)로 전송할 수 있다.
[주소1, 주소2]

여기서, [주소1, 주소2]는 제1 주소부터 제2 주소까지의 데이터이다.
도 8은 일 실시예에 따른 클라이언트의 기본 동작을 설명하는 도면이다. 도 8을 참조하면, 일 실시예에 따른 클라이언트(810)는 스트리밍 서비스를 통하여 재생하려는 제1 파일의 URL, 예를 들어 '파일1URL'을 획득할 수 있다. 클라이언트(810)는 제1 파일의 최초 조각을 요청하는 요청 패킷, 예를 들어 '파일1URL?0'을 서버(820)로 전송할 수 있다. 또한, 클라이언트(810)는 제1 파일의 재생 정보를 요청하는 요청 패킷, 예를 들어 '파일1URL?r'을 서버(820)로 전송할 수 있다.
클라이언트(810)는 서버(820)로부터 제1 파일의 재생 정보를 포함하는 응답 패킷을 수신할 수 있다. 예를 들어, 제1 파일의 재생 정보는 chunk 크기, chunk 개수, 및 파일 리스트를 포함할 수 있다. 파일 리스트는 파일1해상도, 파일2URL, 및 파일2해상도 등을 포함할 수 있다. 클라이언트(810)는 응답 패킷으로부터 제1 파일의 재생 정보를 추출할 수 있다.
클라이언트(810)는 서버(820)로부터 제1 파일의 최초 조각, 예를 들어 'chunk-0'을 포함하는 응답 패킷을 수신할 수 있다. 클라이언트(810)는 'chunk-0'을 재생할 수 있다. 예를 들어, 클라이언트(810)는 응답 패킷에 포함된 'chunk-0'을 버퍼에 입력할 수 있다. 버퍼에 입력된 데이터는 디먹스 및/또는 디코더를 통하여 재생될 수 있다.
클라이언트(810)는 버퍼의 잔량을 체크할 수 있다. 예를 들어, 버퍼의 잔량이 미리 정해진 임계 값 이하인지 여부를 판단할 수 있다. 미리 정해진 임계 값은 바이트 단위 또는 시간 단위일 수 있다. 미리 정해진 임계 값이 시간 단위인 경우, 재생 중인 컨텐츠의 해상도에 기초하여 시간 단위 임계 값이 바이트 단위 임계 값으로 환산될 수 있다.
버퍼의 잔량이 미리 정해진 임계 값 이하인 경우, 클라이언트(810)는 제1 파일의 다음 조각을 요청하는 요청 패킷을 서버(820)로 전송할 수 있다. 예를 들어, 클라이언트(810)는 현재 재생 중인 조각의 인덱스에 1을 더함으로써, 다음 조각을 위한 인덱스를 계산할 수 있다. 현재 재생 중인 조각의 인덱스가 0인 경우, 클라이언트(810)는 '파일1URL?1'을 서버(820)로 전송할 수 있다.
클라이언트(810)는 서버(820)로부터 다음 조각, 예를 들어 'chunk-1'을 포함하는 응답 패킷을 수신할 수 있다. 클라이언트(810)는 'chunk-1'을 재생할 수 있다. 예를 들어, 클라이언트(810)는 응답 패킷에 포함된 'chunk-1'을 버퍼에 입력할 수 있다. 버퍼에 입력된 데이터는 디먹스 및/또는 디코더를 통하여 재생될 수 있다.
도 9 내지 도 11은 일 실시예에 따른 키 프레임 정보를 획득하는 동작을 설명하는 도면들이다. 일 실시예에 따른 클라이언트는 스트리밍 서비스를 통하여 재생하려는 제1 파일의 키 프레임 정보를 획득할 수 있다. 제1 파일에 저장된 컨텐츠는 복수의 프레임들로 구성된다. 복수의 프레임들은 화면의 정보를 완전히 담은 프레임과 다른 프레임을 참조하는 프레임으로 분류될 수 있다. 화면의 정보를 완전히 담은 프레임은 키 프레임이라고 지칭될 수 있다. 다른 프레임을 참조하는 프레임은 해당 프레임의 화면의 정보를 완전히 담지 않으므로, 키 프레임에 비하여 작은 용량을 가질 수 있다.
제1 파일의 키 프레임 정보는 제1 파일에 저장된 컨텐츠를 구성하는 복수의 프레임들 중 키 프레임들에 관한 정보를 포함할 수 있다. 예를 들어, 키 프레임 정보는 키 프레임들 각각의 인덱스, 바이트 주소, 및 타임 스탬프 등을 포함할 수 있다.
일 예로, 제1 파일은 키 프레임 정보를 저장할 수 있다. 예를 들어, 제1 파일이 mp4 파일 형식을 가지는 경우, 제1 파일은 키 프레임 정보를 저장할 수 있다. 이 경우, 클라이언트는 키 프레임 정보가 저장된 주소 범위의 데이터를 서버로부터 수신함으로써, 키 프레임 정보를 획득할 수 있다.
보다 구체적으로, 도 9를 참조하면, 클라이언트(910)는 제1 파일의 최초 조각을 요청하는 요청 패킷, 예를 들어 '파일1URL?0'을 서버(920)로 전송할 수 있다. 클라이언트(910)는 서버(920)로부터 제1 파일의 최초 조각, 예를 들어 'chunk-0'을 포함하는 응답 패킷을 수신할 수 있다. 클라이언트(910)는 제1 파일의 최초 조각으로부터 키 프레임 정보의 오프셋 주소를 추출할 수 있다.
클라이언트(910)는 오프셋 주소가 최초 조각의 주소 범위 내에 포함되는지 여부를 판단함으로써, 오프셋 주소의 데이터가 최초 조각에 포함되는지 여부를 판단할 수 있다. 오프셋 주소가 최초 조각의 주소 범위 내에 포함되는 경우, 클라이언트(910)는 이미 수신된 최초 조각으로부터 키 프레임 정보를 획득출할 수 있다.
오프셋 주소가 최초 조각의 주소 범위에 포함되지 않는 경우, 클라이언트(910)는 오프셋 주소 이후의 데이터를 요청하는 요청 패킷, 예를 들어 '파일1URL?오프셋주소r'을 서버(920)로 전송할 수 있다. 클라이언트(910)는 오프셋 주소 이후의 데이터, 예를 들어 [오프셋 주소, 파일1 끝]을 포함하는 응답 패킷을 수신할 수 있다. 클라이언트(910)는 응답 패킷으로부터 키 프레임 정보를 추출할 수 있다.
다른 예로, 제1 파일은 키 프레임 정보를 저장하지 않을 수 있다. 예를 들어, 제1 파일이 flv 파일 형식을 가지는 경우, 제1 파일은 키 프레임 정보를 저장하지 않을 수 있다. 이 경우, 클라이언트는 제1 파일을 재생하는 도중 키 프레임 정보를 생성할 수 있다.
보다 구체적으로, 도 10을 참조하면, 클라이언트(1010)는 제1 파일의 최초 조각을 요청하는 요청 패킷, 예를 들어 '파일1URL?0'을 서버(1020)로 전송할 수 있다. 클라이언트(1010)는 서버(1020)로부터 제1 파일의 최초 조각, 예를 들어 'chunk-0'을 포함하는 응답 패킷을 수신할 수 있다. 클라이언트(1010)는 'chunk-0'을 재생할 수 있다. 예를 들어, 클라이언트(1010)는 응답 패킷에 포함된 'chunk-0'을 버퍼에 입력할 수 있다. 버퍼에 입력된 데이터는 디먹스 및/또는 디코더를 통하여 재생될 수 있다.
클라이언트(1010)는 'chunk-0'이 재생되는 동안 'chunk-0'에 포함된 키 프레임들을 추출할 수 있다. 클라이언트(1010)는 추출된 키 프레임들에 기초하여 제1 파일을 위한 키 프레임 정보를 생성할 수 있다. 예를 들어, 도 11을 참조하면, 클라이언트(1010)는 키 프레임 정보를 포함하는 탐색 테이블(1100)을 생성할 수 있다.
도면에 도시하지 않았으나, 클라이언트(1010)는 최초 조각 이외의 다른 조각을 재생하는 도중에도 키 프레임 정보를 생성할 수 있다. 예를 들어, 클라이언트(1010)는 제1 파일에 저장된 컨텐츠가 재생되는 동안, 탐색 테이블(1100)을 지속적으로 업데이트할 수 있다.
도 12 내지 도 14는 일 실시예에 따른 해상도 변경 동작을 설명하는 도면들이다. 도 12를 참조하면, 일 실시예에 따른 클라이언트(1210)는 스트리밍 서비스를 통하여 재생하려는 제1 파일의 URL, 예를 들어 '파일1URL'을 획득할 수 있다. 클라이언트(1210)는 제1 파일의 최초 조각을 요청하는 요청 패킷, 예를 들어 '파일1URL?0'을 서버(1220)로 전송할 수 있다. 또한, 클라이언트(1210)는 제1 파일의 재생 정보를 요청하는 요청 패킷, 예를 들어 '파일1URL?r'을 서버(1220)로 전송할 수 있다.
클라이언트(1210)는 서버(1220)로부터 제1 파일의 재생 정보를 포함하는 응답 패킷을 수신할 수 있다. 예를 들어, 제1 파일의 재생 정보는 chunk 크기, chunk 개수, 파일 리스트를 포함할 수 있다. 파일 리스트는 파일1해상도, 파일2URL, 및 파일2해상도 등을 포함할 수 있다. 클라이언트(810)는 응답 패킷으로부터 제1 파일의 재생 정보를 추출할 수 있다.
클라이언트(1210)는 서버(1220)로부터 제1 파일의 최초 조각, 예를 들어 '파일1 chunk-0'을 포함하는 응답 패킷을 수신할 수 있다. 클라이언트(1210)는 '파일1 chunk-0'을 재생할 수 있다. 예를 들어, 클라이언트(810)는 응답 패킷에 포함된 '파일1 chunk-0'을 버퍼에 입력할 수 있다. 버퍼에 입력된 데이터는 디먹스 및/또는 디코더를 통하여 재생될 수 있다.
클라이언트(1210)는 해상도 변경 입력을 수신할 수 있다. 예를 들어, 클라이언트(1210)는 미리 정해진 인터페이스를 통하여 사용자에게 현재 재생 중인 컨텐츠의 해상도 및/또는 변경 가능한 해상도를 제공할 수 있다. 클라이언트(1210)는 인터페이스를 통하여 해상도 변경 입력을 수신할 수 있다.
경우에 따라, 클라이언트(1210)는 자동으로 해상도 변경 여부를 결정할 수 있다. 예를 들어, 클라이언트(1210)는 통신 상태, 버퍼링 여부, 통신 비용 등에 기초하여, 해상도 변경 여부를 자동으로 결정할 수 있다.
이하, 제1 해상도에서 제2 해상도로 변경하는 실시예를 설명한다. 클라이언트(1210)는 제2 파일의 재생 정보를 요청하는 요청 패킷, 예를 들어 '파일2URL?i'를 서버(1220)로 전송할 수 있다. 클라이언트(1210)는 이미 해상도 리스트를 가지고 있으므로, 제2 지시자, 예를 들어 'i'를 이용하여 제2 파일의 재생 정보를 요청할 수 있다. 클라이언트(1210)는 서버(1220)로부터 제2 파일의 재생 정보를 포함하는 응답 패킷을 수신할 수 있다. 예를 들어, 제2 파일의 재생 정보는 chunk 크기, 및 chunk 개수를 포함할 수 있다.
클라이언트(1210)는 제2 파일의 최초 조각을 요청하는 요청 패킷, 예를 들어 '파일2URL?0'을 서버(1220)로 전송할 수 있다. 클라이언트(1210)는 서버(1220)로부터 제2 파일의 최초 조각, 예를 들어 '파일2 chunk-0'을 포함하는 응답 패킷을 수신할 수 있다. 도면에 도시하지 않았으나, 클라이언트(1210)는 제2 파일의 키 프레임 정보를 획득할 수 있다. 예를 들어, 클라이언트(1210)는 도 9를 통하여 전술한 실시예에 기초하여 제2 파일의 키 프레임 정보를 획득할 수 있다.
클라이언트(1210)는 제2 파일의 키 프레임 정보에 기초하여 현재 재생 시간에 대응하는 키 프레임을 검출할 수 있다. 예를 들어, 클라이언트(1210)는 현재 재생 시간 이후로 미리 정해진 시간, 예를 들어 1초, 이후의 프레임에 가장 가까운 키 프레임을 검출할 수 있다.
클라이언트(1210)는 검출된 키 프레임의 주소 이후의 데이터를 요청하는 요청 패킷, 예를 들어 '파일2URL?키프레임주소r해당chunk끝주소'를 서버(1220)로 전송할 수 있다. '해당chunk끝주소'는 검출된 키 프레임이 속하는 chunk의 끝 주소로, 클라이언트(1210)는 제2 파일의 재생 정보를 이용하여 검출된 키 프레임이 속하는 chunk의 끝 주소를 계산할 수 있다. 도면에 도시하지 않았으나, 클라이언트(1210)는 검출된 키 프레임이 속하는 조각을 요청하는 요청 패킷, 예를 들어 '파일2URL?해당chunk인덱스'를 서버(1220)로 전송하면서, 요청 패킷의 헤더에 포함된 주소 범위 파라미터를 이용하여, [키 프레임 주소, 해당 chunk 끝]의 데이터를 요청할 수 있다. 다른 실시예에 따르면, 클라이언트(1210)는 '파일2URL?키프레임주소r'를 서버(1220)로 전송함으로써, [키 프레임 주소, 파일 끝]의 데이터를 요청할 수도 있다.
클라이언트(1210)는 키 프레임 주소 이후의 데이터, 예를 들어 [키 프레임 주소, 해당 chunk 끝 주소]를 포함하는 응답 패킷을 수신할 수 있다. 클라이언트(1210)는 키 프레임 주소 이후의 데이터를 버퍼에 입력함으로써, 새로운 해상도를 가지는 제2 파일을 재생할 수 있다.
도 13을 참조하면, 다른 실시예에 따른 클라이언트(1310)는 제1 파일을 재생 중 해상도 변경 입력을 수신할 수 있다. 예를 들어, 클라이언트(1310)는 미리 정해진 인터페이스를 통하여 사용자에게 현재 재생 중인 컨텐츠의 해상도 및/또는 변경 가능한 해상도를 제공할 수 있다. 클라이언트(1310)는 인터페이스를 통하여 해상도 변경 입력을 수신할 수 있다. 경우에 따라, 클라이언트(1310)는 자동으로 해상도 변경 여부를 결정할 수 있다. 예를 들어, 클라이언트(1310)는 통신 상태, 버퍼링 여부, 통신 비용 등에 기초하여, 해상도 변경 여부를 자동으로 결정할 수 있다.
이하, 제1 해상도에서 제2 해상도로 변경하는 실시예를 설명한다. 클라이언트(1310)는 제2 파일의 재생 정보를 요청하는 요청 패킷, 예를 들어 '파일2URL?i'를 서버(1320)로 전송할 수 있다. 클라이언트(1310)는 이미 해상도 리스트를 가지고 있으므로, 제2 지시자, 예를 들어 'i'를 이용하여 제2 파일의 재생 정보를 요청할 수 있다. 클라이언트(1310)는 서버(1320)로부터 제2 파일의 재생 정보를 포함하는 응답 패킷을 수신할 수 있다. 예를 들어, 제2 파일의 재생 정보는 chunk 크기, 및 chunk 개수를 포함할 수 있다.
클라이언트(1310)는 제2 파일의 최초 조각을 요청하는 요청 패킷, 예를 들어 '파일2URL?0'을 서버(1320)로 전송할 수 있다. 클라이언트(1310)는 서버(1320)로부터 제2 파일의 최초 조각, 예를 들어 '파일2 chunk-0'을 포함하는 응답 패킷을 수신할 수 있다.
이 때, 제2 파일은 키 프레임 정보를 저장하지 않을 수 있다. 이 경우, 클라이언트(1310)는 현재 재생 시간 및 전체 재생 시간에 기초하여, 제2 파일의 조각들 중 현재 재생 시간에 대응하는 조각을 추정할 수 있다. 예를 들어, 클라이언트(1310)는 현재 재생 시간 대 전체 재생 시간의 비를 이용하여, 제2 파일의 조각들 중 현재 재생 시간에 대응하는 조각을 추정할 수 있다.
클라이언트(1310)는 추정된 조각의 데이터를 요청하는 요청 패킷, 예를 들어 '파일2URL?m'을 서버(1320)로 전송할 수 있다. 여기서, 'm'은 추정된 조각의 인덱스이다. 클라이언트(1310)는 추정된 조각의 데이터, 예를 들어 '파일2 chunk-m'을 를 포함하는 응답 패킷을 수신할 수 있다. 클라이언트(1310)는 추정된 조각의 데이터를 이용하여 추정 성공 여부를 판단할 수 있다. 예를 들어, 클라이언트(1310)는 추정된 조각 내 첫 프레임의 시간과 현재 재생 시간을 비교함으로써, 추정 성공 여부를 판단할 수 있다.
추정이 실패라고 판단되는 경우, 클라이언트(1310)는 새로운 조각을 추정할 수 있다. 추정이 성공이라고 판단되는 경우, 추정된 조각 내 키 프레임들을 추출할 수 있다. 클라이언트(1310)는 현재 재생 시간에 가장 가까운 키 프레임을 검출할 수 있다. 클라이언트(1310)는 검출된 키 프레임 이후의 데이터를 버퍼에 입력할 수 있다.
도 14를 참조하면, 일 실시예에 따른 클라이언트(1410)는 다양한 비트 레이트들을 이용하여 서버(1420)로부터 조각들을 수신할 수 있다. 전술한 바와 같이, 실시예들에 따르면 조각들이 키 프레임으로 시작할 것이 요구되지 않으며, 나아가 조각들은 키 프레임을 포함하지 않을 수도 있다. 이에 따라, 서버(1420)는 조각에 맞추어 인코딩을 하지 않아도 되고, 서버(1420)는 mp4, flv 등 일반적인 영상 파일을 용량 단위로 나누어 전송할 수 있다. 서버(1420)와 클라이언트(1410) 사이에서 전송되는 조각들이 키 프레임으로 시작하거나, 키 프레임을 포함하는 조건이 요구되지 않으므로, 실시예들은 클로즈드 GOP(Closed GOP)뿐 아니라, 오픈 GOP(Open GOP)도 지원할 수 있다.
클라이언트(1410)는 버퍼의 크기만큼 조각들을 미리 다운로드 받을 수 있다. 클라이언트(1410)는 재생된 조각들을 저장함으로써, 저장된 조각들에 속한 프레임들을 다시 재생할 때 해당 조각들을 중복하여 다운로드 받지 않도록 할 수 있다.
도 15 내지 도 17은 일 실시예에 따른 탐색 동작을 설명하는 도면들이다. 탐색 동작은 컨텐츠를 랜덤 액세스하는 동작이다. 도 15를 참조하면, 일 실시예에 따른 클라이언트(1510)는 제1 파일의 n번째 조각을 요청하는 요청 패킷, 예를 들어 '파일1URL?n'을 서버(1520)로 전송할 수 있다. 클라이언트(1510)는 서버(1520)로부터 제1 파일의 n번째 조각, 예를 들어 'chunk-n'을 포함하는 응답 패킷을 수신할 수 있다. 클라이언트(1510)는 'chunk-n'을 버퍼에 입력할 수 있다. 버퍼에 입력된 데이터는 디먹스 및/또는 디코더를 통하여 재생될 수 있다.
클라이언트(1510)는 'chunk-n'이 재생되는 도중, 탐색 입력을 수신할 수 있다. 예를 들어, 클라이언트(1510)는 미리 정해진 인터페이스를 통하여 탐색 입력을 수신할 수 있다. 탐색 입력은 탐색 시간을 포함할 수 있다.
클라이언트(1510)는 제1 파일의 키 프레임 정보에 기초하여 탐색 시간에 대응하는 키 프레임을 검출할 수 있다. 예를 들어, 클라이언트(1510)는 탐색 시간의 프레임에 가장 가까운 키 프레임을 검출할 수 있다.
클라이언트(1510)는 검출된 키 프레임의 주소 이후의 데이터를 요청하는 요청 패킷, 예를 들어 '파일1URL?키프레임주소r해당chunk끝주소'를 서버(1520)로 전송할 수 있다. '해당chunk끝주소'는 검출된 키 프레임이 속하는 chunk의 끝 주소로, 클라이언트(1510)는 제1 파일의 재생 정보를 이용하여 검출된 키 프레임이 속하는 chunk의 끝 주소를 계산할 수 있다. 도면에 도시하지 않았으나, 클라이언트(1510)는 검출된 키 프레임이 속하는 조각을 요청하는 요청 패킷, 예를 들어 '파일1URL?해당chunk인덱스'를 서버(1520)로 전송하면서, 요청 패킷의 헤더에 포함된 주소 범위 파라미터를 이용하여, [키 프레임 주소, 해당 chunk 끝]의 데이터를 요청할 수 있다.
클라이언트(1510)는 키 프레임 주소 이후의 데이터, 예를 들어 [키 프레임 주소, 해당 chunk 끝 주소]를 포함하는 응답 패킷을 수신할 수 있다. 클라이언트(1510)는 키 프레임 주소 이후의 데이터를 버퍼에 입력함으로써, 제1 파일을 탐색하여 재생할 수 있다.
도 16을 참조하면, 다른 실시예에 따른 클라이언트(1610)는 '파일1URL?n'을 서버(1620)로 전송할 수 있다. 클라이언트(1610)는 서버(1620)로부터 'chunk-n'을 포함하는 응답 패킷을 수신할 수 있다. 클라이언트(1610)는 'chunk-n'을 재생할 수 있다.
클라이언트(1610)는 'chunk-n'이 재생되는 도중, 탐색 입력을 수신할 수 있다. 클라이언트(1610)는 제1 파일의 키 프레임 정보에 기초하여 탐색 시간에 대응하는 키 프레임을 검출할 수 있다. 예를 들어, 클라이언트(1610)는 탐색 시간의 프레임에 가장 가까운 키 프레임을 검출할 수 있다.
클라이언트(1610)는 검출된 키 프레임이 속한 조각의 데이터를 요청하는 요청 패킷, 예를 들어, '파일URL?k'를 서버(1620)로 전송할 수 있다. 여기서 'k'는 검출된 키 프레임이 속한 조각의 인덱스이다. 클라이언트(1610)는 검출된 키 프레임이 속한 조각의 데이터, 예를 들어 '파일1 chunk-k'를 포함하는 응답 패킷을 수신할 수 있다. 클라이언트(1610)는 키 프레임 주소 이후의 데이터를 버퍼에 입력함으로써, 제1 파일을 탐색하여 재생할 수 있다.
도 16의 탐색 동작은 도 15의 탐색 동작에 비하여 캐시 서버의 효율성을 증대시킬 수 있고, 도 15의 탐색 동작은 도 16의 탐색 동작에 비하여 실제 전송되는 데이터의 양을 감소시킬 수 있다. 실시예들은 캐시 서버의 효율성 및 실제 전송되는 데이터의 양 사이의 트레이드-오프 관계를 고려하여, 도 15의 탐색 동작과 도 16의 탐색 동작 중 어느 하나에 따라 동작할 수 있다.
도 17을 참조하면, 또 다른 실시예에 따른 클라이언트(1710)는 'chunk-n'을 재생 중 탐색 입력을 수신할 수 있다. 탐색 입력은 탐색 시간을 포함할 수 있다. 현재 재생 중인 제1 파일은 키 프레임 정보를 저장하지 않을 수 있다. 이 경우, 클라이언트(1710)는 도 10 및 도 11을 통하여 전술한 실시예에 따라 키 프레임 정보를 생성할 수 있다. 그러나, 탐색 시간에 대응하는 키 프레임은 아직 키 프레임 정보에 포함되지 않을 수 있다.
클라이언트(1710)는 현재 재생 시간 및 전체 재생 시간에 기초하여, 제1 파일의 조각들 중 현재 재생 시간에 대응하는 조각을 추정할 수 있다. 예를 들어, 클라이언트(1710)는 현재 재생 시간 대 전체 재생 시간의 비를 이용하여, 제1 파일의 조각들 중 현재 재생 시간에 대응하는 조각을 추정할 수 있다.
클라이언트(1710)는 추정된 조각의 데이터를 요청하는 요청 패킷, 예를 들어 '파일1URL?m'을 서버(1720)로 전송할 수 있다. 여기서, 'm'은 추정된 조각의 인덱스이다. 클라이언트(1710)는 추정된 조각의 데이터, 예를 들어 '파일1 chunk-m'을 포함하는 응답 패킷을 수신할 수 있다. 클라이언트(1710)는 추정된 조각의 데이터를 이용하여 추정 성공 여부를 판단할 수 있다. 예를 들어, 클라이언트(1710)는 추정된 조각 내 첫 프레임의 시간과 현재 재생 시간을 비교함으로써, 추정 성공 여부를 판단할 수 있다.
추정이 실패라고 판단되는 경우, 클라이언트(1710)는 새로운 조각을 추정할 수 있다. 추정이 성공이라고 판단되는 경우, 추정된 조각 내 키 프레임들을 추출할 수 있다. 클라이언트(1710)는 현재 재생 시간에 가장 가까운 키 프레임을 검출할 수 있다. 클라이언트(1710)는 검출된 키 프레임 이후의 데이터를 버퍼에 입력할 수 있다.
도 18 및 도 19는 복수의 url 스트림들을 이용하는 클라이언트의 동작을 설명하는 도면들이다. 도 18을 참조하면, 일 실시예에 따른 클라이언트는 복수의 url 스트림들을 이용하여 해상도 변경 동작 및/또는 탐색 동작을 수행할 수 있다. 이하, 클라이언트가 두 개의 url 스트림들을 이용하는 경우를 설명한다.
제1 url 스트림 및 제2 url 스트림 각각은 요청 패킷을 생성하여 서버로 전송하고, 서버로부터 수신되는 응답 패킷을 처리할 수 있다. 제1 url 스트림의 데이터는 제1 디먹스와 제1 디코더를 통하여 재생될 수 있다. 제2 url 스트림의 데이터는 제2 디먹스와 제2 디코더를 통하여 재생될 수 있다.
클라이언트는 제1 디먹스를 제어하는 신호(EN_DEMUX_1), 제1 디코더를 제어하는 신호(EN_DECODER_1), 제2 디먹스를 제어하는 신호(EN_DEMUX_2), 제2 디코더를 제어하는 신호(EN_DECODER_2), 및 출력 먹스를 제어하는 신호(MUX_OUT) 중 적어도 하나를 이용하여, 제1 url 스트림의 데이터 및 제2 url 스트림의 데이터의 데이터 흐름(data flow)를 제어할 수 있다.
일 예로, 도 19를 참조하면, 스트리밍 서비스 시작 시 클라이언트는 제1 url 스트림을 이용하여, 제1 파일의 최초 조각부터 순차적으로 재생할 수 있다. 이 때, 클라이언트는 제2 url 스트림을 이용하여, 제1 파일의 재생 정보를 수신할 수 있다.
해상도 변경 입력 시 클라이언트는 제1 url 스트림을 이용하여 제1 파일을 재생하면서, 제2 url 스트림을 이용하여 제2 파일의 키 프레임들 중 현재 재생 시간에 대응하는 키 프레임을 검출할 수 있다. 클라이언트는 해상도 변경을 위하여, 검출된 키 프레임이 재생될 시점에 제1 url 스트림의 데이터 흐름과 제2 url 스트림의 데이터 흐름을 제어할 수 있다.
예를 들어, 클라이언트는 제1 url 스트림의 데이터 흐름을 스위치 OFF하고, 제2 url 스트림의 데이터 흐름을 스위치 ON할 수 있다. 경우에 따라서, 클라이언트는 디먹스 및/또는 디코더의 딜레이를 고려하여, 제1 url 스트림의 데이터 흐름 및 제2 url 스트림의 데이터 흐름이 일정 시간, 예를 들어 30ms 동안 함께 스위치 ON되도록 제어할 수 있다.
이후, 클라이언트는 제2 url 스트림을 이용하여 검출된 키 프레임 이후 데이터를 재생할 수 있다. 클라이언트는 제1 url 스트림을 위한 버퍼를 클리어(clear)할 수 있다. 도면에 도시하지는 않았으나, 만약 추가적인 해상도 변경 입력이 수신되면, 클라이언트는 전술한 동작에서 제1 url 스트림과 제2 url 스트림의 역할만 바꿈으로써 추가적인 해상도 변경 입력을 처리할 수 있다.
이상에서 설명된 실시예들은 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치, 방법 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(field programmable gate array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(signal wave)에 영구적으로, 또는 일시적으로 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 비록 한정된 도면에 의해 실시예들이 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다. 그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.

Claims (36)

  1. 스트리밍 서비스를 위한 클라이언트의 동작 방법에 있어서,
    파일 URL 및 재생 정보 요청을 지시하는 제1 매개변수를 포함하는 제1 요청 패킷을 전송하는 단계;
    상기 파일 URL에 대응하는 파일의 재생 정보를 포함하는 제1 응답 패킷을 수신하는 단계;
    상기 파일 URL 및 데이터 요청을 지시하는 제2 매개변수를 포함하는 제2 요청 패킷을 전송하는 단계;
    상기 파일 내 상기 제2 매개변수에 대응하는 주소 범위의 데이터를 포함하는 제2 응답 패킷을 수신하는 단계;
    상기 제2 응답 패킷의 데이터를 버퍼에 입력하는 단계;
    상기 버퍼에 입력된 데이터가 재생되는 동안 상기 파일의 키 프레임들을 추출하는 단계; 및
    상기 키 프레임들에 기초하여 상기 파일의 키 프레임 정보를 생성하는 단계
    를 포함하는, 클라이언트의 동작 방법.
  2. 제1항에 있어서,
    상기 재생 정보는
    상기 파일을 분할하는 조각의 크기, 및 상기 조각의 개수 중 적어도 하나를 포함하는, 클라이언트의 동작 방법.
  3. 제1항에 있어서,
    상기 제1 매개변수를 미리 정해진 제1 지시자로 설정하는 단계; 및
    상기 제1 응답 패킷으로부터 상기 파일을 분할하는 조각의 크기, 상기 조각의 개수, 상기 파일에 저장된 컨텐츠의 해상도, 상기 해상도와 다른 제2 해상도의 컨텐츠를 저장하는 제2 파일의 URL, 및 상기 제2 해상도를 추출하는 단계
    를 더 포함하는, 클라이언트의 동작 방법.
  4. 제1항에 있어서,
    상기 제2 매개변수를 최초 인덱스로 설정하는 단계
    를 더 포함하는, 클라이언트의 동작 방법.
  5. 제1항에 있어서,
    버퍼의 잔량을 체크하는 단계;
    상기 버퍼의 잔량이 임계 값 이하가 되면, 상기 제2 매개변수를 다음 재생할 조각의 인덱스로 설정하는 단계
    를 더 포함하는, 클라이언트의 동작 방법.
  6. 삭제
  7. 삭제
  8. 삭제
  9. 삭제
  10. 제1항에 있어서,
    해상도 변경 입력을 수신하는 단계; 및
    상기 파일 URL을 상기 해상도 변경 입력에 포함된 새로운 해상도에 대응하는 제2 파일의 URL로 설정하는 단계
    를 더 포함하는, 클라이언트의 동작 방법.
  11. 삭제
  12. 삭제
  13. 삭제
  14. 제1항에 있어서,
    해상도 변경 입력을 수신하는 단계;
    상기 파일 URL을 상기 해상도 변경 입력에 포함된 새로운 해상도에 대응하는 제2 파일의 URL로 설정하는 단계;
    현재 재생 시간 및 전체 재생 시간에 기초하여 상기 현재 재생 시간에 대응하는 조각을 추정하는 단계;
    상기 제2 매개변수를 상기 추정된 조각의 인덱스로 설정하는 단계;
    상기 제2 응답 패킷의 시간 범위가 상기 현재 재생 시간을 포함하는 경우, 상기 제2 응답 패킷의 데이터로부터 상기 현재 재생 시간에 가장 가까운 키 프레임을 검출하는 단계; 및
    상기 검출된 키 프레임 이후의 데이터를 버퍼에 입력하는 단계
    를 더 포함하는, 클라이언트의 동작 방법.
  15. 제14항에 있어서,
    상기 제2 응답 패킷의 시간 범위가 상기 현재 재생 시간을 포함하지 않는 경우, 상기 현재 재생 시간에 대응하는 새로운 인덱스를 추정하는 단계;
    데이터 요청을 지시하는 제3 매개변수를 상기 새로운 인덱스로 설정하는 단계;
    상기 파일 URL 및 상기 제3 매개변수를 포함하는 제3 요청 패킷을 전송하는 단계;
    상기 파일 내 상기 제3 매개변수에 대응하는 주소 범위의 데이터를 포함하는 제3 응답 패킷을 수신하는 단계; 및
    상기 제3 응답 패킷의 데이터로부터 상기 현재 재생 시간에 가장 가까운 키 프레임을 검출하는 단계
    를 더 포함하는, 클라이언트의 동작 방법.
  16. 제14항에 있어서,
    상기 버퍼는 현재 이용중인 버퍼와 구별되는 제2 버퍼이고,
    상기 검출된 키 프레임의 시간 이후로 상기 제2 버퍼의 데이터가 재생되는, 클라이언트의 동작 방법.
  17. 삭제
  18. 삭제
  19. 삭제
  20. 제1항에 있어서,
    탐색 시간을 수신하는 단계;
    상기 탐색 시간과 상기 파일의 전체 재생 시간에 기초하여 상기 탐색 시간에 대응하는 조각을 추정하는 단계;
    상기 제2 매개변수를 상기 추정된 조각의 인덱스로 설정하는 단계;
    상기 제2 응답 패킷의 시간 범위가 상기 탐색 시간을 포함하는 경우, 상기 제2 응답 패킷의 데이터로부터 상기 탐색 시간에 가장 가까운 키 프레임을 검출하는 단계; 및
    상기 검출된 키 프레임 이후의 데이터를 버퍼에 입력하는 단계
    를 더 포함하는, 클라이언트의 동작 방법.
  21. 제20항에 있어서,
    상기 제2 응답 패킷의 시간 범위가 상기 탐색 시간을 포함하지 않는 경우, 상기 탐색 시간에 대응하는 새로운 인덱스를 추정하는 단계;
    데이터 요청을 지시하는 제3 매개변수를 상기 새로운 인덱스로 설정하는 단계;
    상기 파일 URL 및 상기 제3 매개변수를 포함하는 제3 요청 패킷을 전송하는 단계;
    상기 파일 내 상기 제3 매개변수에 대응하는 주소 범위의 데이터를 포함하는 제3 응답 패킷을 수신하는 단계; 및
    상기 제3 응답 패킷의 데이터로부터 상기 탐색 시간에 가장 가까운 키 프레임을 검출하는 단계
    를 더 포함하는, 클라이언트의 동작 방법.
  22. 제20항에 있어서,
    상기 버퍼는 현재 이용중인 버퍼와 구별되는 제2 버퍼이고,
    상기 검출된 키 프레임의 시간 이후로 상기 제2 버퍼의 데이터가 재생되는, 클라이언트의 동작 방법.
  23. 제1항에 있어서,
    상기 클라이언트는 서버와의 통신을 위하여 http 프로토콜을 이용하는, 클라이언트의 동작 방법.
  24. 제1항에 있어서,
    상기 제1 매개변수는 상기 파일을 분할하는 조각의 크기를 포함하고,
    상기 재생 정보는 상기 조각의 개수, 및 상기 파일의 크기 중 적어도 하나를 포함하는, 클라이언트의 동작 방법.
  25. 스트리밍 서비스를 위한 서버의 동작 방법에 있어서,
    파일 URL 및 매개변수를 포함하는 요청 패킷을 수신하는 단계;
    상기 매개변수가 데이터 요청을 지시하는 경우, 상기 파일 URL에 대응하는 파일 내 상기 매개변수에 대응하는 주소 범위의 데이터를 응답하는 단계; 및
    상기 매개변수가 재생 정보 요청을 지시하는 경우, 상기 파일의 재생 정보를 응답하는 단계
    를 포함하고,
    상기 데이터를 응답하는 단계는
    상기 매개 변수가 인덱스를 포함하는 경우, 상기 파일 내 상기 인덱스에 대응하는 주소 범위의 데이터를 응답하는 단계; 및
    상기 매개 변수가 주소를 포함하는 경우, 상기 파일 내 상기 주소에 대응하는 주소 범위의 데이터를 응답하는 단계
    중 적어도 하나를 포함하는, 서버의 동작 방법.
  26. 제25항에 있어서,
    상기 재생 정보는
    상기 파일을 분할하는 조각의 크기, 및 상기 조각의 개수 중 적어도 하나를 포함하는, 서버의 동작 방법.
  27. 제25항에 있어서,
    상기 데이터를 응답하는 단계는
    상기 매개 변수가 인덱스 또는 주소를 포함하는지 여부를 판단하는 단계
    를 포함하는, 서버의 동작 방법.
  28. 삭제
  29. 제25항에 있어서,
    상기 인덱스에 대응하는 주소 범위는 상기 파일을 분할하는 조각의 크기에 기초하여 결정되는, 서버의 동작 방법.
  30. 제25항에 있어서,
    상기 주소에 대응하는 주소 범위의 데이터를 응답하는 단계는
    상기 매개 변수가 두 개의 주소들을 포함하는 경우, 상기 파일 내 상기 두 개의 주소들 사이의 데이터를 응답하는 단계; 및
    상기 매개 변수가 하나의 주소를 포함하는 경우, 상기 파일 내 상기 하나의 주소와 상기 파일의 끝 사이의 데이터를 응답하는 단계
    중 적어도 하나를 포함하는, 서버의 동작 방법.
  31. 제25항에 있어서,
    상기 재생 정보를 응답하는 단계는
    상기 매개변수가 미리 정해진 제1 지시자를 포함하는 경우, 상기 파일을 분할하는 조각의 크기, 상기 조각의 개수, 상기 파일에 저장된 컨텐츠의 해상도, 상기 해상도와 다른 제2 해상도의 컨텐츠를 저장하는 제2 파일의 URL, 및 상기 제2 해상도를 응답하는 단계; 및
    상기 매개변수가 미리 정해진 제2 지시자를 포함하는 경우, 상기 조각의 크기 및 상기 조각의 개수를 응답하는 단계
    중 적어도 하나를 포함하는, 서버의 동작 방법.
  32. 제31항에 있어서,
    상기 제2 파일은 상기 파일의 파일명 및 상기 파일이 저장된 디렉토리 중 적어도 하나에 기초하여 검색되는, 서버의 동작 방법.
  33. 제31항에 있어서,
    상기 제2 해상도는 상기 제2 파일의 파일명에 기초하여 획득되는, 서버의 동작 방법.
  34. 제25항에 있어서,
    상기 서버는 클라이언트와의 통신을 위하여 http 프로토콜을 이용하는, 서버의 동작 방법.
  35. 제25항에 있어서,
    상기 파일을 분할하는 조각의 크기를 수신하는 단계
    를 더 포함하고,
    상기 재생 정보는 상기 조각의 개수, 및 상기 파일의 크기 중 적어도 하나를 포함하는, 서버의 동작 방법.
  36. 하드웨어와 결합되어 제1항 내지 제5항, 제10항, 제14항 내지 제16항, 제20항 내지 제27항, 및 제29항 내지 제35항 중 어느 하나의 항의 방법을 실행시키기 위하여 매체에 저장된 컴퓨터 프로그램.
KR1020140089679A 2014-07-16 2014-07-16 스트리밍 서비스를 위한 클라이언트 및 서버의 동작 방법 KR101600469B1 (ko)

Priority Applications (6)

Application Number Priority Date Filing Date Title
KR1020140089679A KR101600469B1 (ko) 2014-07-16 2014-07-16 스트리밍 서비스를 위한 클라이언트 및 서버의 동작 방법
US15/318,679 US20170134463A1 (en) 2014-07-16 2015-04-01 Operating method of client and server for streaming service
JP2017502886A JP2017529726A (ja) 2014-07-16 2015-04-01 ストリーミングサービスのためのクライアント及びサーバの動作方法
CN201580038102.5A CN106537924A (zh) 2014-07-16 2015-04-01 用于串流服务的客户端以及服务器的操作方法
PCT/KR2015/003230 WO2016010229A1 (ko) 2014-07-16 2015-04-01 스트리밍 서비스를 위한 클라이언트 및 서버의 동작 방법
EP15821394.2A EP3171604A4 (en) 2014-07-16 2015-04-01 Operating method of client and server for streaming service

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020140089679A KR101600469B1 (ko) 2014-07-16 2014-07-16 스트리밍 서비스를 위한 클라이언트 및 서버의 동작 방법

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020160023984A Division KR20160031467A (ko) 2016-02-29 2016-02-29 스트리밍 서비스를 위한 클라이언트 및 서버의 동작 방법

Publications (2)

Publication Number Publication Date
KR20160009322A KR20160009322A (ko) 2016-01-26
KR101600469B1 true KR101600469B1 (ko) 2016-03-07

Family

ID=55078691

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140089679A KR101600469B1 (ko) 2014-07-16 2014-07-16 스트리밍 서비스를 위한 클라이언트 및 서버의 동작 방법

Country Status (6)

Country Link
US (1) US20170134463A1 (ko)
EP (1) EP3171604A4 (ko)
JP (1) JP2017529726A (ko)
KR (1) KR101600469B1 (ko)
CN (1) CN106537924A (ko)
WO (1) WO2016010229A1 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8942543B1 (en) * 2010-10-06 2015-01-27 Verint Video Solutions Inc. Systems, methods, and software for improved video data recovery effectiveness
US10033794B2 (en) * 2015-07-17 2018-07-24 Bio-Rad Laboratories, Inc. Network transfer of large files in unstable network environments
CN105828149A (zh) * 2016-04-28 2016-08-03 合智能科技(深圳)有限公司 播放优化方法和装置
KR101863598B1 (ko) * 2016-07-29 2018-06-01 주식회사 에어브로드 스트리밍 서비스를 위한 클라이언트의 동작 방법
US10873775B2 (en) 2017-06-12 2020-12-22 Netflix, Inc. Staggered key frame video encoding
US11354164B1 (en) * 2018-04-20 2022-06-07 Automation Anywhere, Inc. Robotic process automation system with quality of service based automation
US10908950B1 (en) 2018-04-20 2021-02-02 Automation Anywhere, Inc. Robotic process automation system with queue orchestration and task prioritization
KR102500145B1 (ko) * 2018-07-13 2023-02-16 삼성전자주식회사 전자 장치 및 전자 장치의 컨텐트 전송 방법
CN110881018B (zh) * 2018-09-05 2020-11-03 北京开广信息技术有限公司 媒体流的实时接收方法及客户端
CN110545492B (zh) * 2018-09-05 2020-07-31 北京开广信息技术有限公司 媒体流的实时递送方法及服务器
CN110072128B (zh) * 2019-04-22 2021-01-15 北京开广信息技术有限公司 媒体流的实时推送方法及服务器
CN110113655B (zh) * 2019-05-05 2021-09-21 北京奇艺世纪科技有限公司 一种视频播放的方法、装置及用户终端
CN111314434B (zh) * 2020-01-20 2022-08-19 浪潮云信息技术股份公司 请求处理方法及服务端
KR102655215B1 (ko) * 2022-09-27 2024-04-05 (주)이노시뮬레이션 원격 유지보수를 위한 선박 및 지상 담당자 사이의 네트워크 연결 방법 및 이를 실행하는 시스템

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002215516A (ja) * 2001-01-22 2002-08-02 Sony Corp 情報端末装置、ダウンロード制御方法およびコンピュータプログラム
KR101066872B1 (ko) 2008-10-30 2011-09-26 에스케이텔레콤 주식회사 캐시서버를 이용한 컨텐츠 전송시스템 및 방법, 그 캐시서버

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001242876A (ja) * 1999-12-20 2001-09-07 Matsushita Electric Ind Co Ltd データ受信再生方法、データ受信再生装置、データ送信方法、およびデータ送信装置
JP2005260283A (ja) * 2004-02-13 2005-09-22 Matsushita Electric Ind Co Ltd Avコンテンツのネットワーク再生方法
KR20100055296A (ko) * 2008-11-17 2010-05-26 에스케이텔레콤 주식회사 분산 저장된 컨텐츠의 리다이렉티드 url을 이용한 순차적 멀티미디어 스트리밍 시스템 및 방법
KR101361021B1 (ko) * 2009-11-09 2014-02-10 후아웨이 테크놀러지 컴퍼니 리미티드 Http 기반의 스트리밍 미디어 서비스를 구현하는 방법, 시스템 및 네트워크장비
CN102055773B (zh) * 2009-11-09 2013-10-09 华为技术有限公司 实现基于http的流媒体业务的方法、系统和网络设备
CA2786257C (en) * 2010-02-19 2018-03-06 Telefonaktiebolaget L M Ericsson (Publ) Method and arrangement for adaptation in http streaming
WO2011108893A2 (en) * 2010-03-05 2011-09-09 Samsung Electronics Co., Ltd. Method and apparatus for generating and reproducing adaptive stream based on file format, and recording medium thereof
WO2012003237A1 (en) * 2010-06-29 2012-01-05 Qualcomm Incorporated Signaling video samples for trick mode video representations
US9049497B2 (en) * 2010-06-29 2015-06-02 Qualcomm Incorporated Signaling random access points for streaming video data
US9185439B2 (en) * 2010-07-15 2015-11-10 Qualcomm Incorporated Signaling data for multiplexing video components
US9462024B2 (en) * 2011-06-08 2016-10-04 Futurewei Technologies, Inc. System and method of media content streaming with a multiplexed representation
EP2547062B1 (en) * 2011-07-14 2016-03-16 Nxp B.V. Media streaming with adaptation
US8935425B2 (en) * 2011-10-05 2015-01-13 Qualcomm Incorporated Switching between representations during network streaming of coded multimedia data

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002215516A (ja) * 2001-01-22 2002-08-02 Sony Corp 情報端末装置、ダウンロード制御方法およびコンピュータプログラム
KR101066872B1 (ko) 2008-10-30 2011-09-26 에스케이텔레콤 주식회사 캐시서버를 이용한 컨텐츠 전송시스템 및 방법, 그 캐시서버

Also Published As

Publication number Publication date
JP2017529726A (ja) 2017-10-05
KR20160009322A (ko) 2016-01-26
WO2016010229A1 (ko) 2016-01-21
CN106537924A (zh) 2017-03-22
US20170134463A1 (en) 2017-05-11
EP3171604A1 (en) 2017-05-24
EP3171604A4 (en) 2018-04-11

Similar Documents

Publication Publication Date Title
KR101600469B1 (ko) 스트리밍 서비스를 위한 클라이언트 및 서버의 동작 방법
CA2965484C (en) Adaptive bitrate streaming latency reduction
US9609340B2 (en) Just-in-time (JIT) encoding for streaming media content
KR101082642B1 (ko) 스트리밍 콘텐츠의 가변 레이트 전환 장치, 시스템 및 방법
US20150256600A1 (en) Systems and methods for media format substitution
US9680901B2 (en) Method, apparatus and non-transitory computer medium for encoding data of a media file
US9794375B2 (en) Method, apparatus, and non-transitory computer medium for obtaining a required frame size for a compressed data frame
US9621613B1 (en) Bitrate adaptation transitioning using key frames
US10003626B2 (en) Adaptive real-time transcoding method and streaming server therefor
US8824676B2 (en) Streaming video to cellular phones
WO2015192683A1 (zh) 一种基于码流自适应技术的内容分发方法、装置及系统
US20150067753A1 (en) Generating frame chunking for video fast starts
US11489899B1 (en) Segment ladder transitioning in adaptive streaming
KR101863598B1 (ko) 스트리밍 서비스를 위한 클라이언트의 동작 방법
US9294821B2 (en) Scrubbing noise remover and methods for use therewith
Kesavan et al. Rate adaptation performance and quality analysis of adaptive HTTP streaming methods
KR20170018333A (ko) 클라이언트 단말기와 적어도 하나의 서버 간의 송신 경로를 따라 배열된 네트워크 장비를 동작하기 위한 방법, 및 대응하는 네트워크 장비
US9106802B2 (en) Dual-type of playback for multimedia content
KR20160031467A (ko) 스트리밍 서비스를 위한 클라이언트 및 서버의 동작 방법
KR102237900B1 (ko) 클라이언트 단말에 의해 멀티미디어 콘텐츠의 콘텐츠 부분을 검색하기 위한 방법
US10484725B2 (en) Information processing apparatus and information processing method for reproducing media based on edit file
KR102273143B1 (ko) 클라우드 스트리밍 서비스 시스템, 스틸 이미지 기반 클라우드 스트리밍 서비스 방법 및 이를 위한 장치

Legal Events

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

Payment date: 20190831

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20200302

Year of fee payment: 5