KR101697411B1 - 상태 비보존형 압축을 사용하는 합성 비디오 스트리밍 - Google Patents

상태 비보존형 압축을 사용하는 합성 비디오 스트리밍 Download PDF

Info

Publication number
KR101697411B1
KR101697411B1 KR1020147017194A KR20147017194A KR101697411B1 KR 101697411 B1 KR101697411 B1 KR 101697411B1 KR 1020147017194 A KR1020147017194 A KR 1020147017194A KR 20147017194 A KR20147017194 A KR 20147017194A KR 101697411 B1 KR101697411 B1 KR 101697411B1
Authority
KR
South Korea
Prior art keywords
video
frame
unique
processor
regions
Prior art date
Application number
KR1020147017194A
Other languages
English (en)
Other versions
KR20140088624A (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 오토이, 인크.
Publication of KR20140088624A publication Critical patent/KR20140088624A/ko
Application granted granted Critical
Publication of KR101697411B1 publication Critical patent/KR101697411B1/ko

Links

Images

Classifications

    • 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/234Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/507Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction using conditional replenishment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/14Tree-structured documents
    • G06F40/143Markup, e.g. Standard Generalized Markup Language [SGML] or Document Type Definition [DTD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/166Editing, e.g. inserting or deleting
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Information Transfer Between Computers (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

본 명세서는 상태 비보존형 비디오 압축(stateless video compression)과 비디오 이미지 분할(video image segmentation)을 이용하여 향상된 비디오 압축을 달성하도록 하는 비디오 렌더링(rendering) 및 스트리밍(streaming) 방법론에 관한 것이다. 일부 구현례에서, 본 명세서에 설명되는 상기 비디오 압축 및 스트리밍 기술은 표준 브라우저를 호스팅(host)하는 클라이언트 장치로 고화질 비디오 게임을 전달하도록 효율적으로 활용될 수 있다.

Description

상태 비보존형 압축을 사용하는 합성 비디오 스트리밍{COMPOSITE VIDEO STREAMING USING STATELESS COMPRESSION}
본 발명은 전반적으로 비디오 스트리밍에 관한 것이다.
클라이언트 서버형 구조(client-server architecture)는 일반적으로 "서비스 제공자(service providers)"로 간주될 수 있는 서버와 "서비스 요청자(service requesters)" 또는 "서비스 소비자(service consumers)"로 간주될 수 있는 클라이언트 간에 작업(tasks) 또는 작업 부하를 분할하는 분산 컴퓨팅 구조이다. 흔히, 상기 서버와 클라이언트는 컴퓨터 네트워크를 통해 접속되고 다양한 유형의 데이터가 각각의 서버와 각각의 클라이언트 간에 양방향으로 상기 컴퓨터 네트워크를 통해 전송될 수 있다.
서버는 보통 클라이언트에 비해 더 많은 리소스와 더 뛰어난 수행 능력을 구비한다. 서버는 그것의 리소스를 하나 이상의 클라이언트와 공유할 수 있는데, 예를 들어 서버는 특정한 작업을 클라이언트를 위해 수행할 수 있다(예를 들어, 서비스를 클라이언트에게 제공할 수 있음). 서버는 통상 클라이언트에 비해 많은 리소스를 구비하므로, 상기 서버는 작업, 특히 리소스를 과도하게 요구하는 작업(resource-demanding task)을 클라이언트가 할 수 있는 것에 비해 훨씬 빠르게 완료할 수 있다.
서버와 클라이언트 간에 교환되는 데이터는 임의의 적합한 데이터 포맷(data format)을 사용하여 표현될 수 있고 임의의 적합한 통신 프로토콜을 사용하여 전송될 수 있다. 예를 들어, 애플리케이션(application)이 클라이언트를 위해 서버 상에서 실행되고 있을 때, 상기 애플리케이션의 출력은 구조화된 문서, 예를 들어 하이퍼텍스트 표시 언어(HyperText Markup Language, HTML) 문서 또는 확장가능한 표시 언어(Extensible Markup Language, XML) 문서를 사용하여 표현될 수 있다. 서버는 상기 애플리케이션의 출력을 표현한 데이터를 포함하는 HTML 또는 XML 문서를 클라이언트로 서버와 클라이언트 간 하이퍼텍스트 전송 프로토콜(HyperText Transfer Protocol, HTTP) 접속을 통해 전송할 수 있다. 상기 클라이언트는 HTML 또는 XML 문서를 수신하면 상기 문서를 소모(consume)할 수 있고 상기 애플리케이션의 출력을 로컬 상에(예를 들어, 클라이언트 상에 실행된 웹 브라우저에) 상기 HTML 또는 XML 문서를 사용하여 렌더링(render)할 수 있다.
모션 JPEG(Motion JPEG, M-JPEG)은 디지털 비디오 시퀀스의 각각의 비디오 프레임 또는 인터레이스형 필드(interlaced field)가 개별적으로 JPEG 이미지로서 압축되는 비디오 포맷이다. 다시 말해, M-JPEG은 상태 비보존형 압축(stateless compression)을 사용하는데, 이는 앞서 렌더링된 프레임으로부터의 정보가 뒤따르는 프레임들을 압축하는 데에 이용되지 않기 때문이다. 하지만 M-JPEG은 낮은 지연시간(low-latency)으로 특성화된다. 클라이언트 장치가 압축된 모션 JPEG 비디오의 프레임을 수신할 때, 상기 클라이언트 장치는 상기 프레임을 즉시 압축해제하여 디스플레이할 수 있고, 그 결과 지연시간이 매우 낮아지게 된다. 본래 멀티미디어 PC 애플리케이션용으로 개발된(그 후 더욱 진보된 포맷으로 교체됨) M-JPEG은 이제 디지털 카메라와 같이 비디오 기록 능력을 갖는 다수의 휴대용 장치에 의해 사용되고 있다. 모션 JPEG은 이산 코사인 변환(discrete cosine transform, DCT)에 기초한 인트라프레임 압축(intraframe compression)의 비가역 형태(lossy form)를 사용한다. 이 수학적 연산은 비디오 소스의 각각의 프레임/필드를 시간 영역에서 주파수 영역으로 변환한다. 인간의 심리 시각적 시스템(human psycho-visual system)에 대략 기반을 둔 지각 모델(perceptual model)은 고주파수의 정보(예를 들어 채도 및 색상의 색조에 있어서의 급격한 변화)를 버린다. 변환 영역에서, 정보를 감축하는 절차는 양자화(quantization)라고 한다. 양자화는 큰 수 스케일(number scale)을 (각각의 수의 빈도는 서로 다름) 더 작은 것으로 최적으로 감축하는 방법이며, 상기 변환 영역은 이미지를 간편하게 표현하는데 이는 기타 다른 계수들에 비해 위의 영상에 적게 기여하는 고주파수 계수들이 그 특성상 높은 압축성을 가능하게 하는 작은 값들이기 때문이다. 상기 양자화된 계수는 그 다음 시퀀싱(sequenced)되고 출력 비트 스트림으로 무손실 압축된다.
모질라(Mozilla) 및 웹키트 기반 브라우저(Webkit-based browsers)는 M-JPEG 스트림 보기를 기본 지원하며, 기타 다른 브라우저는 외부 플러그인(plug-ins) 또는 애플릿을 사용하여 M-JPEG 스트림을 지원할 수 있다. HTTP 스트리밍은 각각의 이미지를 지정된 표시(specified marker) 상의 개별 HTTP 응답으로 분리한다. RTP 스트리밍은 JPEG 이미지의 시퀀스의 패킷을 생성하는데 이는 퀵타임(QuickTime) 또는 VLC와 같이 클라이언트에 의해 수신될 수 있다. 상기 언급된 서버 소프트웨어는 HTTP를 통해 상기 JPEG의 시퀀스를 스트리밍한다. 특별한 다용도 인터넷 메일 확장형(mime-type) 콘텐츠 유형 multipart /x- mixed - replace ; boundary =은 특별한 바운더리에 의해 분리된 응답으로 여러 부분을 예상하도록 브라우저에 통지한다. 이 바운더리는 상기 MIME 유형 내에서 정의된다. M-JPEG 스트림에 대하여, 상기 JPEG 데이터는 정확한 HTTP 헤더를 이용하여 클라이언트로 전송된다. TCP 접속은 클라이언트가 새로운 프레임을 수신하길 원하고 서버가 새로운 프레임을 제공하길 원하는 한 종료되지 않는다.
본 발명은 상태 비보존형 비디오 압축과 비디오 이미지 분할(video image segmentation)을 이용하여 향상된 비디오 압축을 달성하도록 하는 새로운 비디오 렌더링 및 스트리밍 방법론을 지향하는 방법, 장치 및 시스템을 제공한다. 일부 구현례에서, 본 명세서에 설명된 상기 비디오 압축 및 스트리밍 기술은 표준 브라우저를 호스팅(host)하는 클라이언트 장치로 고화질 비디오 게임을 전달하도록 전개될 수 있다.
본 발명의 이러한 그리고 기타 다른 특징, 측면 및 이점은 이하의 상세한 설명에서 그리고 뒤따르는 도면들과 함께 더 자세하게 설명된다.
도 1은 복수의 클라이언트와 서버 간 접속을 도시한 개략적인 도면이다.
도 2는 예시적인 비디오 스트리밍 방법을 도시한 흐름도이다.
도 3은 본 발명의 다른 구현례에 따른 복수의 클라이언트와 서버 간 접속을 도시한 개략적인 도면이다.
도 4는 다른 예시적인 비디오 스트리밍 방법을 도시한 흐름도이다.
도 5는 다수의 클라이언트에 걸쳐 서버의 리소스를 할당하는 예시적인 클라이언트 서버형 시스템을 도시한다.
도 6은 예시적인 네트워크 환경을 도시한다.
도 7은 예시적인 컴퓨터 시스템을 도시한다.
이하 본 발명은 첨부된 도면에 도시된 바와 같이 몇몇 실시예에 관련하여 구체적으로 설명된다. 이하의 설명에서, 수많은 구체적인 세부사항이 본 발명의 철저한 이해를 제공하기 위해 제시된다. 하지만, 당해 기술분야에서 숙련된 자에게 본 발명이 일부 또는 모든 이러한 구체적인 세부사항 없이도 실시될 수 있음은 명백하다. 다른 예시에서, 주지된 절차의 단계 및/또는 구조는 본 발명을 불필요하게 이해하기 어렵도록 하지 않기 위해서 구체적으로 설명되지 않았다. 그 외에, 본 발명이 특정 실시예들과 함께 설명되어 있긴 하지만, 이러한 설명은 본 발명을 설명된 실시예들로 제한하려는 것은 아님을 이해하여야 할 것이다. 그와는 다르게, 이러한 설명은 첨부된 특허청구범위에 의해 정의된 바와 같은 본 발명의 사상과 범위 내에 포함될 수 있는 대체물, 변경물 및 균등물을 포함하도록 의도되었다.
클라이언트 서버형 구조는 서버가 그 리소스를 하나 이상의 클라이언트와 공유할 수 있도록 한다. 그러한 구조는 다양한 장점을 갖는다. 예를 들어, 상기 서버는 보통 클라이언트에 비해 더 많은 리소스(예를 들어, 프로세서 또는 메모리)와 더 뛰어난 수행 능력을 갖기 때문에, 서버는 클라이언트가 가능한 것에 비해 빠르게 작업을 완료할 수 있다. 그러한 성능 차이는 작업이 리소스를 과도하게 요구하는 경우 또는 클라이언트가 제한된 양의 리소스를 갖는 경우에 특히 주목할 만하다. 동시에, 서버가 클라이언트를 대신하여 또는 클라이언트를 위하여 작업을 수행하고 있는 한편, 상기 클라이언트의 리소스는 기타 다른 작업을 수행하도록 비워질 수 있는데, 예를 들어 이러한 작업들은 클라이언트 상에서 로컬로 수행될 필요가 있는 것이다(예를 들어, 클라이언트의 사용자와 상호작용함).
서버 상에서 수행되기에 적합할 수 있는 작업의 일 유형은 서버에 의해 호스팅되는 애플리케이션을 클라이언트로 전송하기 위한 비디오 출력으로서 렌더링할 수 있다. 컴퓨터 그래픽과 관련해서, 렌더링은 보통 컴퓨터 프로그램의 수단에 의해 모델로부터 이미지를 생성하는 절차로 간주될 수 있다. 상기 모델은 보통 3 차원(3D) 객체들의 표현이며, 엄격하게 정의된 언어 또는 데이터 구조로 표현될 수 있다. 상기 모델은 기하학적 구조, 관점, 질감, 조명, 그림자(shading), 움직임 및 기타 다른 적합한 유형의 정보를 포함할 수 있다. 상기 모델이 렌더링된 이미지는 디지털 이미지 또는 래스터 그래픽 이미지(raster graphic image)일 수 있고, 이는 픽셀 더미(collection of pixels)에 의해 형성될 수 있다. 본 발명은 임의의 애플리케이션의 임의의 출력을 표현하는 이미지를 생성하도록 렌더링의 개념을 확장시킨다. 상기 렌더링은 3 차원 데이터뿐만 아니라 2 차원(2D) 데이터를 포함하는 임의의 데이터에 기초하여 수행될 수 있다. 3 차원 모델에 기초하여 이미지를 생성하는 것 이외에 특정 실시예들은 애플리케이션의 출력을 표현하는 이미지를 렌더링할 수 있고, 제한적이지 않게 예를 들어 상기 애플리케이션에는 웹 브라우징 애플리케이션, 워드 프로세싱 애플리케이션, 스프레드 시트 애플리케이션, 멀티미디어 애플리케이션, 과학 및 의학 애플리케이션 및 게임 애플리케이션이 있다.
렌더링은 서버에 의해 수행되기에 적합한 작업의 유형일 수 있는데, 이는 렌더링 절차가 흔히 리소스를 과도하게 요구하기 때문으로, 특히 렌더링되는 이미지가 고해상도 및 고품질인 경우에는 컴퓨터 사용이 매우 집중될 수 있기 때문이다. 과거에 오래된 컴퓨터 시스템은 3 차원 모델을 하나의 2 차원 이미지로 렌더링하는 데에 수시간 또는 수일이 걸릴 수 있었다. 컴퓨터 하드웨어, 특히 컴퓨터 그래픽 애플리케이션(예를 들어, 게임, 멀티미디어, 엔터테인먼트 또는 지도제작)용으로 전문적으로 설계된 컴퓨터 하드웨어의 개발과 진보에 따라, 현재의 컴퓨터 시스템은 각각의 이미지를 수초 내지 수밀리초 이내에 렌더링 가능할 수 있다. 실제로, 흔히 모델을 하나의 이미지로 렌더링하기 위해 모든 이용가능한 서버의 리소스를 취하는 것은 아니다.
도 5는 서버(120)가 다수의 클라이언트(130)를 위해 다수의 렌더링을 동시에 수행하는 예시적인 시스템을 도시한다. 설명을 단순화하기 위해 네 개의 클라이언트(130A, 130B, 130C, 130D)만이 도 5에 도시되었음에 유의하라. 실제로 서버는 임의의 수의 클라이언트를 위해 동시에 렌더링을 수행할 수 있는데, 서버가 임의의 시간에 얼마나 많은 클라이언트를 지원할 수 있는지에 대한 이론적인 제한은 없다. 그와 비슷하게, 설명을 단순화하기 위해 하나의 GPU(121) 및 하나의 CPU(122)만이 도 5에 도시되었다. 실제로 서버는 임의의 수의 GPU 및 CPU를 구비할 수 있다.
특정 실시예에서, 서버(120)는 클라이언트(130) 각각과 별개의 물리적 통신 경로(150)를 통해 접속된다. 특정 실시예에서, 서버(120)와 클라이언트(130) 간 통신 경로(150)는 컴퓨터 네트워크를 통한 네트워크 접속을 포함하고, 제한적이지 않게 예를 들어 상기 컴퓨터 네트워크에는 인터넷, 인트라넷, 근거리 통신망(Local Area Network, LAN), 광역 통신망(Wide Area Network, WAN), 무선 네트워크, 또는 2 이상의 그러한 컴퓨터 네트워크들의 조합이 있다. 특정 실시예에서, 네트워크 통신 경로(150) 각각은 전송 제어 프로토콜(Transport Control Protocol, TCP) 접속, 사용자 데이터그램 프로토콜(User Datagram Protocol, UDP) 접속 또는 임의의 기타 다른 적합한 접속일 수 있다. 특정 실시예에서, 서버(120)는 다수의 TCP 소켓(124)을 구비할 수 있고, 클라이언트(130) 각각은 하나 이상의 서로 다른 TCP 소켓(124)에 접속될 수 있다.
특정 실시예에서, 데이터는 서버(120)와 클라이언트(130) 각각 간에 양방향으로 대응하는 통신 경로(150)를 통해 교환될 수 있다. 예를 들어, 서버(120) 및 클라이언트(130A)는 데이터를 양방향으로 통신 경로(150A)를 통해 교환할 수 있다. 상기 데이터는 임의의 적합한 포맷으로 되어있을 수 있다. 예를 들어, 서버(120)는 클라이언트(130)에 비디오 스트림의 형태로 데이터를 전송할 수 있고, 클라이언트(130)는 서버(120)에 데이터를 각각 전송할 수 있다. 서버(120)와 클라이언트(130) 간 통신은 임의의 적합한 프로토콜을 사용할 수 있다. 예를 들어, 애플리케이션의 인스턴스(131A)가 클라이언트(130A)를 위해 서버(120) 상에서 실행된다고 가정하라. 서버(120) 상에서 실행되는 렌더링된 애플리케이션의 인스턴스(131A)의 출력은 비디오 스트림의 형태로 서버(120)로부터 클라이언트(130A)에 전송될 수 있고, 각각의 렌더링된 이미지는 애플리케이션의 인스턴스(131A)의 출력을 비디오 스트림의 특정 프레임으로 표현한다. 클라이언트(130A)에서 수신된 입력, 특히 서버(120) 상에서 실행되는 애플리케이션의 인스턴스(131A)가 상태를 변경하게 하도록 할 수 있는 입력이 클라이언트(130A)로부터 서버(120)에 전송될 수 있다.
특정 실시예에서, 서버(120)는 하나 이상의 중앙 처리 장치(Central Processing Units, CPUs)(122) 및 하나 이상의 그래픽 처리 장치(Graphics Processing Units, GPUs)(121)를 구비할 수 있다. CPU 및 GPU는 컴퓨터 분야에서 주지된 것이다. 간략하게, CPU는 컴퓨터의 함수와 컴퓨터 프로그램의 명령어를 실행하는 컴퓨터 시스템의 일부이다. GPU는 마이크로프로세서(예를 들어, 상기 CPU)에서 그래픽 렌더링의 부담을 덜어주는 전문화된 프로세서이다. 일반적으로 GPU는 컴퓨터 그래픽을 처리하는 데에 매우 효율적이고, 그것의 매우 병렬적인 구조는 GPU가 범용 CPU에 비해 복잡한 알고리즘(예를 들어, 그래픽 관련 알고리즘)의 범위에서 더욱 효과적이게 만든다. 특정 실시예에서, GPU(121)는 비디오 카드의 또는 서버(120)의 마더보드 상의 부품일 수 있다.
특정 실시예에서, GPU(121)는 렌더링 대상을 포함할 수 있다. 특정 실시예에서, 렌더링 절차는 하나 이상의 애플리케이션의 출력을 상기 렌더링 대상으로 하나 이상의 이미지로서 렌더링한다. 특정 실시예에서, 상기 렌더링된 2 차원 이미지는 GPU(121)의 상기 렌더링 대상에 저장될 수 있다. 특정 실시예에서, 상기 렌더링 대상은 프레임 버퍼(frame buffer) 또는 GPU(121) 내의 임의의 적합한 유형의 메모리나 저장장치일 수 있다. 이하 논의되는 바와 같이, 렌더링 대상은 많은 부분들 또는 프레임 영역들로 분할될 수 있다.
서버(120)에 의해 호스팅되는 게임을 실행하는 동안 또는 애플리케이션을 사용하는 동안, 클라이언트 시스템(130)은 키보드 및/또는 컨트롤러 입력을 사용자로부터 수신하고, 그 다음 컨트롤러 입력을 통신 경로(150)를 통해 서버(120)로 전송한다. 서버(120)는 그에 응답하여 게이밍 프로그램 코드를 실행하고 게임 또는 애플리케이션 소프트웨어를 위한 비디오 출력의 연속적인 프레임들(비디오 이미지 시퀀스)을 생성한다. 예를 들어, 만약 사용자가 플레이어 캐릭터를 화면상에서 오른쪽으로 움직이도록 유도하는 방법으로 조이스틱 또는 기타 다른 컨트롤러를 조작한다면, 서버(120) 상에서 호스팅되는 상기 애플리케이션은 오른쪽으로 움직이는 상기 플레이어 캐릭터를 보여주는 비디오 이미지 시퀀스를 생성할 것이다. 이 비디오 이미지 시퀀스는 디스플레이를 위해 클라이언트 시스템(130)으로 압축되어 전송될 것이다. 클라이언트 시스템(130)은 압축된 비디오 스트림을 디코딩하고 압축 해제된 비디오 이미지를 디스플레이 장치상에 렌더링하는데, 이는 이하 더 자세하게 논의되는 바와 같다.
도 1은 본 발명의 일 실시예에 관한 개념도를 제공한다. 일 구현례에서, 브라우저 또는 기타 다른 클라이언트 애플리케이션을 호스팅하는 클라이언트(20)는 임베딩된 비디오 스트림을 포함하는 웹 페이지에 대한 HTTP 요청을 전송할 수 있다. 상기 비디오 스트림은 상호작용하는 게임 또는 미리 녹화된 비디오의 일부일 수 있다. 웹 페이지에 대한 요청에 응답하여, 서버(30)는 하이퍼텍스트 표시 언어(HyperText Markup Language, HTML) 페이지를 클라이언트(20)로 상기 브라우저에 의해 처리하기 위해 전송한다. 당해 기술분야에서 숙련된 자라면 알 수 있듯이, 기타 다른 구조화된 문서 포맷(예를 들어, XML, SGML 및 그 밖에 유사한 것)이 사용될 수 있다. 일 구현례에서, 상기 구조화된 문서는 자바스크립트 모듈(Javascript module)을 포함할 수 있는데, 상기 자바스크립트 모듈은 다양한 I/O 입력 스트림(예를 들어, 마우스 움직임 데이터, 조이스틱 데이터, 키 누름(keystrokes))에 대해 청취자(listener)로서 등록하여 상기 I/O 입력 데이터를 서버(30)로 전송한다.
클라이언트(20)에 반환되는 상기 HTML 페이지는 복수의 M-JPEG 스트림에 대한 임베딩된 참조를 포함할 수 있다. M-JPEG 스트림 각각은 전체 비디오 이미지의 고유 영역에 대응한다. 각각의 M-JPEG 스트림은 개별적인 참조이므로, 상기 HTML 코드는 브라우저가 각각의 스트림에 대한 개별적인 HTTP 요청을 전송하게 하도록 하고 결과적으로 클라이언트(20)와 서버(30) 간에 구축되는 개별적인 전송 제어 프로토콜(TCP) 접속(25)을 도 1이 도시하는 바와 같이 발생시킨다. 클라이언트(20) 및 서버(30) 상에 호스팅되는 애플리케이션에 관하여, 데이터가 접속(25) 각각에 대응하는 이른바 소켓(sockets)에 기록된다. 도 1은 완전한 비디오 프레임이 어떻게 16 개의 고유 프레임 영역으로 분할될 수 있는지를 도시한다. 당해 기술분야에서 숙련된 자는 그리드셀(grid cells)의 수와 그것들의 종횡비가 다양할 수 있음을 인식할 수 있을 것이다. 예를 들어, 상기 완전한 비디오 프레임은 1 x N 행렬을 생성하도록 열(columns)로 또는 N x 1 행렬을 생성하도록 행(rows)에 의해 분할될 수 있다. 그 외에, 상기 그리드 셀은 크기가 획일적일 필요는 없다.
상기 논의된 바와 같이, M-JPEG 스트림의 속성은 비디오 프레임 시퀀스를 형성하는 JPEG 이미지가 비교적 빠르게 낮은 지연시간을 갖도록 인코딩되고 디코딩될 수 있다는 것이다. M-JPEG 스트림 처리과정의 다른 속성은 브라우저가 마지막으로 수신된 프레임을 새로운 프레임이 수신될 때까지 디스플레이한다는 것이다. 따라서, 만약 수신되는 새로운 프레임이 없다면, 상기 브라우저는 마지막으로 수신된 프레임을 계속하여 디스플레이할 것이다.
구조화된 문서의 HTML코드는 완전한 비디오 프레임의 고유 영역이 도 1에 도시된 바와 같이 서로에 대하여 정렬되도록 구성된다. 일 구현례에서, 상기 프레임 영역은 HTML 표를 사용하여 정렬될 수 있는데, 상기 표에서 각각의 셀은 서로 다른 프레임 영역 대응한다. 기타 다른 구현례에서, 프레임 영역 각각은 DIV 섹션(section)에 대응할 수 있다. 캐스케이딩 스타일 시트(Cascading style sheet, CSS) 및 절대적인 위치 속성은 상기 프레임 영역의 상대적인 위치를 원하는 대로 고정하는 데에 사용될 수 있다. 일 구현례에서, 서버(30)는 비디오 프레임들의 시리즈를 생성할 수 있는데, 상기 프레임들 각각은 GPU의 메모리 (예를 들어) 또는 주 메모리(만약 CPU 처리가 사용되는 경우)에서 비트맵으로서 버퍼에 저장된다. 각각의 완전한 프레임은 버퍼에 저장되므로, 비디오 전송 절차는 버퍼링된 완전한 프레임의 제각기의 영역을 인코딩할 수 있고 상기 버퍼링된 프레임의 제각기의 영역이 인코딩된 형태를 상기 완전한 프레임의 각각의 고유 영역에 대응하는 개별 소켓 접속부에 기록할 수 있는데, 이는 이하 더 자세히 설명되는 바와 같다.
도 2는 완전한 비디오 프레임의 고유 영역에 대응하는 인코딩된 비디오 프레임 데이터를 선택적으로 기록하는 예시적인 절차를 도시한다. 도 2가 도시하는 바와 같이, 프레임 영역 전달 절차는 버퍼에 저장된 현재 렌더링된 프레임에 접근(202)하고 렌더링된 프레임의 인스턴트 영역(instant region)이 히스토리 버퍼(history buffer)에 저장된 프레임 영역과 지각적으로 상이한지 아닌지를 지각적으로 결정(204)한다. 만약 현재의 프레임 영역과 히스토리 버퍼에서의 앞서 렌더링된 영역 간 지각적인 차이점이 없다면, 상기 프레임 영역 전달 절차는 프레임 영역 데이터를 대응하는 통신 소켓에 기록하지 않는다.
일 프레임 영역이 다른 프레임 영역으로부터 지각적으로 상이한지 아닌지를 결정하는 것은 다양한 방법으로 성취될 수 있다. 예를 들어, 상기 프레임 영역 전달 절차 픽셀마다 배타적 논리합(XOR) 연산을 상기 비트맵의 구성요소 값에 관하여 수행하여, 각각의 픽셀에 차이점이 있는지를 결정하게 하도록 할 수 있다. 다른 구현례에서, memcmp(표준 C 라이브러리 함수)와 같은 메모리 비교 함수가 프레임 영역들을 비교하기 위해 사용될 수 있다. 일 구현례에서, 임의의 검출된 차이점은 지각적으로 상이하게 간주된다. 기타 다른 구현례에서, 상기 프레임 영역 전달 절차는 픽셀마다 각각의 비트맵의 구성요소 값들에 관한 비교를 수행할 수 있고 상기 각각의 비트맵의 구성요소 값들 간 거리 값(예를 들어, 유클리드 거리(Euclidian distance) 또는 상기 거리의 절대 값들의 합계)을 계산할 수 있다. 만약 상기 평균값(average) 또는 평균 거리(mean distance)가 문턱값을 초과한다면, 상기 프레임 영역은 지각적으로 상이하다고 간주된다.
만약 현재의 프레임 영역과 히스토리 버퍼 내의 앞서 렌더링된 영역 간에 지각적인 차이점이 있다면, 상기 프레임 영역 전달 절차는 앞서 저장된 프레임 영역을 덮어써서 상기 프레임을 상기 히스토리 버퍼에 기록(206)한다. 상기 프레임 영역 전달 절차는 상기 프레임 영역을 인코딩(208)하는데, 일 구현례에서 이는 상기 비트맵 데이터를 JPEG 이미지로 압축하고 상기 인코딩된 프레임 영역 데이터를 상기 프레임 영역에 대응하는 소켓에 기록(210)하는 것에 의한다.
모든 면에서 참조로서 본 명세서에 인용되는 미국 특허 출원 번호 12/797,788에 개시된 바와 같이, 상기 설명된 프레임 영역 전달 절차는 각각의 프레임 영역에 대한 개별적인 스레드(threads)로서 실행될 수 있고 그리고/또는 병렬로(예를 들어, 그래픽 처리 장치의 대용량 병렬처리(massively parallel processing) 능력을 이용함) 실행될 수 있다. 앞서 말한 것에 기초하여, 앞서서의 구성은 프레임 영역 데이터를 지각적인 차이들이 소정의 영역에서 검출되는 경우에만 전송함으로써 상태 비보존형의 비디오 압축 및 스트리밍 방법(여기에서 M-JPEG)을 이용하는 인터프레임 압축의 형태를 달성함을 알 수 있다. 따라서, 향상된 비디오 압축의 이러한 형태는 원격 호스트와 관련하여 달성될 수 있고, 상기 원격 호스트는 M-JPEG을 지원하여 전용 클라이언트 애플리케이션 또는 코덱을 설치하지 않아도 되는 브라우저를 포함할 뿐이다.
상기 논의된 실시예에서, 향상된 비디오 압축 기능은 대역폭 이용을 절약하는 데에 사용된다. 기타 다른 구현례에서, 상기 비디오 압축 기능은 일부 공칭 또는 대상 대역폭 할당(nominal or target bandwidth allocation)이 주어지는 비디오 품질을 증가시키기 위해 사용될 수 있다. 예를 들어, 서버(30)는 특정한 양의 대역폭을 클라이언트(20)에 세션(session)으로 할당할 수 있다. 이미지 또는 이미지의 영역의 해상도를 증가시키는 것(예를 들어, 이미지를 덜 적극적으로 압축하는 것)은 대역폭 이용을 늘린다. 소정의 영역에 대한 프레임 데이터가 클라이언트(30)로 전송되지 않는 경우, 대역폭은 절약된다. 서버(30)는 이 절약된 대역폭을 회수(re-claim)하여 완전한 비디오 프레임 디스플레이에서 기타 다른 영역의 이미지 해상도를 높아지게 하도록 동작할 수 있다. 예를 들어, 만약 상기 비디오 스트림이 미리 녹화되어 있는 경우, 압축 절차는 제1 단계에서 각각의 프레임 영역을 렌더링하고 어떤 영역이 변경되었고 변경되지 않았는지를 결정하도록 실행될 수 있다. 제2 단계에서, 상기 압축 절차는 절약된 대역폭의 양에 기초하여 소정의 프레임에서 하나 이상의 영역의 비디오 품질을 증가시킬 수 있다. 실시간 비디오 스트림(예를 들어, 비디오 게임의 게임 로직(game logic)에 의해 생성된 비디오 스트림)에 대하여, 상기 압축 절차는 기록에 바탕한 근거(historical basis)에 따라 각각의 영역의 상대적인 대역폭 이용을 관찰하여 더 활성화된 영역의 이미지 품질을 향상시킴으로써 대역폭을 그 영역으로 할당하는 통계적인 접근법을 이용할 수 있다. 예를 들어, 슬라이딩 시간 윈도우(sliding window of time) 동안 전송된 프레임 영역들의 수와 프레임 영역 데이터의 평균 크기에 기초하여, 상기 압축 절차는 각각의 영역에 대한 평균 대역폭 이용도를 계산할 수 있다. 기타 다른 구현례에서, 일부 시간 구간 동안 더 적은 프레임들이 전송될 것이라는 가정 하에서 상기 압축 절차는 덜 활성화된 영역의 해상도 또는 이미지 품질을 실제로 증가시킬 수 있다.
도 3은 하나 이상의 투명한 위치 비디오 스트림(transparent, positional video streams)을 포함하는 본 발명의 또 다른 구현례를 도시하고, 픽셀 폭 및/또는 높이는 대상 프레임이 브라우저에 의해 렌더링되는 위치를 평행이동시키도록 조절될 수 있다. 도 3은 클라이언트(20)와 서버(30) 간 복수의 TCP 접속(325a 내지 h)을 도시한다. 클라이언트에 의해 렌더링된 완전한 비디오 프레임은 복수의 렌더링된 프레임 영역을 포함하는데, 그 중 일부는 정적으로 배치되고 크기가 부여되지만 기타 다른 영역은 이하 더 구체적으로 논의되는 바와 같이 동적으로 크기 또는 위치가 변할 수 있다. TCP 접속들(325a 내지 d)은 완전한 비디오 프레임의 각각의 영역(1 내지 4)에 대응한다. TCP 접속들(325e 내지 g)은 위치 프레임들(5, 6, 7)에 대응하고, 한편 TCP 접속(325h)은 평행이동하는 프레임 영역(T)에 대응한다.
도시된 구현례에서, 프레임 영역들(1 내지 4)은 M-JPEG 스트림으로 전송되는 배경 이미지로서 렌더링된다. 위치 프레임은 상기 프레임 영역의 배경 이미지 상에 그리고 대상 프레임 영역(T)과 동일한 레이어에 오버레이되는(overlayed) 투명한 프레임으로서 렌더링된다. 상기 위치 프레임은 PNG 포맷, GIF 포맷 또는 투명도(transparency)를 지원하는 임의의 기타 다른 포맷을 사용하여 렌더링될 수 있다. 위치 프레임은 투명한 것을 넘어 기본적으로 사용자에게 보이지 않는데, 이는 픽셀들이 알파 또는 투명도 채널(alpha or transparency channel) 중 어느 하나에 투명도 값으로 인코딩되기 때문이다. 대상 프레임(T)은 브라우저에 의해 상기 배경 이미지 프레임 상의 오버레이로 렌더링된다. 일부 구현례에서, 대상 프레임(T)은 장면에서 주요한 또는 두드러지는 객체, 예를 들어 "일인칭 슈팅(first-person shooter)" 비디오 게임에서의 총 또는 일인칭 레이싱 게임에서의 자동차를 렌더링하기 위해 사용될 수 있다. 마스크는 상기 대상 프레임에 렌더링되는 주요 객체를 둘러싼 투명한 영역을 정의하기 위해 사용될 수 있다. 배경 프레임 영역들(1 내지 4)은 장면의 나머지 구성요소들, 예를 들어 풍경 및 기타 다른 객체들을 포함할 수 있다. 따라서 일 구현례에서, 하나 이상의 객체가 대상 프레임들(T)에 개별적으로 렌더링되고, 한편 하나 이상의 기타 다른 객체는 프레임 영역들(1 내지 4)에 렌더링된다. 프레임 영역들(1 내지 4)을 생성하고, 렌더링하며, 압축하고 클라이언트(20)로 전송하는 것은 실질적으로 상기와 동일하게 동작한다. 더 나아가, 상기 논의된 것처럼 4 개보다 많은 배경 프레임 영역, 예를 들어 16 개의 프레임 영역이 있을 수 있다. 그 외에, 하나의 배경 프레임이 있을 수 있고 배경 프레임이 없을 수도 있다.
위치 프레임들(5 내지 7) 및 대상 프레임(T)은 클라이언트 애플리케이션에 의해 동일 레이어에 렌더링된다. 도시된 구현례에서, 대상 프레임(T)은 상기 위치 프레임에 인접하도록 배치되고 렌더링된다. 일 구현례에서, 이는 HTML 표 요소를 포함하는 기본 HTML 문서를 전송함으로써 달성될 수 있다. 상기 표는 위치 프레임들(5 내지 7)에 대응하는 셀들이 3 개 있는 2x2 표가 될 수 있는 한편, 상기 대상 프레임은 마지막 남은 셀(예를 들어, 오른쪽 상단 셀)에 대응한다. HTML 표는 상기 디스플레이의 코너에 고정되거나 배치될 수 있다. 상기 대상 프레임을 평행이동시키기 위해, 다른 셀들에 렌더링된 상기 위치 프레임의 이미지 크기가 변경될 수 있고, 이는 하나 이상의 위치 프레임을 확대시키고 축소시킴으로써 뷰어(viewer)에 의해 지각되는 바와 같이 상기 대상 프레임을 평행이동시키게 된다. 만약 수평적 또는 수직적 움직임만이 요구된다면, 1x2 또는 2x1 표가 사용될 수 있다. 위치 프레임들(5 내지 7)은 배경 프레임(3)에 비례하여 정렬된다. 하지만, 상기 위치 프레임은 또한 전체 디스플레이 또는 기타 다른 배경 프레임에 비례하여 정렬될 수 있다. 따라서, 위치 프레임들(5 내지 7)의 폭 또는 높이를 변경하여 상기 브라우저가 대상 프레임을 배경 프레임 영역 및 전체 디스플레이에 비례하여 다양한 위치에 렌더링하게 하도록 할 수 있다. 대상 프레임(T)이 하나의 프레임의 코너에 결합된 구현례에서는 하나의 위치 프레임만을 사용할 수 있다. 일 구현례에서, 하나의 셀을 갖는 HTML 표 또는 HTML DIV 섹션이 사용될 수 있고, 상기 배경 이미지는 투명한 위치 프레임이고 대상 이미지는 상기 표 또는 DIV 섹션의 측면 또는 코너에 정렬된다. 그러한 구현례에서, 상기 배경 위치 프레임 이미지의 폭 또는 높이를 변경하여 상기 대상 프레임이 디스플레이 상의 다양한 위치에 렌더링되도록 한다. 본 발명의 구현례는 하나 이상의 상기 위치 프레임의 종횡비를 전략적으로 조절하여, 브라우저가 상기 대상 프레임이 렌더링되고 디스플레이되는 위치를 효율적으로 변경하도록 한다.
일 구현례에서, 이는 선택된 높이와 폭을 갖는 투명한 비디오 프레임 데이터를 TCP 접속들(325e 내지 g)을 통해 M-JPEG 스트림으로 전송함으로써 달성될 수 있다. 상기 대상 프레임의 움직임이 요구됨에 따라, 위치 로직은 상기 위치 프레임들의 하나 이상의 높이 또는 폭에 대한 변경을 결정하고 선택된 높이 및 폭을 갖는 새로운 프레임을 전송할 수 있다. 도 4는 비디오 게임 구현에 사용될 수 있는 예시적인 절차를 도시한다. 예를 들어, 교훈적 목적으로 상기 절차가 캘리포니아주 레드우드 시티의 Electronic Arts, Inc.에 의해 발행된 Crysis(r)와 같은 일인칭 슈팅에 관련되어 사용된다고 가정하라. 그러한 게임에서, 총은 상기 대상 프레임에 렌더링될 수 있는 한편, 나머지 게임 객체들과 장면은 상기 배경 프레임 영역에 렌더링된다. 도 4가 도시하는 바와 같이, 일 구현례에서 서버(20)는 클라이언트(30)로부터 입출력(input/output)의 입력들을 수신(402)할 수 있고, 이에는 마우스 클릭 또는 움직임, 조이스틱 움직임, 키 누름, 게임 컨트롤러 움직임 및 그와 유사한 것을 특성화한 데이터가 있을 수 있다. 일 구현례에서, 원격 클라이언트로 가장 먼저 전송되고 다양한 스트림에 대한 인라인 참조(inline references)를 포함하는 구조화된 문서는 또한 I/O 장치 입력을 수신하고 처리를 위해 서버로 상기 입력을 전송하기 위한 자바스크립트 모듈(Javascript module) 또는 기타 다른 코드 객체를 포함할 수 있다. 서버(20)는 게임 상태를 조정하도록 입출력의 입력들에 기초하여 상기 게임 로직을 실행(404)할 수 있는데, 이에는 게임에서 플레이어 캐릭터, NPC(non-player characters), 빌딩 및 그와 유사한 것과 같은 하나 이상의 객체의 상태가 있을 수 있다. 서버(20)는 상기 대상 프레임에 포함된 것들을 제외한 모든 객체를 포함하는 상기 배경에 관한 비디오 프레임을 렌더링(406)할 수 있고, 총 또는 자동차와 같이 상기 대상 프레임에 연관된 하나 이상의 객체의 상태에 기초하여 대상 프레임을 개별적으로 렌더링(408)할 수 있다. 일 구현례에서, 상기 대상 게임에 관한 렌더링 절차는 위치 및 방향과 같은 객체의 상태 파라미터에 기초하여 대상 객체를 렌더링하며, 다만 상기 렌더링된 객체를 상기 대상 프레임의 중앙에 위치시키게 된다. 또한, 서버(20)는 상기 대상 객체에 기초하여 상기 대상 프레임 그 자체에 관한 위치 파라미터, 즉 상기 대상 프레임이 클라이언트 디스플레이에서 어디에 렌더링되어야 하는지의 좌표를 계산한다. 이러한 위치 파라미터는 원하는 위치에 상기 프레임을 배치하기 위해 요구되는 상기 위치 프레임의 폭과 높이를 결정한다. 그 다음, 서버(20)는 상기 영역, 위치 및 대상 프레임들을 압축하고 압축된 프레임들을 기록하며 상기 영역, 대상 및 위치 프레임들을 각각의 소켓 접속부(325a 내지 h)로 전송한다.
본 발명의 일부 구현례는 엄청난 이점을 가져다줄 수 있다. 모바일 장치, 랩탑 또는 데스크탑 컴퓨터는 고품질 비디오를 감상하기 위해 그리고/또는 고품질 비디오 게임을 실행하기 위해 설치되는 전용 클라이언트 애플리케이션 또는 코덱을 구비할 필요가 없다. 예를 들어, 상기 설명된 구현례는 사용자가 단지 브라우저만을 이용하여 고화질 그래픽 품질을 갖는 비디오 게임을 실행할 수 있도록 한다. 예를 들어, 사용자는 휴대 전화에 의해 호스팅되는 브라우저를 사용하여 사이트에 접근할 수 있고 비디오 게임을 실행하기 위한 페이지에 간편하게 접근할 수 있다. 다른 구현례에서, 사용자는 HTML 기반 이메일 문서를 수신함으로써 간편하게 고품질 비디오 게임을 실행할 수 있다.
특정 실시예는 네트워크 환경에서 구현될 수 있다. 도 6은 예시적인 네트워크 환경(600)을 도시한다. 네트워크 환경(600)은 하나 이상의 서버(620) 및 하나 이상의 클라이언트(630)를 서로 결합시키는 네트워크(610)를 포함한다. 특정 실시예에서, 네트워크(610)는 인트라넷, 엑스트라넷(extranet), 가상 사설망(virtual private network, VPN), 근거리 통신망(LAN), 무선 LAN(wireless LAN, WLAN), 광역 통신망(WAN), 도시권 통신망(metropolitan area network, MAN), 통신 네트워크, 위성 네트워크, 인터넷의 일부 또는 다른 네트워크(610)나 2 이상의 그러한 네트워크(610)의 조합이다. 본 명세서는 임의의 적합한 네트워크(610)를 고려한다.
하나 이상의 연결(650)은 서버(620) 또는 클라이언트(630)를 네트워크(610)에 결합시킨다. 특정 실시예에서, 하나 이상의 연결(650) 각각은 하나 이상의 유선, 무선 또는 광 연결(650)을 포함한다. 특정 실시예에서, 하나 이상의 연결(650) 각각은 인트라넷, 엑스트라넷, VPN, LAN, WLAN, WAN, MAN, 통신 네트워크, 위성 네트워크, 인터넷의 일부 또는 다른 연결(650)이나 2 이상의 그러한 연결(650)의 조합을 포함한다. 본 명세서는 서버(620)와 클라이언트(630)를 네트워크(610)에 결합시키는 임의의 적합한 연결(650)을 고려한다.
특정 실시예에서, 각각의 서버(620)는 통합 서버(unitary server)일 수 있고 또는 다수의 컴퓨터나 다수의 데이터센터를 연결하는 분산 서버(distributed server)일 수도 있다. 서버(620)는 다양한 유형, 제한적이지 않게 예를 들어 웹 서버, 뉴스 서버, 메일 서버, 메시지 서버, 광고 서버(advertising server), 파일 서버, 응용 서버, 교환 서버(exchange server), 데이터베이스 서버 또는 프록시 서버(proxy server)로 되어있을 수 있다. 특정 실시예에서, 각각의 서버(620)는 서버(620)에 의해 구현되거나 지원되는 적절한 기능을 실행하는 하드웨어, 소프트웨어 또는 임베딩된 로직 컴포넌트나 2 이상의 그러한 컴포넌트의 조합을 포함할 수 있다. 예를 들어, 웹 서버는 일반적으로 웹 페이지 또는 웹 페이지의 특정 요소를 포함하는 웹사이트를 호스팅할 수 있다. 더 구체적으로, 웹 서버는 HTML 파일 또는 기타 다른 파일 유형들을 호스팅할 수 있고, 또는 요청에 따라 파일들을 동적으로 생성하거나 구성할 수 있고, 클라이언트(630)로부터의 HTTP 또는 기타 다른 요청에 응하여 이것들을 클라이언트(630)로 전달할 수 있다. 메일 서버는 일반적으로 전자 메일 서비스를 다양 클라이언트(630)에 제공할 수 있다. 데이터베이스 서버는 일반적으로 하나 이상의 데이터 기억 장치에 저장된 데이터를 관리하는 인터페이스를 제공할 수 있다.
특정 실시예에서, 각각의 클라이언트(630)는 하드웨어, 소프트웨어 또는 임베딩된 로직 컴포넌트나 2 이상의 그러한 컴포넌트의 조합을 포함하고 클라이언트(630)에 의해 구현되거나 지원되는 적절한 기능을 실행할 수 있는 전자 장치일 수 있다. 제한적이지 않게 예를 들어, 클라이언트(630)는 데스크탑 컴퓨터 시스템, 노트북 컴퓨터 시스템, 넷북 컴퓨터 시스템, 휴대용 전자 장치 또는 휴대 전화일 수 있다. 클라이언트(630)는 클라이언트(630)에서의 네트워크 사용자가 네트워크(610)에 접근할 수 있도록 할 수 있다. 클라이언트(630)는 마이크로소프트 인터넷 익스플로러(Microsoft Internet Explorer) 또는 모질라 파이어폭스(Mozilla Firefox)와 같은 웹 브라우저를 구비할 수 있고, 구글 툴바(Google Toolbar) 또는 야후 툴바(Yahoo Toolbar)와 같은 하나 이상의 애드온(add-ons), 플러그인 또는 기타 다른 확장을 구비할 수 있다. 클라이언트(630)는 그 사용자가 다른 클라이언트들(630)에서의 다른 사용자들과 통신할 수 있도록 할 수 있다. 본 명세서는 임의의 적합한 클라이언트(630)를 고려한다.
특정 실시예에서, 하나 이상의 데이터 저장장치(640)는 하나 이상의 연결(650)을 통해 하나 이상의 서버(620)에 통신으로 연결될 수 있다. 특정 실시예에서, 데이터 저장장치(640)는 다양한 유형의 정보를 저장하기 위해 사용될 수 있다. 특정 실시예에서, 데이터 저장장치(640)에 저장된 상기 정보는 일정한 데이터 구조에 따라 체계화될 수 있다. 특정 실시예는 서버(620) 또는 클라이언트(630)가 데이터 저장장치(640)에 저장된 상기 정보를 관리(예를 들어, 회수(retrieve), 변경, 추가 또는 삭제)할 수 있도록 하는 인터페이스를 제공할 수 있다.
특정 실시예에서, 각각의 서버(620)는 동시에 하나 이상의 클라이언트(630)로 서비스를 제공할 수 있고, 그것이 지원하는 클라이언트(630)를 위해 렌더링을 수행할 수 있다. 서버(620)는 당해 서버가 지원하는 특정 클라이언트(630)를 위해 렌더링된 이미지를 전송할 수 있는데, 이는 각각의 렌더링된 이미지를 특정 프레임으로 하여 상기 렌더링된 이미지를 비디오 스트림으로 인코딩하고 상기 비디오 스트림을 클라이언트(630)에 전송함으로써 이루어진다. 상기 비디오 스트림을 수신하면, 클라이언트(630)는 디스플레이를 위한 이미지 프레임을 추출하도록 상기 비디오 스트림을 디코딩할 수 있다. 모든 면에서 참조로서 본 명세서에 인용되는 두 개의 미국 특허 출원 번호 12/579,300 및 12/709,343은 하나 이상의 클라이언트(630)로 압축된 비디오 스트림을 전달하기 위해 사용될 수 있는 비디오 코덱을 개시한다. 그 외에, 앞서 말한 응용례들은 또한 클라이언트(630)에 대하여 상기 비디오 데이터를 생성하고 스트리밍하기 위해 각각의 서버(620)가 GPU의 병렬 처리 리소스를 어떻게 활용할 수 있는지를 개시한다.
특정 실시예는 하드웨어, 소프트웨어 또는 하드웨어 및 소프트웨어의 조합으로서 구현될 수 있다. 제한적이지 않게 예를 들어, 하나 이상의 컴퓨터 시스템은 특정 로직 또는 소프트웨어를 실행하여, 본 명세서에 설명되거나 도시된 하나 이상의 절차 중 하나 이상의 단계를 수행하게 하도록 할 수 있다. 컴퓨터 시스템들의 하나 이상은 통합되어 있거나 또는 적절한 경우 다수의 컴퓨터 시스템 또는 다수의 데이터센터에 걸쳐 분산되어 있을 수 있다. 본 명세서는 임의의 적합한 컴퓨터 시스템을 고려한다. 특정 실시예에서, 본 명세서에 설명되거나 도시된 하나 이상의 절차 중 하나 이상의 단계를 수행하는 것은 하나 이상의 특정한 지리상 위치로 반드시 제한될 필요가 없고 시간상 제한을 반드시 가져야할 필요도 없다. 제한으로서가 아닌 예시로서, 하나 이상의 컴퓨터 시스템은 그 함수들을 "실시간"으로 "오프라인"에서 "배치모드(batch mode)"로, 그렇지 않으면 또는 적절한 경우 앞서 말한 적합한 조합으로 실행할 수 있다. 상기 컴퓨터 시스템들의 하나 이상은 적절한 경우 그 함수들 중 하나 이상의 부분을 서로 다른 시간에 서로 다른 위치에서 서로 다른 처리과정을 이용하여 실행할 수 있다. 본 명세서에서, "로직"이라고 함은 소프트웨어를 포괄하여 가리키는 것이고, 적절한 경우 그 반대의 경우도 될 수 있다. "소프트웨어"라고 함은 하나 이상의 컴퓨터 프로그램을 포괄하여 가리키는 것이고, 적절한 경우 그 반대의 경우도 될 수 있다. "소프트웨어"라고 함은 데이터, 명령어 또는 둘 모두를 포괄하여 가리키는 것이고, 적절한 경우 그 반대의 경우도 될 수 있다. 그와 유사하게, "데이터"라고 함은 명령어를 포괄하여 가리키는 것이고, 적절한 경우 그 반대의 경우도 될 수 있다.
하나 이상의 컴퓨터 판독가능 저장 매체는 특정 실시예를 구현하는 소프트웨어를 저장할 수 있고 또는 다른 방법으로 구현(embody)할 수 있다. 컴퓨터 판독가능 매체는 적절한 경우 소프트웨어를 전달, 통신, 포함, 보유, 보존, 전파, 유지, 저장, 전송, 운반 또는 다른 방법으로 구현하는 것이 가능한 임의의 매체일 수 있다. 컴퓨터 판독가능 매체는 적절한 경우 생물학적, 화학적, 전자적, 전자기적, 적외선적, 자기적, 광학적, 양자적 또는 기타 다른 적합한 매체나 2 이상의 그러한 매체의 조합일 수 있다. 컴퓨터 판독가능 매체는 하나 이상의 나노미터 크기의 컴포넌트를 포함할 수 있고 또는 다른 방법으로 나노미터 크기의 설계나 제조를 구현할 수 있다. 예시적인 컴퓨터 판독가능 저장 매체는 제한적이지 않게 컴팩트 디스크(CDs), 필드 프로그램 가능 게이트 어레이(field-programmable gate arrays, FPGAs), 플로피 디스크, 플롭티컬 디스크(floptical disks), 하드 디스크, 홀로그래픽 저장 장치(holographic storage devices), 집적회로(integrated circuits, ICs)(예를 들어, 주문형 반도체(application-specific integrated circuits, ASICs)), 자기 테이프, 캐시(caches), 프로그램 가능 논리 소자(programmable logic devices, PLDs), RAM(random-access memory) 장치, ROM(read-only memory) 장치, 반도체 메모리 장치 및 기타 다른 적합한 컴퓨터 판독가능 저장 매체를 포함한다.
특정 실시예를 구현하는 소프트웨어는 임의의 적합한 프로그래밍 언어(절차형 또는 객체 지향형일 수 있음), 또는 적절한 경우 프로그래밍 언어들의 조합으로 기록될 수 있다. 컴퓨터 시스템(예를 들어, 단일 또는 다중 프로세서 컴퓨터 시스템), 또는 적절한 경우 시스템들의 임의의 적합한 유형은 특정 실시예를 구현하는 소프트웨어를 실행할 수 있다. 범용 컴퓨터 시스템은 적절한 경우 특정 실시예를 구현하는 소프트웨어를 실행할 수 있다.
예를 들어, 도 7은 특정 실시예의 하나 이상의 부분을 구현하는 데에 적합한 예시적인 컴퓨터 시스템(700)을 도시한다. 비록 본 명세서가 특정 구성에서 특정 컴포넌트들을 구비한 특정 컴퓨터 시스템(700)을 설명하고 도시하고 있긴 하지만, 본 명세서는 임의의 적합한 구성에서 임의의 적합한 컴포넌트를 구비한 임의의 적합한 컴퓨터 시스템을 고려한다. 더 나아가, 컴퓨터 시스템(700)은 임의의 적합한 물리적 형태, 예를 들어 하나 이상의 집적 회로(ICs), 하나 이상의 인쇄 회로 기판(printed circuit boards, PCBs), 하나 이상의 휴대용 또는 기타 다른 장치(예를 들어, 휴대 전화 또는 PDA), 하나 이상의 개인용 컴퓨터 또는 하나 이상의 슈퍼 컴퓨터를 취하도록 할 수 있다.
시스템 버스(system bus)(710)는 컴퓨터 시스템(700)의 하부시스템들을 서로 결합시킨다. 본 명세서에서, "버스"라고 함은 공통 함수를 제공하는 하나 이상의 디지털 신호선을 포괄하여 가르키는 것이다. 본 명세서는 임의의 적합한 버스 구조를 구비한 임의의 적합한 버스 구조체(예를 들어, 하나 이상의 메모리 버스, 하나 이상의 주변장치 버스(peripheral buses), 하나 이상의 로컬 버스 또는 앞서 말한 것들의 조합)를 포함하는 임의의 적합한 시스템 버스(710)를 고려한다. 예시적인 버스 구조는 제한적이지 않게 ISA(Industry Standard Architecture) 버스, EISA(Enhanced ISA) 버스, MCA(Micro Channel Architecture) 버스, VLB(Video Electronics Standard Association local) 버스, PCI(Peripheral Component Interconnect) 버스, PCI-Express 버스(PCI-X) 및 AGP(Accelerated Graphics Port) 버스를 포함한다.
컴퓨터 시스템(700)은 하나 이상의 프로세서(720)(또는 중앙 처리 장치(CPUs))를 포함한다. 프로세서(720)는 명령어, 데이터 또는 컴퓨터 주소의 임시 로컬 저장장치용의 캐시(722)를 포함할 수 있다. 프로세서(720)는 메모리(730)를 포함하는 하나 이상의 저장 장치에 결합된다. 메모리(730)는 RAM(random access memory)(732) 및 ROM(read-only memory)(734)을 포함할 수 있다. 데이터 및 명령어는 프로세서(720)와 RAM(732) 간에 양방향으로 전송될 수 있다. 데이터 및 명령어는 ROM(734)으로부터 프로세서(720)에 단일방향으로 전송될 수 있다. RAM(732) 및 ROM(734)은 임의의 적합한 컴퓨터 판독가능 저장 매체를 포함할 수 있다.
컴퓨터 시스템(700)은 프로세서(720)에 양방향으로 결합되는 비휘발성 저장장치(fixed storage)(740)를 포함한다. 비휘발성 저장장치(740)는 저장장치 제어 장치(752)를 통해 프로세서(720)에 결합될 수 있다. 비휘발성 저장장치(740)는 추가 데이터 저장 용량을 제공할 수 있고 임의의 적합한 컴퓨터 판독가능 저장 매체를 포함할 수 있다. 비휘발성 저장장치(740)는 운영 시스템(OS)(742), 하나 이상의 실행 파일(executables)(744), 하나 이상의 애플리케이션 또는 프로그램(746), 데이터(748) 및 그와 유사한 것을 저장할 수 있다. 비휘발성 저장장치(740)는 통상적으로 주기억장치(primary storage)보다 느린 제2 저장 매체(예를 들어, 하드 디스크)이다. 적절한 경우에, 비휘발성 저장장치(740)에 의해 저장된 정보는 메모리(730)에 가상 메모리로서 통합될 수 있다.
프로세서(720)는, 예를 들어 그래픽 제어(754), 비디오 인터페이스(758), 입력 인터페이스(760), 출력 인터페이스(762) 및 저장장치 인터페이스(764)와 같이 다양한 인터페이스에 결합될 수 있는데, 이는 결과적으로 각각 적절한 장치에 결합될 수 있다. 예시적인 입력 또는 출력 장치는 제한적이지 않게 비디오 디스플레이, 트랙 볼(track balls), 마우스, 키보드, 마이크, 접촉 감지 디스플레이(touch-sensitive displays), 변환기 카드 판독기(transducer card readers), 자기 또는 종이 테이프 판독기, 태블릿, 스타일러스(styli), 음성 또는 필기 인식기, 생체인식 판독기(biometrics readers) 또는 컴퓨터 시스템을 포함한다. 네트워크 인터페이스(756)는 프로세서(720)를 다른 컴퓨터 시스템에 또는 네트워크(780)에 결합시킬 수 있다. 네트워크 인터페이스(756)를 이용하여, 프로세서(720)는 특정 실시예의 단계들을 수행하는 과정에서 네트워크(780)로부터 또는 네트워크(780)에 정보를 수신하거나 또는 송신할 수 있다. 특정 실시예는 프로세서(720) 상에서 단독으로 실행할 수 있다. 특정 실시예는 프로세서(720) 상에서 그리고 함께 동작하는 하나 이상의 원격 프로세서 상에서 실행할 수 있다.
컴퓨터 시스템(700)이 네트워크(780)에 접속된 네트워크 환경에서, 컴퓨터 시스템(700)은 네트워크(780)에 접속된 기타 다른 장치들과 통신할 수 있다. 컴퓨터 시스템(700)은 네트워크 인터페이스(756)를 통해 네트워크(780)와 통신할 수 있다. 예를 들어, 컴퓨터 시스템(700)은 네트워크 인터페이스(756)에서 하나 이상의 유입되는 패킷들의 형태로 네트워크(780)로부터 정보(예를 들어, 다른 장치로부터의 요청 또는 응답)를 수신할 수 있고, 메모리(730)는 후속 처리과정을 위해 상기 유입되는 패킷들을 저장할 수 있다. 컴퓨터 시스템(700)은 네트워크 인터페이스(756)로부터 하나 이상의 유출되는 패킷들의 형태로 네트워크(780)에 정보(예를 들어, 다른 장치로부터의 요청 또는 응답)를 송신할 수 있고, 메모리(730)는 송신되기에 앞서 정보를 저장할 수 있다. 프로세서(720)는 특정 요구에 따라 메모리(730)에서 유입되는 또는 유출되는 패킷을 처리하기 위해 그에 접근할 수 있다.
컴퓨터 시스템(700)은 하나 이상의 입력 장치(766)(키패드, 키보드, 마우스, 스타일러스 등을 포함할 수 있음), 하나 이상의 출력 장치(768)(하나 이상의 디스플레이, 하나 이상의 스피커, 하나 이상의 프린터 등을 포함할 수 있음), 하나 이상의 저장 장치(770) 및 하나 이상의 저장 매체(772)를 구비할 수 있다. 입력 장치(766)는 컴퓨터 시스템(700)의 외부에 또는 내부에 있을 수 있다. 출력 장치(768)는 컴퓨터 시스템(700)의 외부에 또는 내부에 있을 수 있다. 저장 장치(770)는 컴퓨터 시스템(700)의 외부에 또는 내부에 있을 수 있다. 저장 매체(772)는 컴퓨터 시스템(700)의 외부에 또는 내부에 있을 수 있다.
특정 실시예는 하나 이상의 컴퓨터 판독가능 저장 매체를 포함한 하나 이상의 컴퓨터 저장장치 제품을 수반하는데, 이는 본 명세서에 설명되거나 도시된 하나 이상의 절차 중 하나 이상의 단계를 수행하는 소프트웨어를 구현한다. 특정 실시예에서, 상기 매체, 상기 소프트웨어 또는 둘 모두의 하나 이상의 부분은 본 명세서에 설명되거나 도시된 하나 이상의 절차 중 하나 이상의 단계를 수행하도록 특별히 설계되거나 생산될 수 있다. 그에 추가하여 또는 대안으로서, 특정 실시예에서 상기 매체의 하나 이상의 부분, 상기 소프트웨어 또는 둘 모두는 본 명세서에 설명되거나 도시된 절차를 특별히 설계하거나 생산하지 않고서 일반적으로 이용가능할 수 있다. 예시적인 컴퓨터 판독가능 저장 매체는 제한적이지 않게 CD(예를 들어, CD-ROM), FPGA, 플로피 디스크, 플롭티컬 디스크, 하드 디스크, 홀로그래픽 저장 장치, IC(예를 들어, ASIC), 자기 테이프, 캐시, PLD, RAM 장치, ROM 장치, 반도체 메모리 장치 및 기타 다른 적합한 컴퓨터 판독가능 저장 매체를 포함한다. 특정 실시예에서, 소프트웨어는 컴파일러(compiler)가 생성할 수 있는 기계어(machine code)일 수 있고 또는 컴퓨터가 인터프리터(interpreter)를 사용하여 실행할 수 있는 고급 언어(higher-level code)를 포함한 하나 이상의 파일일 수 있다.
제한으로서가 아닌 예시로서, 메모리(730)는 소프트웨어를 구현하는 하나 이상의 컴퓨터 판독가능 저장 매체를 포함할 수 있고, 컴퓨터 시스템(700)은 프로세서(720)가 상기 소프트웨어를 실행한 결과로서 본 명세서에 설명되거나 도시된 특정 기능을 제공할 수 있다. 메모리(730)는 상기 소프트웨어를 저장할 수 있고 프로세서(720)는 이를 실행할 수 있다. 메모리(730)는 상기 소프트웨어를 구현하는 대용량 저장 장치(730)에서의 컴퓨터 판독가능 저장 매체로부터 또는 네트워크 인터페이스(756)를 통한 하나 이상의 기타 다른 소스로부터 상기 소프트웨어를 판독할 수 있다. 상기 소프트웨어를 실행할 때, 특정한 요구에 따라서 프로세서(720)는 본 명세서에 설명되거나 도시된 하나 이상의 절차 중 하나 이상의 단계를 수행할 수 있고, 이는 메모리(730)에서의 저장장치를 위한 하나 이상의 데이터 구조체를 정의하고 하나 이상의 상기 데이터 구조체를 상기 소프트웨어의 하나 이상의 부분에 의해 지시되는 바와 같이 변경하는 것을 포함할 수 있다. 그에 추가하여 또는 대안으로서, 컴퓨터 시스템(700)은 로직이 회로에 배선된(hardwired) 또는 다른 방법으로 구현된 결과로서 본 명세서에 설명되거나 도시된 특정 기능을 제공할 수 있고, 상기 로직은 본 명세서에 설명되거나 도시된 하나 이상의 절차 중 하나 이상의 단계를 수행하기 위한 소프트웨어를 대신하여 또는 그와 함께 동작할 수 있다. 특정 요구에 따라, 본 명세서는 임의의 적합한 하드웨어 및 소프트웨어의 조합을 포함한다.
특정 실시예에서, 컴퓨터 시스템(700)은 하나 이상의 그래픽 처리 장치(GPUs)(724)를 포함할 수 있다. 특정 실시예에서, GPU(724)는 그래픽 렌더링에 일반적으로 사용되는 수학적 연산을 하고자 하는 하나 이상의 집적 회로 및/또는 프로세싱 코어(processing cores)를 포함할 수 있다. 일부 실시예에서, GPU(724)는 전용 그래픽 장치 명령어 세트를 사용할 수 있고, 한편 기타 다른 구현례에서 상기 GPU는 CPU와 같은(예를 들어 변경된 x86) 명령어 세트를 사용할 수 있다. 그래픽 처리 장치(724)는 블리팅(blitting), 텍스처 매핑(texture mapping), 픽셀 셰이딩(pixel shading), 프레임 버퍼링(frame buffering) 및 그와 유사한 것과 같은 다수의 그래픽 프리미티브 동작(graphics primitive operations)을 구현할 수 있다. 특정 실시예에서, GPU(724)는 그래픽 가속기, 범용 GPU(General Purpose GPU, GPGPU) 또는 임의의 기타 다른 적합한 처리 장치일 수 있다.
특정 실시예에서, GPU(724)는 카드 슬롯을 통해 하드웨어 시스템 구조에 부착하는 그래픽 카드 또는 디스플레이 카드에서 구현될 수 있다. 기타 다른 실시예에서, GPU(724)는 컴퓨터 시스템 구조의 마더보드 상에 집적될 수 있다. 적합한 그래픽 처리 장치는 Advanced Micro Devices(r)의 AMD R7XX 기반 GPU 장치(Radeon(r)의 HD 4XXX), AMD R8XX 기반 GPU 장치(Radeon(r)의 HD 5XXX), Intel(r)의 Larabee 기반 GPU 장치(아직 발매되지 않음), nVidia(r)의 8 시리즈 GPU, nVidia(r)의 9 시리즈 GPU, nVidia(r)의 100 시리즈 GPU, nVidia(r)의 200 시리즈 GPU 및 임의의 기타 다른 DX11 지원 GPU(DX11-capable GPUs)를 포함할 수 있다.
비록 본 명세서가 특정한 순서로 발생하는 것으로서 특정한 동작들을 설명하고 도시하긴 하지만, 본 명세서는 임의의 적합한 순서로 발생하는 임의의 적합한 동작들을 고려한다. 더 나아가, 본 명세서는 임의의 적합한 순서에서 한 번 이상 반복되는 임의의 적합한 동작들을 고려한다. 비록 본 명세서가 순서대로 발생하는 것으로서 특정한 동작들을 설명하고 도시하긴 하지만, 본 명세서는 적절한 경우 실질적으로 동시에 발생하는 임의의 적합한 동작들을 고려한다. 본 명세서에 설명되고 도시된 임의의 적합한 동작들 또는 동작 시퀀스는 운영 시스템, 또는 적절한 경우 커널(kernel)과 같은 다른 절차에 의해 중단, 연기 또는 다른 방법으로 제어될 수 있다. 상기 행위들은 운영 시스템 환경에서 또는 상기 시스템 처리과정 중 모든 또는 상당한 부분을 점유하는 독립형 루틴(stand-alone routines)으로서 동작할 수 있다.
본 명세서는 당해 기술 분야에서 통상의 기술자라면 이해할 수 있는 본 명세서의 예시적인 실시예에 대한 모든 변경, 대체, 변형, 개조 및 수정을 포함한다. 예를 들어, MJPEG-2000, PNG(Portable Network Graphics) 및 그와 유사한 것과 같이 기타 다른 압축 포맷이 사용될 수 있다. 그와 유사하게, 첨부된 특허청구범위는 적절한 경우 당해 기술 분야에서 통상의 기술자라면 이해할 수 있는 본 명세서의 예시적인 실시예에 대한 모든 변경, 대체, 변형, 개조 및 수정을 포함한다.

Claims (14)

  1. 프로세서에 의해, 클라이언트로 전송하기 위한 비디오 출력을 제공하는 애플리케이션을 실행하는 단계;
    상기 프로세서에 의해, 상기 애플리케이션의 상기 비디오 출력을 생성하는 단계 - 상기 비디오 출력은 합성 비디오 이미지를 포함함 -;
    상기 프로세서에 의해, 상기 합성 비디오 이미지에 대응하는 완전한 비디오 프레임을 복수의 고유 프레임 영역으로 분할하는 단계 - 상기 완전한 비디오 프레임의 상기 분할된 고유 영역들 각각은 각각의 소켓 접속부에 대응하고, 분할된 고유 영역들의 수는 각각의 소켓 접속부들의 수에 대응함 -;
    상기 프로세서에 의해, 복수의 개별 비디오 스트림을 렌더링하는 단계 - 상기 개별 비디오 스트림들 각각은 상기 합성 비디오 이미지의 상기 복수의 분할된 고유 프레임 영역의 각각의 고유 프레임 영역에 대응하고, 상기 개별 비디오 스트림들 각각은 각각의 소켓 접속부들에 기록하기 위해 상기 각각의 분할된 고유 프레임 영역에 대응하는 일련의 비디오 프레임을 포함함 -;
    상기 프로세서에 의해, 상기 비디오 프레임들이 생성됨에 따라, 상기 분할된 고유 영역들에 대응하는 상기 복수의 비디오 스트림의 상기 비디오 프레임들을 상기 각각의 소켓 접속부들에 상기 개별 비디오 스트림들로서 선택적으로 기록하는 단계
    를 포함하고,
    상기 분할된 고유 영역들 각각에 대하여, 상기 비디오 프레임들을 선택적으로 기록하는 단계는,
    상기 프로세서에 의해, 현재의 비디오 프레임 영역과 상기 분할된 고유 영역에 대응하는 앞서 렌더링된 프레임 영역 사이의 차이점들이 지각적인 차이 문턱값(perceptual difference threshold)을 초과하는지를 결정하는 단계; 및
    상기 지각적인 차이 문턱값이 초과되는 경우, 상기 프로세서에 의해, 상기 분할된 고유 영역에 대응하는 상기 현재의 비디오 프레임 영역을 상기 각각의 소켓 접속부에 각각의 개별 비디오 스트림으로서만 기록하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 프로세서에 의해, 상기 비디오 스트림들의 상기 비디오 프레임들을 상태 비보존형 압축 포맷(stateless compression format)을 사용하여 인코딩하는 단계
    를 더 포함하는 방법.
  3. 제2항에 있어서,
    상기 상태 비보존형 압축 포맷은 M-JPEG 포맷인, 방법.
  4. 제1항에 있어서,
    상기 소켓 접속부들은 전송 제어 프로토콜(Transmission Control Protocol, TCP) 소켓 접속부들인, 방법.
  5. 하나 이상의 프로세서;
    메모리;
    네트워크 인터페이스; 및
    비일시적 컴퓨터 판독가능 저장 매체(non-transitory computer-readable storage medium)에 저장되고 컴퓨터 실행가능한 명령어들을 포함하는 컴퓨터 프로그램 코드를 포함하고, 상기 명령어들은,
    클라이언트로 전송하기 위한 비디오 출력을 제공하는 애플리케이션을 실행하고;
    상기 애플리케이션의 상기 비디오 출력을 생성하고 - 상기 비디오 출력은 합성 비디오 이미지를 포함함 -;
    상기 합성 비디오 이미지에 대응하는 완전한 비디오 프레임을 복수의 고유 프레임 영역으로 분할하고 - 상기 완전한 비디오 프레임의 상기 분할된 고유 영역들 각각은 각각의 소켓 접속부에 대응하고, 분할된 고유 영역들의 수는 각각의 소켓 접속부들의 수에 대응함 -;
    복수의 개별 비디오 스트림을 렌더링하고 - 상기 개별 비디오 스트림들 각각은 상기 합성 비디오 이미지의 상기 복수의 분할된 고유 프레임 영역의 각각의 고유 프레임 영역에 대응하고, 상기 개별 비디오 스트림들 각각은 각각의 소켓 접속부들에 기록하기 위해 상기 각각의 분할된 고유 프레임 영역에 대응하는 일련의 비디오 프레임을 포함함 -;
    상기 비디오 프레임들이 생성됨에 따라, 상기 분할된 고유 영역들에 대응하는 상기 복수의 비디오 스트림의 상기 비디오 프레임들을 상기 각각의 소켓 접속부들에 상기 개별 비디오 스트림들로서 선택적으로 기록하기 위한 것이고,
    상기 분할된 고유 영역들 각각에 대하여, 상기 비디오 프레임들을 선택적으로 기록하는 것은,
    현재의 비디오 프레임 영역과 상기 분할된 고유 영역에 대응하는 앞서 렌더링된 프레임 영역 사이의 차이점들이 지각적인 차이 문턱값을 초과하는지를 결정하는 것; 및
    상기 지각적인 차이 문턱값이 초과되는 경우, 상기 분할된 고유 영역에 대응하는 상기 현재의 비디오 프레임 영역만을 상기 각각의 소켓 접속부에 각각의 개별 비디오 스트림으로서 기록하는 것;
    을 포함하는, 장치.
  6. 제5항에 있어서,
    상기 컴퓨터 프로그램 코드는, 상기 비디오 스트림들의 상기 비디오 프레임들을 상태 비보존형 압축 포맷을 사용하여 인코딩하기 위한 명령어들을 더 포함하는, 장치.
  7. 제6항에 있어서,
    상기 상태 비보존형 압축 포맷은 M-JPEG 포맷인, 장치.
  8. 제5항에 있어서,
    상기 소켓 접속부들은 전송 제어 프로토콜(TCP) 소켓 접속부들인, 장치.
  9. 제1항에 있어서,
    현재의 비디오 프레임 영역과 상기 분할된 고유 영역에 대응하는 앞서 렌더링된 프레임 영역 사이의 차이점들이 지각적인 차이 문턱값을 초과하는지를 결정하는 단계는,
    상기 프로세서에 의해, 상기 현재의 비디오 프레임 영역 및 상기 앞서 렌더링된 프레임 영역의 각각의 비트맵들의 구성요소 값들에 대해 픽셀별 배타적 논리합 연산(pixel by pixel XOR operation)을 수행하는 단계; 및
    상기 프로세서에 의해, 상기 XOR 연산에 기초하여 각각의 픽셀에서 차이점들이 존재하는지를 결정하는 단계
    를 더 포함하는 방법.
  10. 제1항에 있어서,
    현재의 비디오 프레임 영역과 상기 분할된 고유 영역에 대응하는 앞서 렌더링된 프레임 영역 사이의 차이점들이 지각적인 차이 문턱값을 초과하는지를 결정하는 단계는,
    상기 프로세서에 의해, 상기 합성 비디오 이미지의 상기 고유 영역들을 비교하기 위한 메모리 비교 함수를 실행하여 상기 현재의 비디오 프레임 영역과 상기 분할된 고유 영역에 대응하는 앞서 렌더링된 프레임 영역 사이의 차이점들이 상기 차이 문턱값을 초과하는지를 검출하는 단계
    를 더 포함하는 방법.
  11. 제1항에 있어서,
    현재의 비디오 프레임 영역과 상기 분할된 고유 영역에 대응하는 앞서 렌더링된 프레임 영역 사이의 차이점들이 지각적인 차이 문턱값을 초과하는지를 결정하는 단계는,
    상기 프로세서에 의해, 상기 현재의 비디오 프레임 영역 및 상기 앞서 렌더링된 프레임 영역의 각각의 비트맵들의 구성요소 값들에 대해 픽셀별 비교를 수행하는 단계;
    상기 프로세서에 의해, 상기 각각의 비트맵들의 구성요소 값들 사이의 거리값을 계산하는 단계;
    상기 프로세서에 의해, 상기 거리값들의 평균(average) 또는 평균(mean) 중 하나를 결정하는 단계;
    상기 프로세서에 의해, 상기 거리값들의 평균(average) 또는 평균(mean) 중 하나를 문턱 거리값과 비교하는 단계; 및
    상기 프로세서에 의해, 상기 비교에 기초하여 상기 앞서 렌더링된 프레임 영역과 상기 현재의 비디오 프레임 영역의 차이점들을 결정하는 단계;
    를 더 포함하는 방법.
  12. 컴퓨터 프로그래밍 명령어들을 저장한 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 명령어들은,
    클라이언트로 전송하기 위한 비디오 출력을 제공하는 애플리케이션을 실행하고;
    상기 애플리케이션의 상기 비디오 출력을 생성하고 - 상기 비디오 출력은 합성 비디오 이미지를 포함함 -;
    상기 합성 비디오 이미지에 대응하는 완전한 비디오 프레임을 복수의 고유 프레임 영역으로 분할하고 - 상기 완전한 비디오 프레임의 상기 분할된 고유 영역들 각각은 각각의 소켓 접속부에 대응하고, 분할된 고유 영역들의 수는 각각의 소켓 접속부들의 수에 대응함 -;
    복수의 개별 비디오 스트림을 렌더링하고 - 상기 개별 비디오 스트림들 각각은 상기 합성 비디오 이미지의 상기 복수의 분할된 고유 영역의 각각의 고유 영역에 대응하고, 상기 개별 비디오 스트림들 각각은 각각의 소켓 접속부들에 기록하기 위해 상기 각각의 분할된 고유 프레임 영역에 대응하는 일련의 비디오 프레임을 포함함 -;
    상기 비디오 프레임들이 생성됨에 따라, 상기 분할된 고유 영역들에 대응하는 상기 복수의 비디오 스트림의 상기 비디오 프레임들을 상기 각각의 소켓 접속부들에 상기 개별 비디오 스트림들로서 선택적으로 기록하기 위한 것이고,
    상기 분할된 고유 영역들 각각에 대하여, 상기 비디오 프레임들을 선택적으로 기록하는 것은,
    현재의 비디오 프레임 영역과 상기 분할된 고유 영역에 대응하는 앞서 렌더링된 프레임 영역 사이의 차이점들이 지각적인 차이 문턱값을 초과하는지를 결정하는 것; 및
    상기 지각적인 차이 문턱값이 초과되는 경우, 상기 분할된 고유 영역에 대응하는 상기 현재의 비디오 프레임 영역만을 상기 각각의 소켓 접속부에 각각의 개별 비디오 스트림으로서 기록하는 것;
    을 포함하는, 비일시적 컴퓨터 판독가능 저장 매체.
  13. 제12항에 있어서,
    상기 컴퓨터 프로그래밍 명령어들은 추가로,
    상기 클라이언트로부터, 상기 복수의 비디오 스트림 각각에 대한 개별 요청을 수신하기 위한 것인 비일시적 컴퓨터 판독가능 저장 매체.
  14. 제13항에 있어서,
    상기 컴퓨터 프로그래밍 명령어들은 추가로,
    상기 클라이언트로, 상기 복수의 비디오 스트림에 대한 액세스를 제공하는 출력을 송신하기 위한 것인 비일시적 컴퓨터 판독가능 저장 매체.
KR1020147017194A 2010-10-19 2011-10-19 상태 비보존형 압축을 사용하는 합성 비디오 스트리밍 KR101697411B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/907,906 2010-10-19
US12/907,906 US9998749B2 (en) 2010-10-19 2010-10-19 Composite video streaming using stateless compression
PCT/US2011/056906 WO2012054618A2 (en) 2010-10-19 2011-10-19 Composite video streaming using stateless compression

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020137012793A Division KR101447401B1 (ko) 2010-10-19 2011-10-19 상태 비보존형 압축을 사용하는 합성 비디오 스트리밍

Publications (2)

Publication Number Publication Date
KR20140088624A KR20140088624A (ko) 2014-07-10
KR101697411B1 true KR101697411B1 (ko) 2017-01-17

Family

ID=45934123

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020147017194A KR101697411B1 (ko) 2010-10-19 2011-10-19 상태 비보존형 압축을 사용하는 합성 비디오 스트리밍
KR1020137012793A KR101447401B1 (ko) 2010-10-19 2011-10-19 상태 비보존형 압축을 사용하는 합성 비디오 스트리밍

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020137012793A KR101447401B1 (ko) 2010-10-19 2011-10-19 상태 비보존형 압축을 사용하는 합성 비디오 스트리밍

Country Status (9)

Country Link
US (2) US9998749B2 (ko)
EP (1) EP2630804A4 (ko)
JP (2) JP5567744B2 (ko)
KR (2) KR101697411B1 (ko)
CN (1) CN103329553B (ko)
AU (1) AU2011317052B2 (ko)
CA (1) CA2814809C (ko)
NZ (2) NZ608999A (ko)
WO (1) WO2012054618A2 (ko)

Families Citing this family (52)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7519274B2 (en) 2003-12-08 2009-04-14 Divx, Inc. File format for multiple track digital data
US8472792B2 (en) 2003-12-08 2013-06-25 Divx, Llc Multimedia distribution system
WO2007106844A2 (en) 2006-03-14 2007-09-20 Divx, Inc. Federated digital rights management scheme including trusted systems
JP5513400B2 (ja) 2007-11-16 2014-06-04 ソニック アイピー, インコーポレイテッド マルチメディアファイルのための階層的で簡略なインデックス構造体
US8997161B2 (en) * 2008-01-02 2015-03-31 Sonic Ip, Inc. Application enhancement tracks
WO2010080911A1 (en) 2009-01-07 2010-07-15 Divx, Inc. Singular, collective and automated creation of a media guide for online content
CA2782825C (en) 2009-12-04 2016-04-26 Divx, Llc Elementary bitstream cryptographic material transport systems and methods
US8572478B2 (en) * 2010-04-12 2013-10-29 Google Inc. Row heights in electronic documents
US8914534B2 (en) 2011-01-05 2014-12-16 Sonic Ip, Inc. Systems and methods for adaptive bitrate streaming of media stored in matroska container files using hypertext transfer protocol
US8818171B2 (en) 2011-08-30 2014-08-26 Kourosh Soroushian Systems and methods for encoding alternative streams of video for playback on playback devices having predetermined display aspect ratios and network connection maximum data rates
US9955195B2 (en) 2011-08-30 2018-04-24 Divx, Llc Systems and methods for encoding and streaming video encoded using a plurality of maximum bitrate levels
US9467708B2 (en) 2011-08-30 2016-10-11 Sonic Ip, Inc. Selection of resolutions for seamless resolution switching of multimedia content
US8964977B2 (en) 2011-09-01 2015-02-24 Sonic Ip, Inc. Systems and methods for saving encoded media streamed using adaptive bitrate streaming
US8909922B2 (en) 2011-09-01 2014-12-09 Sonic Ip, Inc. Systems and methods for playing back alternative streams of protected content protected using common cryptographic information
US20130179199A1 (en) 2012-01-06 2013-07-11 Rovi Corp. Systems and methods for granting access to digital content using electronic tickets and ticket tokens
WO2013154522A2 (en) 2012-04-09 2013-10-17 Empire Technology Development Llc Processing load distribution
US9197685B2 (en) 2012-06-28 2015-11-24 Sonic Ip, Inc. Systems and methods for fast video startup using trick play streams
US9143812B2 (en) 2012-06-29 2015-09-22 Sonic Ip, Inc. Adaptive streaming of multimedia
US10452715B2 (en) 2012-06-30 2019-10-22 Divx, Llc Systems and methods for compressing geotagged video
WO2014015110A1 (en) 2012-07-18 2014-01-23 Verimatrix, Inc. Systems and methods for rapid content switching to provide a linear tv experience using streaming content distribution
US9576340B2 (en) 2012-07-30 2017-02-21 Nvidia Corporation Render-assisted compression for remote graphics
US8997254B2 (en) 2012-09-28 2015-03-31 Sonic Ip, Inc. Systems and methods for fast startup streaming of encrypted multimedia content
US8914836B2 (en) 2012-09-28 2014-12-16 Sonic Ip, Inc. Systems, methods, and computer program products for load adaptive streaming
US9264475B2 (en) 2012-12-31 2016-02-16 Sonic Ip, Inc. Use of objective quality measures of streamed content to reduce streaming bandwidth
US9313510B2 (en) 2012-12-31 2016-04-12 Sonic Ip, Inc. Use of objective quality measures of streamed content to reduce streaming bandwidth
US9191457B2 (en) 2012-12-31 2015-11-17 Sonic Ip, Inc. Systems, methods, and media for controlling delivery of content
US10397292B2 (en) 2013-03-15 2019-08-27 Divx, Llc Systems, methods, and media for delivery of content
US9906785B2 (en) 2013-03-15 2018-02-27 Sonic Ip, Inc. Systems, methods, and media for transcoding video data according to encoding parameters indicated by received metadata
US9344517B2 (en) 2013-03-28 2016-05-17 Sonic Ip, Inc. Downloading and adaptive streaming of multimedia content to a device with cache assist
US9094737B2 (en) 2013-05-30 2015-07-28 Sonic Ip, Inc. Network video streaming with trick play based on separate trick play files
US9247317B2 (en) 2013-05-30 2016-01-26 Sonic Ip, Inc. Content streaming with client device trick play index
US9967305B2 (en) 2013-06-28 2018-05-08 Divx, Llc Systems, methods, and media for streaming media content
JP5504370B1 (ja) * 2013-10-31 2014-05-28 株式会社 ディー・エヌ・エー 動画をクライアント端末に表示させるサーバ及び方法
US9343112B2 (en) 2013-10-31 2016-05-17 Sonic Ip, Inc. Systems and methods for supplementing content from a server
US20160271495A1 (en) * 2014-01-09 2016-09-22 Square Enix Holdings Co., Ltd. Method and system of creating and encoding video game screen images for transmission over a network
US20150265921A1 (en) * 2014-03-21 2015-09-24 Google Inc. Game-Aware Compression Algorithms for Efficient Video Uploads
US9866878B2 (en) 2014-04-05 2018-01-09 Sonic Ip, Inc. Systems and methods for encoding and playing back video at different frame rates using enhancement layers
US10660533B2 (en) * 2014-09-30 2020-05-26 Rapsodo Pte. Ltd. Remote heart rate monitoring based on imaging for moving subjects
US11743402B2 (en) * 2015-02-13 2023-08-29 Awes.Me, Inc. System and method for photo subject display optimization
US20170249785A1 (en) * 2016-02-29 2017-08-31 Vreal Inc Virtual reality session capture and replay systems and methods
US10075292B2 (en) 2016-03-30 2018-09-11 Divx, Llc Systems and methods for quick start-up of playback
CN109891906B (zh) * 2016-04-08 2021-10-15 维斯比特股份有限公司 递送360°视频流的系统和方法
US10575007B2 (en) 2016-04-12 2020-02-25 Microsoft Technology Licensing, Llc Efficient decoding and rendering of blocks in a graphics pipeline
US10148989B2 (en) 2016-06-15 2018-12-04 Divx, Llc Systems and methods for encoding video content
US11197010B2 (en) * 2016-10-07 2021-12-07 Microsoft Technology Licensing, Llc Browser-based video decoder using multiple CPU threads
US10498795B2 (en) 2017-02-17 2019-12-03 Divx, Llc Systems and methods for adaptive switching between multiple content delivery networks during adaptive bitrate streaming
US11169824B2 (en) 2018-03-01 2021-11-09 Vreal Inc Virtual reality replay shadow clients systems and methods
CN110278459A (zh) * 2018-03-16 2019-09-24 上海小麦互动企业发展有限公司 内容控制系统及其控制方法
US10924625B2 (en) * 2019-03-20 2021-02-16 Xerox Corporation Dynamic compression acceleration using real-time image data entropy analysis
US11182949B2 (en) * 2019-07-25 2021-11-23 Dreamworks Animation Llc Pack tile
US11330030B2 (en) * 2019-07-25 2022-05-10 Dreamworks Animation Llc Network resource oriented data communication
CN112929673B (zh) * 2021-01-19 2022-04-01 Tcl华星光电技术有限公司 解码方法、解码设备及可读存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004120497A (ja) * 2002-09-27 2004-04-15 Ricoh Co Ltd シーンチェンジ検出装置、シーンチェンジ検出方法、画像処理装置、プログラム及び記録媒体
WO2010111097A1 (en) 2009-03-23 2010-09-30 Onlive, Inc. System and method for encoding video using a selected tile and tile rotation pattern

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FI70662C (fi) 1984-12-14 1986-09-24 Valtion Teknillinen Videokomprimeringsfoerfarande
US6208761B1 (en) * 1995-07-11 2001-03-27 Telefonaktiebolaget Lm Ericsson (Publ) Video coding
US7123772B2 (en) 2001-03-28 2006-10-17 Texas Instruments Incorporated Image compression by differences within a strip
JP3615905B2 (ja) * 1997-05-12 2005-02-02 株式会社東京放送 デジタル映像分配装置
US6058210A (en) 1997-09-15 2000-05-02 Xerox Corporation Using encoding cost data for segmentation of compressed image sequences
US6388584B1 (en) * 2000-03-16 2002-05-14 Lucent Technologies Inc. Method and apparatus for data compression of network packets
JP2002135758A (ja) * 2000-10-20 2002-05-10 Yazaki Corp 車載用映像データ伝送システム、車載用映像データ受信装置、車載用映像データ送信装置
US7245405B2 (en) * 2001-04-11 2007-07-17 Hughes Network Systems, Llc Method and system for performing stateless compression of messages
US7054367B2 (en) 2001-12-31 2006-05-30 Emc Corporation Edge detection based on variable-length codes of block coded video
US20030177255A1 (en) 2002-03-13 2003-09-18 Yun David C. Encoding and decoding system for transmitting streaming video data to wireless computing devices
CN1650622B (zh) * 2002-03-13 2012-09-05 图象公司 用于数字重新灌录或修改电影或其他图像序列数据的系统和方法
CN1324886C (zh) 2002-08-30 2007-07-04 联发科技股份有限公司 数字视频数据的处理装置及方法
US7333633B2 (en) * 2003-10-31 2008-02-19 Plexon, Inc. Inter-frame video techniques for behavioral analysis of laboratory animals
US7231632B2 (en) 2004-04-16 2007-06-12 Apple Computer, Inc. System for reducing the number of programs necessary to render an image
US7899864B2 (en) 2005-11-01 2011-03-01 Microsoft Corporation Multi-user terminal services accelerator
JP4577267B2 (ja) * 2006-05-17 2010-11-10 株式会社日立製作所 シンクライアントシステム
US7623134B1 (en) 2006-06-15 2009-11-24 Nvidia Corporation System and method for hardware-based GPU paging to system memory
US8005149B2 (en) 2006-07-03 2011-08-23 Unisor Design Services Ltd. Transmission of stream video in low latency
TWI328198B (en) 2006-12-11 2010-08-01 Via Tech Inc Gpu context switching system
US20090079746A1 (en) 2007-09-20 2009-03-26 Apple Inc. Switching between graphics sources to facilitate power management and/or security
US8319781B2 (en) 2007-11-23 2012-11-27 Pme Ip Australia Pty Ltd Multi-user multi-GPU render server apparatus and methods
US8095680B2 (en) * 2007-12-20 2012-01-10 Telefonaktiebolaget Lm Ericsson (Publ) Real-time network transport protocol interface method and apparatus
JP5071727B2 (ja) * 2008-03-28 2012-11-14 日本電気株式会社 画面データ送信装置、画面データ送信方法及び画面データ送信プログラム
JP5163233B2 (ja) * 2008-03-31 2013-03-13 富士通株式会社 情報処理装置、プログラム、方法、処理回路及び通信システム
US8393008B2 (en) 2008-05-21 2013-03-05 Microsoft Corporation Hardware-based output protection of multiple video streams
US8810590B2 (en) 2008-07-11 2014-08-19 Advanced Micro Devices, Inc. Method and apparatus for spatial binning on a GPU and global path planning to avoid spatially binned objects
CN102483777A (zh) * 2008-10-10 2012-05-30 S·E·特纳 到达远程用户的内容数据流的受控传递
US8686921B2 (en) 2008-12-31 2014-04-01 Intel Corporation Dynamic geometry management of virtual frame buffer for appendable logical displays
US20100226441A1 (en) * 2009-03-06 2010-09-09 Microsoft Corporation Frame Capture, Encoding, and Transmission Management
US8605783B2 (en) * 2009-05-22 2013-12-10 Microsoft Corporation Composite video generation
US9723319B1 (en) 2009-06-01 2017-08-01 Sony Interactive Entertainment America Llc Differentiation for achieving buffered decoding and bufferless decoding
JP5413344B2 (ja) * 2010-09-27 2014-02-12 カシオ計算機株式会社 撮像装置、画像合成方法及びプログラム

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004120497A (ja) * 2002-09-27 2004-04-15 Ricoh Co Ltd シーンチェンジ検出装置、シーンチェンジ検出方法、画像処理装置、プログラム及び記録媒体
WO2010111097A1 (en) 2009-03-23 2010-09-30 Onlive, Inc. System and method for encoding video using a selected tile and tile rotation pattern

Also Published As

Publication number Publication date
WO2012054618A3 (en) 2012-06-14
AU2011317052B2 (en) 2015-04-09
US20120093214A1 (en) 2012-04-19
CN103329553A (zh) 2013-09-25
EP2630804A4 (en) 2015-11-04
CN103329553B (zh) 2017-02-15
US20180270496A1 (en) 2018-09-20
CA2814809A1 (en) 2012-04-26
JP5567744B2 (ja) 2014-08-06
JP2014222894A (ja) 2014-11-27
WO2012054618A2 (en) 2012-04-26
NZ630857A (en) 2015-02-27
NZ608999A (en) 2014-10-31
US9998749B2 (en) 2018-06-12
KR20130107315A (ko) 2013-10-01
JP2013545376A (ja) 2013-12-19
CA2814809C (en) 2017-02-14
KR20140088624A (ko) 2014-07-10
JP5954802B2 (ja) 2016-07-20
KR101447401B1 (ko) 2014-10-07
AU2011317052A1 (en) 2013-05-02
EP2630804A2 (en) 2013-08-28

Similar Documents

Publication Publication Date Title
KR101697411B1 (ko) 상태 비보존형 압축을 사용하는 합성 비디오 스트리밍
US10230565B2 (en) Allocation of GPU resources across multiple clients
US9075560B2 (en) Real-time compression with GPU/CPU
AU2015203292B2 (en) Composite video streaming using stateless compression
US10237566B2 (en) Video decoding using point sprites
US9384276B1 (en) Reducing latency for remotely executed applications
Tang et al. Hybrid remote display protocol for mobile thin client computing
Kimball A Scalable Streaming Framework for Video-Driven Collaborative Visualization Environments

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20191227

Year of fee payment: 4