KR101443070B1 - 짧은 대기 시간의 전송 프로토콜을 위한 방법 및 시스템 - Google Patents

짧은 대기 시간의 전송 프로토콜을 위한 방법 및 시스템 Download PDF

Info

Publication number
KR101443070B1
KR101443070B1 KR1020127011083A KR20127011083A KR101443070B1 KR 101443070 B1 KR101443070 B1 KR 101443070B1 KR 1020127011083 A KR1020127011083 A KR 1020127011083A KR 20127011083 A KR20127011083 A KR 20127011083A KR 101443070 B1 KR101443070 B1 KR 101443070B1
Authority
KR
South Korea
Prior art keywords
output
server
data
queue
video
Prior art date
Application number
KR1020127011083A
Other languages
English (en)
Other versions
KR20120082434A (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 KR20120082434A publication Critical patent/KR20120082434A/ko
Application granted granted Critical
Publication of KR101443070B1 publication Critical patent/KR101443070B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/14Digital output to display device ; Cooperation and interconnection of the display device with other functional units
    • G06F3/1454Digital output to display device ; Cooperation and interconnection of the display device with other functional units involving copying of the display data of a local workstation or window to a remote workstation or window so that an actual copy of the data is displayed simultaneously on two or more displays, e.g. teledisplay
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/35Unequal or adaptive error protection, e.g. by providing a different level of protection according to significance of source information or by adapting the coding according to the change of transmission channel characteristics
    • H03M13/356Unequal error protection [UEP]
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3761Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 using code combining, i.e. using combining of codeword portions which may have been transmitted separately, e.g. Digital Fountain codes, Raptor codes or Luby Transform [LT] codes
    • 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
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2320/00Control of display operating conditions
    • G09G2320/10Special adaptations of display systems for operation with variable images
    • G09G2320/103Detection of image changes, e.g. determination of an index representative of the image change
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2340/00Aspects of display data processing
    • G09G2340/02Handling of images in compressed format, e.g. JPEG, MPEG
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2350/00Solving problems of bandwidth in display systems
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2370/00Aspects of data communication
    • G09G2370/02Networking aspects
    • G09G2370/022Centralised management of display operation, e.g. in a server instead of locally
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/0001Systems modifying transmission characteristics according to link quality, e.g. power backoff
    • H04L1/0009Systems modifying transmission characteristics according to link quality, e.g. power backoff by adapting the channel coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/0001Systems modifying transmission characteristics according to link quality, e.g. power backoff
    • H04L1/0014Systems modifying transmission characteristics according to link quality, e.g. power backoff by adapting the source coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0056Systems characterized by the type of code used
    • H04L1/0057Block codes

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Human Computer Interaction (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
  • Information Transfer Between Computers (AREA)
  • Digital Computer Display Output (AREA)

Abstract

컴퓨터가 생성한 출력, 특히 그래픽 출력을 제공하는 방법 및 시스템이 개시된다. 본 시스템은 디지털 정보를 운반하도록 구성된 네트워크를 포함한다. 본 시스템은 네트워크와 통신하는 서버를 포함하고, 서버는 애플리케이션과 클라우드 엔진 모듈을 실행하도록 구성된다. 애플리케이션은 그래픽 출력을 제공한다. 출력 캡쳐링 및 인코딩 엔진 모듈은 서버 상에서 애플리케이션으로부터의 그래픽 출력을 인터셉트하도록 더 구성된다. 출력 캡쳐링 및 인코딩 엔진 모듈은 그래픽 출력을 그래픽 명령 및 비디오 코덱 데이터 중 적어도 하나로 변환하도록 더 구성된다. 출력 캡쳐링 및 인코딩 엔진 모듈은 변환된 출력을 네트워크를 통해 전송하도록 더 구성된다. 본 시스템은 네트워크를 통해 서버와 통신하는 클라이언트를 포함하고, 클라이언트는 그래픽 및 비디오 디코딩 및 렌더링 모듈을 실행하도록 구성된다. 그래픽 및 비디오 디코딩 및 렌더링 모듈은 변환되고 전송된 출력을 수신하는 것에 응답하여 그래픽 출력을 렌더링하도록 구성된다. 그래픽 및 비디오 디코딩 및 렌더링 모듈은 그래픽 및 비디오를 인터셉트하고 클라이언트에서 입력을 렌더링하도록 구성된다. 그래픽 및 비디오 디코딩 및 렌더링 모듈은 인터셉트된 사용자 입력을 출력 캡쳐링 및 인코딩 엔진 모듈로 전송하도록 구성된다.

Description

짧은 대기 시간의 전송 프로토콜을 위한 방법 및 시스템{METHOD AND SYSTEM FOR LOW-LATENCY TRANSFER PROTOCOL}
[관련 출원의 교차 참조]
본 출원은 전문이 본 명세서에 참조로서 편입되는 2009년 9월 29일 출원된 미국 특허 출원 12/569,876의 우선권을 주장한다.
VDI(Virtual Desktop Infrastructure)는, 네트워크로 저성능의 클라이언트(thin client)를 통해 완전한 PC 데스크탑 경험을 최종 사용자에게 제공하면서, 데이터 센터에서 테스크탑 가상 환경을 호스팅하고 관리하는 서버-클라이언트 컴퓨팅 모델이다.
일부 종래의 솔루션은, Microsoft의 Terminal Services 또는 Citrix의 애플리케이션 서버, 블레이드 서버와 같은 전통적인 공유 데스크탑 시스템을 향하여 인커밍 클라이언트 세션을 개별적인 사용되지 않은 물리적 데스크탑 컴퓨터로 스위칭하는 능력을 추가한다.
VDI 솔루션은 RDP 또는 ICA와 같은 프로토콜을 이용하여 클라이언트 디스플레이 장치로 네트워크에 걸쳐 스크린 업데이트를 전송하는 서버에서의 윈도우즈 인스턴스의 원격 실행을 포함한다. 그러나, 이전의 프로토콜은 100 ms 마다 대략 한 번씩 비디오 프레임 버퍼를 클라이언트로 흘러가게 하며, 이는 현대의 그래픽이 강화된 애플리케이션 및 오디오-비디오 동기화를 필요로 하는 애플리케이션에 대하여 부적합하다.
VDI 솔루션을 제공하는 데에는 여러 종래의 해결책이 있다.
"스크린 스크랩(screen scrape)" 방법은 프로토콜에 의해 호스트 상의 "스크린"에 그려지고 클라이언트에 전송된 그래픽 요소를 "스크랩하는 것(scrapping)"을 포함한다. 제1 예에서, 클라이언트는 서버에 접촉하여, 프레임 버퍼로부터 스크린의 새로운 "스냅샷(snapshot)"을 풀(pull)할 수 있다. 제2 예에서, 서버는 클라이언트에게 스크린 활동을 연속하여 푸시(push)할 수 있다. 이는 프레임 버퍼 레벨, GDI/윈도우 매니저 레벨, 또는 그 양자의 조합일 수 있다. 양자의 예는 자주 사용되는 그래픽 요소에 대하여 클라이언트에서 캐싱(caching)을 이용한다.
스크린 스크랩 방법은 서버측 멀티미디어 요소가 클라이언트 장치로 원시(native) 포맷으로 전송되는 "멀티미디어 리디렉션(multimedia redirection)"과 결합될 수 있다. 클라이언트는 멀티미디어 스트림을 지역적으로 재생하고, 이들을 스크린 상에서 적절한 위치에 동적으로 삽입할 수 있다.
이 접근 방법은, (1) 클라이언트가 멀티미디어를 렌더링하기 위한 기술적인 능력 및 하드웨어를 가지는 경우, 그리고 (2) 클라이언트가 멀티미디어 컨텐츠를 적절하게 렌더링하도록 설치된 적절한 코덱을 가지는 경우 적합하다. 실제로는, 이는 클라이언트가 "너무 저성능일(too thin)" 수 없다는 것을 의미한다.
서버 그래픽 시스템 가상 현실화(virtualization)는 호스트의 그래픽 시스템을 "가상 현실화한다(virtualize)". 호스트 상의 소프트웨어는 모든 가능한 그래픽 레이어(GDI, WPF, DirectX 등)를 캡쳐하고, 이를 가능한 한 빨리 클라이언트에 전송된 원격 프로토콜 스트림(예를 들어, RDP)으로 렌더링한다. 이는 클라이언트 장치에 관계 없이(심지어 매우 저급의 또는 매우 저성능의 클라이언트), 로컬 성능에 매우 가까운 경험을 클라이언트에 제공한다.
서버 및 클라이언트에서의 하드웨어 가속은 네트워크에 걸친 전송을 위하여 스크린을 캡쳐하는 호스트 상의 전용 칩셋을 이용한다. 클라이언트 장치는 렌더링을 위해 매칭하는 전용 칩셋을 가진다.
실시간으로 네트워크를 통해 그래픽 정보를 원격 디스플레이하는데 있어서의 문제점을 해결하는 전술한 종래의 접근 방법은, 매우 동적인 그래픽 및 풀모션(full-motion) 비디오를 위한 짧은 대기 시간과 허용가능한 레벨을 갖는 품질 및 상호작용을 전달하지 못한다. 문제점은 다음을 포함한다:
- 풀 모션 비디오에 대한 제한된 지원.
- 상대적으로 짧은 거리에서 작업할 때의 상당한 내재적인 대기 시간(WAN).
- 상대적으로 높은 레벨의 패킷 손실, 지터 및 대기 시간을 갖는 신뢰성 없는 네트워크 환경(예를 들어, 인터넷)에서의 열악한 성능 및 품질.
- 네트워크에서 상당한 데이터 스트림이 존재할 때 사용자 경험의 대기 시간 및 품질에 대한 트래픽의 우선 순위 결정에 대한 무능력.
- 오디오 및 비디오 스트림의 일치하지 않는 동기화.
- 백그라운드에 모두 추가되는 풀 바디(full-body) 감지, 비디오, 음성, 센서, 모션과 같은 다양한 입력 및 출력을 처리하는 데 있어서의 무능력.
전술한 문제점은, 부분적으로는, Microsoft RDP, Citrix ICA, AT&T의 VNC 등과 같은 종래의 솔루션이 비디오 및 매우 인터액티브한 풍부한 그래픽 유저 인터페이스가 사용자의 컴퓨터 상의 어디에나 있는 것이기 전에 설계되었기 때문에 발생된다.
따라서, 원격 컴퓨팅을 위한 개선된 전송 프로토콜에 대한 요구가 있다.
본 개시 내용의 특징 및 목적은 유사한 도면 부호가 유사한 구성 요소를 나타내는 다음의 첨부된 도면과 관련한 하기의 발명을 실시하기 위한 구체적인 내용을 참조하여 더욱 명확해질 것이다:
도 1은 원격 컴퓨팅을 위한 개선된 전송 프로토콜을 제공하는 예시적인 시스템을 도시한다.
도 2는 원격 컴퓨팅을 위한 개선된 전송 프로토콜을 제공하는 예시적인 서버를 도시한다.
도 3은 원격 컴퓨팅을 위한 개선된 전송 프로토콜을 제공하는 예시적인 클라이언트를 도시한다.
도 4는 원격 컴퓨팅을 위한 개선된 전송 프로토콜을 제공하는 서버에서 실행되는 예시적인 출력 캡쳐 및 인코딩 엔진을 도시한다.
도 5는 원격 컴퓨팅을 위한 개선된 전송 프로토콜을 제공하는 클라이언트에서 실행되는 예시적인 디코딩 및 렌더링 엔진을 도시한다.
도 6은 개선된 전송 프로토콜에 따라 캡쳐하고, 인코딩하고, 전송하기 위하여 서버에 의해 실행되는 예시적인 절차를 도시한다.
도 7은 개선된 전송 프로토콜에 따라 수신하고, 디코딩하고, 렌더링하기 위+하여 클라이언트에 의해 실행되는 예시적인 절차를 도시한다.
도 8은 원격 컴퓨팅을 위한 개선된 전송 프로토콜을 제공하는 예시적인 네트워크 스택을 도시한다.
도 9는 영역 검출기 모듈을 제공하기 위하여 서버에 의해 실행되는 예시적인 절차를 도시한다.
도 10은 간단한 모션 검출기 모듈을 제공하기 위하여 서버에 의해 실행되는 예시적인 절차를 도시한다.
도 11a는 제1 모션 검출의 예시적인 스크린샷을 도시한다.
도 11b는 제2 모션 검출의 예시적인 스크린샷을 도시한다.
도 11c는 제3 모션 검출의 예시적인 스크린샷을 도시한다.
도 12는 원격 컴퓨팅을 위한 개선된 전송 프로토콜을 제공하는 예시적인 비디오 인코더를 도시한다.
도 13은 그래픽 출력을 전처리하기 위한 예시적인 절차를 도시한다.
도 14는 프로그레시브 픽쳐 인코더를 제공하는 예시적인 절차를 도시한다.
도 15a는 예시적인 패킷 구조를 도시한다.
도 15b는 예시적인 청크 포맷을 도시한다.
도 15c는 신뢰 및 비신뢰 채널에 대한 예시적인 청크 포맷을 도시한다.
도 15d는 FEC 채널에 대한 예시적인 청크 포맷을 도시한다.
도 15e는 예시적인 핑(ping) 청크 포맷을 도시한다.
도 15f는 예시적인 핑 응답 청크를 도시한다.
도 15g는 핸드쉐이크 시컨스를 도시한다.
도 15h는 예시적인 init 청크를 도시한다.
도 15i는 예시적인 init_ack 청크를 도시한다.
도 15j는 예시적인 cookie_echo 청크를 도시한다.
도 15k는 예시적인 cookie_ack 청크를 도시한다.
도 15l은 예시적인 연결 셧다운 시컨스를 도시한다.
도 15m은 예시적인 셧다운 청크를 도시한다.
도 15n은 예시적인 shutdown_ack 청크를 도시한다.
도 15o는 예시적인 shutdown_complete 청크를 도시한다.
컴퓨터에 의해 생성된 정보를, 신뢰성 없는 패킷 스위칭 통신 네트워크를 통해 여러 인터액티브 디스플레이 장치로 짧은 대기 시간으로 실시간 전송하는 방법 및 시스템이 제공된다. 컴퓨터 출력 정보는 그래픽 출력, 오디오 신호, 데이터, USB 인터페이스 신호, 프린트 스풀 등과 같은 서버 상에서 실행하는 애플리케이션에 의해 생성된다. 본 시스템은 네트워크를 통해 여러 최종 사용자 장치로 애플리케이션에 의해 생성된 컴퓨터 출력 정보의 인터액티브 전송을 가능하게 한다. 넓은 범위의 최종 사용자 장치는 저가의 저성능 클라이언트로부터 고성능 워크스테이션까지, 각 최종 사용자가 상이한 양의 허용가능한 대역폭을 가지는 시스템에 의해 지원될 수 있다. 여러 사용자는 최종 사용자 장치 상에서 동일한 그래픽 정보와 동시에 상호작용할 수 있다.
본 시스템은 최종 사용자 장치에서 캡쳐된 상호작용 데이터를 서버로 다시 전송하고, 애플리케이션에 의해 처리를 위하여 입력을 동기화한다. 그 다음, 본 시스템은 그래픽과 다른 종류의 서버 출력을 캡쳐하여, 출력 정보를 인코딩하여 최종 사용자 장치에 전송하도록 다양한 인코딩 스킴을 적용한다.
본 시스템은 종래의 시스템과 상당히 다른 설계 가정 및 목표(짧은 대기 시간, 풀 모션 비디오, 비신뢰(unreliable) 네트워크, 상대적으로 높은 네트워크 대역폭 등)를 이용한다. 유사한 접근 방법은 극도로 짧은 대기 시간(50 ms 이하)에서의 인터넷을 통한 다중 고품질 오디오 스트림의 전송과 이러한 스트림의 정밀한 동기화를 요구하는 분산된 멀티플레이어 실시간 재밍(jamming) 시스템에서 사용되었다. 이러한 접근 방법은 모두 본 명세서에 참조로서 편입되는 다음을 포함하는 다양한 문헌에서 논의된다:
2006년 3월 22일 출원되고, "Method and system for low latency high quality music conferencing"의 발명의 명칭을 갖는 미국 가특허 출원 60/785,145의 우선권을 주장하는, 2007년 3월 13일 출원되고, "Method and System for Low Latency High Quality Music Conferencing"의 발명의 명칭을 갖는 미국 특허 출원 11/717,606;
"Virtual Jamming. Four Fixes for the Major Problem Facing Musicians Who Play Together on the Web: Lag" http://www.spectrum.ieee.org/computing/software/virtual-jamming (2009년 9월 10일 최종 검색); 및
2007년 1월 31일 출원되고 "Method and System for Low Latency High Quality Music Conferencing"의 발명의 명칭을 갖는 미국 가특허 출원 60/887,555의 우선권을 주장하는, 2008년 1월 31일 출원되고 "Method and System for Precise Synchronization of Audio and Video Streams During a Distributed Communication Session With Multiple Participants"의 발명의 명칭을 갖는 미국 특허 출원 12/024,089.
도 1은 원격 컴퓨팅을 위한 개선된 트로토콜을 제공하기 위한 예시적인 시스템을 도시한다. 본 시스템은 지리적으로 분포되어, 인터넷과 같은 광대역 네트워크를 통해 통신한다.
본 시스템은 운영 체계 상에서 소프트웨어 애플리케이션(113)의 인스턴스를 실행하는 물리적 또는 가상 서버(112)를 포함한다. 예를 들어, 운영 체계는 Windows, Mac OS X, UNIX, Linux 등일 수 있다.
애플리케이션(113)의 출력은, 후술되는 바와 같이, 캡쳐링 및 인코딩 엔진(114)에 의해 캡쳐된다. 예를 들어, 출력은 실행 중인 애플리케이션(113)에 의해 제공되는 사용자 인터페이스의 그래픽 출력일 수 있다.
다른 종류의 출력은 엔진(114)에 의해 캡쳐될 수 있다. 예를 들어, 오디오 출력은 시스템을 통한 인코딩 및 전송을 위하여 캡쳐될 수 있다.
서버(112) 상에서 실행되는 엔진(114)은, 후술되는 바와 같이, 짧은 대기 시간의 하이브리드 네트워크 스택을 이용하여 광대역 네트워크(111)를 통한 전송을 위하여 애플리케이션의 출력을 캡쳐하고 인코딩한다. 예를 들어, 네트워크는 IP 기반의 네트워크, 휴대 전화 네트워크, 3G 또는 4G 무선 네트워크, 케이블 등일 수 있다.
전송은 네트워크 상에서 부하를 감소시키기 위하여, 멀티캐스팅(사용가능하다면)을 이용하여 네트워크(111) 상에서 다중 스트림(109, 110)을 통하여 다중 수신기로 동시에 중계될 수 있다. 네트워크(111)의 사용 가능한 대역폭에 따라, 임의의 개수의 수신기가 본 시스템에 존재할 수 있다는 것이 이해될 것이다. 본 시스템은 사용자의 경험을 개선하기 위하여, 대기 시간을 최소화하도록 구성된다. 예를 들어, 수신기가 불충분한 대역폭을 가진다면(네트워크 혼잡이 발생한다면), 본 시스템은 그래픽 품질을 동적으로 감소시키고, 아니면 짧은 대기 시간을 유지하기 위하여 스트림 대역폭을 감소시킨다.
예시적인 시스템은 넷북(103) 및 가요성 디스플레이 장치(전자 종이)(104)의 2개의 수신기를 포함한다. 예를 들어, 넷북(103)은 Intel Atom CPU와 Intel GMA 645 그래픽 가속 칩에 기초한 ASUS의 Eee PC와 같은 저가의 컴퓨팅 장치일 수 있다. 또한, 유사한 넷북이 사용될 수 있다.
각 수신기는 그래핑 및 비디오 디코딩 렌더링 엔진(graphics and video decoding and rendering engine, GVDR 엔진)을 포함한다. 넷북(103)은, 넷북(103)의 운영 체계 상에서 실행되는 소프트웨어 기반의 GVDR 엔진(108)을 포함한다. 가요성 디스플레이는 DSP, 처리 유닛, 메모리 유닛 등의 집적 회로 또는 칩셋으로서 구현되는 하드웨어 GVDR 엔진(107)을 포함한다. 사용자의 요구와 사용가능한 리소스에 따라 GVDR의 다른 구현례가 사용될 수 있다는 것이 이해될 것이다. 이 대신에, 비디오 디코딩 및 렌더링 엔진은 USB 장치와 같은 외부의 하드웨어 장치일 수 있다. 예시적인 일 실시예는 네트워크 입력과 HDMI 출력을 갖는 소형 TV 박스일 수 있다. 네트워크 입력은 유선 네트워크(케이블, 이더넷 등) 또는 무선 네트워크(와이파이 등)에 연결될 수 있다.
GVDR 엔진이 구현에 있어서 간단하며, 다중 컴퓨팅 플랫폼 또는 소비자 전자 장치를 위한 다양한 방법으로 구출될 수 있다는 것이 이해될 것이다. 이것은 넓은 범위의 장치가 시스템에 있어서 수신기 역할을 하게 한다.
GVDR 엔진(107, 108)은 해당하는 수신기 시스템(103, 104)의 각각에서 애플리케이션(113)의 이미지(105, 106)를 렌더링한다. 또한, GVDR 엔진(107, 108)은 비디오 데이터, 오디오 데이터 및 애플리케이션로부터의 출력으로서 캡쳐된 임의의 다른 데이터를 렌더링할 수 있다.
이미지(105, 106)는 필요에 따라 리프레시되지만, 리프레시 레이트는 픽쳐(picture)의 소정의 영역에 대하여 초당 15 프레임에서 현재의 디스플레이 장치를 이용하는 초당 60 프레임 이상까지 변동할 수 있다. 시스템 리소스와 성능 요건에 따라 더 높은 프레임 레이트가 가능하다는 것이 이해될 것이다. 더 높은 프레임 레이트는 더욱 최적인 사용자 경험을 제공할 수 있다. 일 실시예에서, 이미지의 상이한 영역이, 후술되는 바와 같이, 개선된 사용자 경험을 위하여 상이한 레이트로 리플레시될 수 있다.
일 실시예에서, 이미지(105, 106)는 상호작용할 수 있다. 장치(104, 105)와 상호작용하는 사용자(101, 102)로부터의 다양한 입력 데이터가 캡쳐되어 애플리케이션(113)으로 다시 전송될 수 있다. 입력 데이터는 키보드 스트로크, 마우스 움직임, 터치 및 멀티 터치 이벤트, 모션 감지 데이터, 가속도계 데이터, 공기의 온도 또는 상태와 같은 센서 데이터, 심장 박동 센서나 혈당 센서와 같은 인체 센서, 음성 명령, 눈 움직임 또는 컴퓨터에 의해 해석될 신경 임펄스(neurological impulses) 등을 포함한다.
입력 데이터는 입력 데이터를 수집하여 애플리케이션(113)으로 전송하는 엔진(114)에 전송될 수 있다. 애플리케이션(113)은 처리를 위하여 입력 데이터를 해석할 수 있으며, 입력 데이터에 응답하여 그 출력을 변동시킬 수 있다. 출력은 다시 엔진(114)에 의해 캡쳐되어 전술한 바와 같이 네트워크(111)를 통해 수신기(103, 104)로 전송된다.
이 대신에, 엔진(114)은 처리를 위하여 입력 데이터를 해석할 수 있다. 예를 들어, 엔진(114)은 멀티 터치 이벤트를 애플리케이션(113)과 별도로 제공되는 매핑 스킴에 기초하여 애플리케이션 전용 명령으로 매핑할 수 있다. 입력 데이터가 애플리케이션(113)과 엔진(114)의 조합에 의해 해석될 수 있다는 것이 이해될 것이다.
동작시, 사용자(101, 102)는 동일한 애플리케이션(113) 상에서 함께 작업할 수 있다. 애플리케이션(113)이 다중 사용자 지원을 포함하는지에 관계없이, 협업(collaboration)은 본 시스템의 특징이다.
또한, 방화벽과 NAT(network address translation) 문제와 같은 보안 및 사생활 문제가 제거된다. 사용자(101, 102)는 믿을만한 소스인 서버(112)에 대한 연결을 개시한다. 따라서, 예시적인 본 시스템의 사용자(101, 102)는 알려지지 않고 믿을 수 없는 네트워크 연결을 결코 허용하지 않는다.
도 2는 원격 컴퓨팅을 위한 개선된 전송 프로토콜을 제공하는 예시적인 서버를 도시한다. 서버(201)는 논의된 바와 같이 애플리케이션 및 GVDR 엔진을 실행할 수 있다.
서버(201)는 물리적 또는 가상 서버일 수 있으며, CPU(202)와 선택적으로는 GPU(203)를 포함한다. 서버(201)는 사운드 카드(미도시)와 같은 다른 처리 하드웨어 유닛을 포함할 수 있다. 예를 들어, CPU는 Intel Core i7일 수 있다. 예를 들어, GPU는 Nvidia GeForce 9400일 수 있다.
애플리케이션(204)은 하이퍼바이저(hypervisor) 내의 또는 하이퍼바이저가 없는 종래의 운영 체계에서 실행된다(OS 및 하이퍼바이저는 도시되지 않음). 예시적인 운영 체계는, Windows XP, Windows Vista, Windows 7, Windows Server, Windows Mobile, Mac OS X, Mac OS X Server, UNIX, Linux, Symbian, Android 등을 포함한다.
출력 캡쳐 요소(205)는 명령어의 형태 또는 원(raw) 데이터의 형태 중 하나로 애플리케이션으로부터 출력 데이터를 캡쳐한다. 캡쳐 과정의 상세는 후술된다. 예를 들어, 요소(205)는 그래픽 API 명령(GDI 또는 Open GL 명령 등), 고주파수(20 내지 60 Hz)를 갖는 비디오 메모리로부터의 이미지 및 멀티미디어 API 명령(예를 들어, 비디오를 보이는 것)을 캡쳐할 수 있다.
출력 인코더(206)는 캡쳐된 출력 데이터를 짧은 대기 시간의 하이브리드 네트워크 스택(208)을 통한 전송을 위하여 인코딩한다. 출력 멀티캐스팅 유닛(207)은 네트워크를 통한 다중 수신기로의 전송을 관리하고, 전송이 이러한 다중 수신기 사이에서 동기화되는 것을 보장한다. 또한, 출력 멀티캐스팅 유닛(207)은 적합한 출력 데이터가 각 수신기로 전송되는 것을 보장한다. 예를 들어, 상이한 품질의 출력 데이터가 상이한 대역폭을 갖는 수신기에 대하여 사용될 수 있다. 또한, 수신기는 최대 fps, Open GL 하드웨어 지원 등과 같은 장치의 렌더링 성능에 의해 변동할 수 있다.
멀티캐스팅 유닛(207)은 수신기가 브로드캐스팅 세션을 결합하고 이를 벗어나는 것을 관리하고, 최적 전송 토포러지(topology) 및 루팅(routing)을 정의하고, 멀티캐스트 오버레이 네트워크(multicast overlay network)를 관리하고 재배열한다. 또한, 멀티캐스팅 유닛(207)은 시간 스탬프(time stamp)와 같은 관련 동기화 데이터를 아웃고잉 패킷(outgoing packet)에 첨부하고, 수신기의 클록이 동기화되는 것을 보장하며, - 필요하다면 - 통신 세션에 참여하는 수신기 각각에 대한 대기 시간, 비트 레이트, 인코딩 데이터, 사용가능한 네트워크 대역폭 및 처리 성능을 조정한다.
멀티캐스팅 유닛(207)은, 전술한 기능을 효율적으로 수행하기 위하여, 하이브리드 네트워크 스택(208)과 출력 인코더(206)와 통신한다. 멀티캐스팅 유닛(207)은 수신기 장치에서 사용자에 대한 사용자 경험과 상호작용의 품질에 기초하여 최적화 기준을 이용할 수 있다. 네트워크 스택(208)은 물리적 통신 네트워크에 데이터 패킷을 전송하는 물리적 네트워크 인터페이스와 인터페이스한다. 네트워크 스택(208)은 사용자 모드 또는 커널 모드 소프트웨어 요소로서 공통으로 구현될 수 있다. 이 대신에, 이는 하드웨어 집적 회로로서 구현될 수 있다.
입력 큐(209)는 다중 사용자로부터의 입력 명령을 수신하고, 명령을 버퍼링하고, 명령을 적절히 배열하는 책임이 있다(이에 의해 다중 사용자로부터의 입력 데이터를 동기화한다). 입력 디코더(210)는 상이한 종류의 입력 데이터가 애플리케이션(204)에 의해 이해가능한 것을 보장한다. 입력 디코더(210)는 애플리케이션(204)에 의해 해석될 수 없는 모든 입력 명령을 버린다.
아웃고잉 캡쳐 유닛(205), 출력 인코더(206), 출력 멀티캐스팅 유닛(207), 네트워크 스택(208), 입력 큐(209) 및 입력 디코더(210)는 애플리케이션(204)의 원래의 운영 체계의 커널 및 사용자 모드에서 실행되는 소프트웨어 프로그램으로서 구현될 수 있다는 것이 이해될 것이다. 이러한 특정은 후술된다.
도 3은 원격 컴퓨팅을 위한 개선된 전송 프로토콜을 제공하는 예시적인 클라이언트를 도시한다. 클라이언트 디스플레이 장치(305)는 전술한 수신기 장치일 수 있다.
클라이언트(305)는 장치에 존재하는 짧은 대기 시간의 하이브리드 네트워크 스택(307), 출력 디코더(306) 및 출력 렌더러(renderer)(304)를 포함한다. 출력 디코더는 오디오/비주얼 코덱, 픽쳐 코덱 및 수신된 출력 데이터를 디코딩하기 위한 그래픽 명령 라이브러리를 포함한다.
전술한 요소는 CPU(302) 및 GPU(303)를 포함할 수 있는 저가의 컴퓨팅 하드웨어 플랫폼 상에서 실행되는 종래의 운영 체계에서 실행되는 사용자 모드 소프트웨어 프로그램으로서 구현될 수 있다. 예를 들어, CPU(302)는 Intel Atom 프로세서일 수 있다. 예를 들어, GPU(303)는 Intel GMA 945일 수 있다.
또한, 이러한 요소는 하드웨어 내에서 구현될 수 있다. 일 실시예에서, 클라이언트(301)는 범용 CPU 및 CPU를 필요로 하지 않으며, 또한 Windows XP, Windows Vista, Windows 7, Windows Server, Windows Mobile, Mac OS X, Mac OS X Server, UNIX, Linux, Symbian, Android 등과 같은 종래의 운영 체계를 필요로 하지 않는다.
클라이언트(305)는 입력 인코더(301)를 이용하여 입력 성능을 지원할 수 있다. 입력 인코더(301)와 출력 디코더(306)는 네트워크 스택(307)과 인터페이스하여, 이미지, 인코딩된 비디오 스트림 또는 원격 서버로부터의 중간 포맷의 그래픽 명령의 형태의 그래픽 출력 데이터를 수신하고, 인코딩된 입력 데이터에 응답한다. 출력 디코더(306)는 오디오 또는 일반적인 데이터 스트림(예를 들어, 데이터 파일 또는 데이터 스트림)과 같은 다른 종류의 출력을 수신하고 해석할 수 있다. 입력 데이터는 입력 인코더(301)에 의해 장치 및 운영 체계에 독립적인 포맷으로 인코딩될 수 있다.
도 4는 원격 컴퓨팅을 위한 개선된 전송 프로토콜을 제공하는 서버에서 실행되는 예시적인 출력 캡쳐 및 인코딩 엔진을 도시한다. 그래픽 출력 및 인코딩 엔진은, 전술한 바와 같이, 서버 상에서 실행되는 애플리케이션의 그래픽 출력을 캡쳐할 수 있다. 엔진은 지원되는 형태(그래픽 API 명령, 픽쳐 또는 비디오)로 출력을 더 인코딩하고, 그 다음, 데이터의 종류 및 긴급성에 따라 하이브리드 다중 채널 네트워크 프로토콜 스택으로 인코딩된 출력을 전송한다. 또한, 엔진은 수신기 상에서(있다면) 자신을 다른 캐시와 동기화하는 캐시를 업데이트한다.
그래픽 API 명령 인터셉터(intercepter)(401), 프레임 캡쳐링 유닛(402) 및 비디오 통과(pass-through) 인터셉터(403)는 애플리케이션(또는, 선택적으로는, 애플리케이션이 실행되는 운영 체계)에 의해 생성된 그래픽 정보를 캡쳐한다. 예를 들어, 프레임 캡쳐링 유닛(402)은 초당 20 내지 30 프레임으로 그래픽 출력을 챕쳐할 수 있다. 충분한 처리 성능 및 대역폭이 주어진다면, 더 높은 프레임 레이트가 가능하다.
다른 인터셉터 요소(403a)가 다른 종류의 출력의 인터셉트를 위하여 존재할 수 있다. 예시적인 출력 종류는 오디오, 3D 홀로그램, 3D 객체, 프린터 출력, 등과 데이터 파일 및 데이터 스트림 형태의 일반적인 데이터 출력을 포함한다.
예를 들어, 높은 품질의 오디오 스트림에 대한 짧은 대기 시간의 인터셉트는 본 명세서에 편입될 수 있는 전술한 "Method and System for Low Latency High Quality Music Conferencing"에서 설명된다.
다양한 종류의 출력 사이의 동기화는 다양한 메커니즘으로 획득될 수 있다. 한 메커니즘은, 전송 측에서 시간 스탬핑하고(후술되는 바와 같이, 멀티캐스팅 유닛(413)에서 수행됨), 전송 및 수신 측 상에서의 클록을 동기화되게 유지하는 것에 의한다. 다른 메커니즘은, 수신 측 상에, 후술되는 바와 같이, 필요에 따라 버퍼 크기를 변경하고 데이터 부분을 버리는 것으로 네트워크의 대기 시간을 관리하는 지터 버퍼(jitter buffer)를 구현하는 것이다. 다른 매커니즘은 원하는 레벨의 동기화를 획득하도록 데이터 해석(예를 들어, 리플레이 동안의 오디오 샘플링 레이트)을 변경하는 것이다.
인터셉터(401, 402, 403) 및 유사한 인터셉터(403a)의 구현은 변경될 수 있다. 이들은 운영 체계 내에서 실행되는 커널 모드 또는 사용자 모드 소프트웨어 요소로서 구현될 수 있다. 또한, 이들은 하이퍼바이저의 상부에서 실행되는 소프트웨어 요소로서 구현되어, 게스트 운영 체계의 가상화 인스턴스에 대한 하드웨어 요소로서 자신을 제공할 수 있다. 또한, 이들은 그래픽 캡쳐 및 인코딩 엔진이 하드웨어 칩으로서 구현되는 경우에 하드웨어 내에 구현될 수 있다.
그래픽 API 명령 인터셉터(401)는 애플리케이션에 의해 생성된 API 호출 및 그래픽 명령을 캡쳐한다. 이러한 명령은, 예를 들어, Microsoft의 GDI, Direct 3D, Open GL, Desktop Window Manager 및 Apple의 QuickDraw, Quartz 2D, PostScript, Core Image, Core Animation, Quartz Compositor 등을 포함할 수 있다. 인터셉터(401)는 사용자 모드 요소와 결합되는 가상 디스플레이 드라이버로서 구현될 수 있다. 이러한 가상 디스플레이 드라이버는 물리적 디스플레이 드라이버로서 자신을 애플리케이션에 제공할 수 있지만, 임의의 수신된 명령을 복사한다: 한 복제물은 네트워크(416)을 통해 수신기로 전송되고, 제2 복제물은 물리적 그래픽 처리 유닛 또는 가상 그래픽 처리 유닛으로 통과되어, 프레임 캡쳐링 유닛(402)에 의해 캡쳐될 수 있는 픽쳐를 생성한다.
그래픽 명령 필터(404)는 전송 측 유니버셜 캐시(406) 및 영역 검출기(405)와 통신하여, 네트워크(416)을 통한 수신기로의 전송 전에, 그래픽 명령이 추가 처리를 받을 수 있는지 판단한다.
일례에서, 그래픽 API 명령(들)과 관련된 인수(argument)(비트맵, 텍스쳐, 브러시 등)는, 수신기의 전부 또는 일부에 이미 존재한다면, 전송될 수 없다. 이러한 명령은 그래픽 명령 필터(404)에 의해 필터링되고, 캐시(406) 내에서 캐시 위치를 식별하는 해쉬 수(hash number)로 대체된다. 유니버셜 캐시(406)는 캐시 동기화 절차(412)를 통해 전송기 및 수신기(들) 사이에서 시스템에 걸쳐 동기화된다.
또한, 그래픽 API 명령은, 영역 검출기(405)가 그래픽 API 명령이 영향을 미치는 영역에 대하여 픽쳐 인코더(후술됨) 또는 비디오를 이용하도록 결정한다면, 전송될 수 없다. 영역 검출기(405)는 후술되는 과정을 실행한다.
또한, 그래픽 명령 필터(404)는, 그래픽 명령의 양, 명령의 종류, 캐시화되지 않은 크기 및 영역 경계와 같은 통계를 영역 검출기(405)로 전송한다. 영역 검출기(405)는, 그래픽 API 명령 인터셉터(401) 또는 비디오/픽쳐 인코더를 이용하는지 여부를 결정하는데 있어서, 통계를 자신의 모션 검출 데이터 및 영역 분류에 대하여 비교한다.
일례에서, 영역 검출기(405)는 그래픽 명령을 이용하는 것으로 바이어스된다. 그러나, 애플리케이션이 매우 동적인 픽쳐를 이네이블하도록 많은 GDI 명령을 이용한다면, 비디오 코덱이 더욱 효율적이라는 것이 이해될 것이다.
명령이 추가 처리를 받을 수 있는 것으로 판명된 후에, 이는 그래픽 명령 번역기(408)에 의한 유니버셜 포맷으로 변환된다. 유니버셜 포맷은 다양한 그래픽 API에 걸쳐 공통일 수 있다. 공통의 포맷은 첨부(additions) 및 수정(amendments)을 갖는 PostScript와 같은 종래의 포맷에 기초할 수 있다. 포맷은 그리고 수신 장치에 의한 해석과 렌더링의 편의 및 단순화를 위하여 최적화될 수 있다. 포맷은 저성능 하드웨어 구현 또는 소프트웨어 구현에 의한 해석 및 렌더링에 대하여 최적화될 수 있다.
번역된 명령은 그래픽 명령 압축기(compressor)(409)로 압축된다. 압축기는, 반복하는 항목이, 항목 및 항목이 순차적으로 발생하는 다수의 시간으로 교체되는 실행 길이(run-length) 인코딩 알고리즘일 수 있다. 더 향상된 압축기 알고리즘은 명령을 동등한 명령 세트로 변환할 수 있고, 그 다음 ZIP 또는 RLE 알고리즘에 의해 압축될 수 있다. 이것은 수신기로의 전송을 위한 대역폭 및 대기 시간 요건을 완화시킨다.
결과에 따른 비트 스트림은, 후술되는 바와 같이, 멀티캐스팅 유닛(413)으로 전송되고, 하이브리드 다중 채널 네트워크 전송 프로토콜 스택(414)을 통하여 네트워크(416)를 통해 전송된다.
스택(414)은 전송을 위해 UDP 프로토콜을 이용하고, 라우팅을 위해 IP 프로토콜을 이용한다. 스택(414)은 후술된다. 다른 종류의 네트워크 프로토콜이 역시 사용될 수 있다는 것이 이해될 것이다. 예를 들어, TCP/IP가 사용될 수 있지만, 서브 최적 사용자 경험을 위한 긴 대기 시간에 노출될 것이다.
프레임 캡쳐링 유닛(402)은 예를 들어 초당 30 내지 50 프레임의 주파수로 서버의 비디오 메모리로부터 애플리케이션의 프레임 데이터를 캡쳐한다. 더 높은 캡쳐 레이트가 필요에 따라 사용될 수 있다는 것이 이해될 것이다. 호스트 운영 체계를 위한 커널 모드 소프트웨어 요소가 그래픽으로부터의 데이터 획득 속도를 개선시키는데 사용될 수 있다. 이 대신에, 프레임 캡쳐링 유닛(402)은 사용자 모드에서 구현될 수 있다.
프레임 캡쳐링 유닛(402)은 애플리케이션이 디스플레이되는 스트린의 일부 또는 전체 스크린을 캡쳐할 수 있다. 일 실시예에서, 캡쳐링 유닛(402)은, 후술되는 바와 같이, 전체 스크린을 캡쳐하여, 캡쳐된 이미지를 조작하여 관심 영역만을 처리한다. 다른 실시예에서, 캡쳐링 유닛(402)은 애플리케이션이 디스플레이되는 하나 이상의 특정 영역만을 캡쳐한다.
프레임 캡쳐링 유닛(402)은 영역 검출기(405)에 20 내지 30 ms 마다 또는 5 내지 10 ms 마다 새로운 이미지 프레임을 제공한다. 프레임 캡쳐 레이트는 부분적으로 출력의 프레임 레이트에 기초하여 결정될 수 있다는 것이 이해될 것이다. 레이트(ms 단위)는 1000을 출력의 초당 프레임으로 나눈 것과 동일하다. 따라서, 영역 검출기(405)는 프레임 인터셉터(402)로부터의 이미지와, 인터셉터(401)로부터의 인터셉트된 그래픽 API 명령 스트림과, 인터셉터(403)으로부터의 인터셉트된 비디오 API 명령 스트림을 수신한다.
그 다음, 영역 검출기(405)는 이미지에서의 각 영역에 대하여 명령 기반의 접근 방법, 비디오 코덱 또는 픽쳐 코덱을 사용할 지를 결정한다. 영역은 후술되는 바와 같이 직사각형이 아닐 수 있다.
그 다음, 영역 검출기(405)는, 후술되는 바와 같이, 비디오로 인코딩될 영역의 마스크와 함께 비디오 인코더(407)로 이미지 프레임을 공급한다. 영역 검출기(405)는 상이한 상황에서 다양한 픽쳐 인코더(410)와 함께 작용한다.
예를 들어, 2가지 종류의 픽쳐 인코더(410)가 있을 수 있다: 큰 이미지 요소를 위한 프로그레시브(progressive) 인코더와, 작은 이미지를 위한 간단하고 무손실 또는 손실이 있는 이미지 압축기. 프로그레시브 이미지 인코더는 사용하기 위하여 더 프로세서 집약적일 수 있지만, 이미지의 크기를 상당히 압축할 수 있다. 대조적으로, 작은 이미지는 이미 작은 대역폭을 필요로 하기 때문에, 이에 따라 더 빠른 인코더의 이익을 가진다. 프로그레시브 이미지 인코더는 큰 이미지 크기에 대하여 효율적으로 압축하며, 작은 이미지는 빠른 인코더로 처리될 수 있다.
영역 검출기(405)는 인코딩을 위하여 후술되는 바와 같이 이미지 요소를 픽쳐 인코더(410)에 제공한다. 비디오 인코더(407)와 픽쳐 인코더(410)는 데이터를 인코딩하여, 이에 의해 데이터를 압축하고, 압축된 데이터를 멀티캐스팅 유닛(413)으로 통과시킨다.
멀티캐스팅 유닛(413)은 하나 이상의 수신기에 대한 통신 세션을 유지하고, 최적 라우팅을 정의하고, 동기화에 필요한 시간 스탬핑을 관리하고, 네트워크 스택(414)로부터 수신된 네트워크 피드백 데이터에 기초하여 비디오 인코더(407)와 픽쳐 인코더(410)의 파라미터를 변경함으로써 비트 레이트를 적절하게 한다.
멀티캐스팅 유닛(413)은 네트워크 스택(414)를 이용하여 페이로드(payload)와 대기 시간 요건에 따라 상이한 종류의 통신 채널을 형성한다. 멀티캐스팅 유닛(413)은 다중 채널의 상대적인 우선 순위를 관리하고, 수신기와의 연결을 구축한다. 또한, 멀티캐스팅 유닛(413)은 데이터를 수신기로 전송한다.
후술되는 바와 같이, 네트워크 스택(414)은 3 종류의 채널을 가질 수 있다: 보장(guaranteed) 전달, 비보장(non-guaranteed) 전달 및 포워드 에러 보정(forward error correctino)을 이용한 보장되지 않는 전달.
일 실시예에서, 멀티캐스팅 유닛(413)은 API 명령에 대한 보장 전달 채널, 네트워크 상태가 강력하지 않는 경우의 비디오 코덱으로 인코딩된 데이터에 대한 비보장 전달 채널, 네트워크 상태가 신뢰할 수 없는 때의 비디오와, 오디오 스트림 및 픽쳐 코덱으로 인코딩된 데이터에 대한 FEC를 이용한 비보장 전달 채널을 구축한다. 멀티캐스팅 유닛(413)은 낮은 우선 순위의 보장 전달을 통해 애플리케이션 데이터를 전송할 수 있다. 패킷 손실 또는 지터에 따른 오디오 품질의 열화가 비디오에 비하여 더 나쁘게 인지되는 품질 열화를 가질 수 있기 때문에, 오디오 데이터는 높은 우선 순위로 전송될 수 있다.
비디오 플레이 명령(예를 들어, DirectShow, Core Video, QuickTime) 및 이 명령과 관련된 미디어 데이터 스트림은 통과용 비디오 인터셉터(403)에 의해 인터셉터될 수 있다. 인터셉터(403)는 상이한 종류의 미디어에 대하여 여러 개의 명령 전용 소프트웨어 요소로서 구현될 수 있다.
일례에서, Windows용 DirectShow 비디오 인터셉터는 가장 높은 우선 순위를 갖는 DirectShow 필터로서 구현될 수 있어, DirectShow 처리 파이프라인에서 처음인 것을 보장한다. 이러한 필터는 관심 대상의 명령 및 API 호출(예를 들어 비디오 파일을 플레이하는 요청)을 필터링하고, 이를 멀티캐스팅 유닛(413) 및 네트워크 스택(414)으로 통과시킨다.
인터셉터(403)는 캡쳐된 미디어 데이터를 전송자의 시스템에서 재생하지 않고 또한 비디오 인코더(407)로 재인코딩하지 않고 수신기로 직접 통과시킨다. 예를 들어, 데이터는 비보장 전달 채널을 통해, 패킷 손실과 사용가능한 대역폭과 같은 네트워크 상태에 따라 FEC를 이용하여 또는 이용하지 않고 전송될 수 있다.
비디오 통과 인터셉터(403)는 미디어 렌더링 명령(예를 들어, 비디오 렌더링) 세트에 의해 도출된 영역에 관하여 영역 검출기(405)와 통신한다. 영역 검출기(405)는 이러한 영역에 비디오 인코더(407)를 적용할 것인지 여부를 결정하기 위하여 이러한 정보를 이용할 수 있다. 이 결정은 수신기 상에서 원 미디어 데이터를 디코딩하는데 필수적인 코덱의 사용가능성 또는 비디오 인코더가 다른 이유(예를 들어, 수신기 상에서의 제한된 CPU 성능)로 선호되는지 여부와 같은 인자에 의해 영향을 받을 수 있다.
대응하는 데이터(예를 들어, 웹캠으로부터의 비디오 스트림 또는 비디오 파일)은 A/V 래퍼(wrapper)(411)로 전송될 수 있다. 래퍼(411)는 미디어 종류, 프레임 설명 데이터 등에 관한 정보를 추가할 것이다. 또한, 래퍼(411)는, 필요하다면, 미디어를 다른 포맷으로 코드변환할 수 있다. 래퍼(411)는 수신기에서 미디어 데이터의 호환성을 보장하고, 수신기에 미디어 데이터를 다시 플레이하기 위한 충분한 메타 데이터를 제공한다.
도 5는 원격 컴퓨팅을 위한 개선된 전송 프로토콜을 제공하는 클라이언트에서 실행되는 예시적인 디코딩 및 렌더링 엔진을 도시한다. 클라이언트는 수신기 장치 상에서 실행될 수 있으며, 인코딩된 데이터를 수신하도록 구성될 수 있다. 클라이언트는 인코딩된 데이터를 사용자를 위한 그래픽 출력으로 추가로 렌더링할 수 있다. 또한, 클라이언트는, 오디오, 데이터 파일, 데이터 스트림, 프린터 데이터 스트림 등을 포함하지만 이에 한정되지 않는 다른 종류의 출력을 디코딩하고 렌더링할 수 있다.
일 실시예에서, 수신기는 네트워크 전송 프로토콜 스택(504), 비디오 지터 버퍼(506), 비디오 디코더(512) 및 비디오 렌더러(renderer)(518)로 이루어질 수 있다. 수신기는 비디오 디코더(512)에 의한 비디오 디코딩만을 이용할 수 있다. 충분히 낮은 프레임 레이트로, 지터 버퍼(56)가 불필요할 것이다. 수신된 인코딩된 데이터는, 픽쳐 인코딩, 통과 인코딩 또는 GDI 명령 없이 전송 측에 의해 적절하게 인코딩될 것이다.
이 수신기는 하드웨어 내에서 디코딩 칩으로서 구현된 간단하고 에너지 효율적인 설계를 가질 수 있다.
다른 실시예에서, 간단한 운영 체계는 시스템 서비스로서 상술된 요소(504, 506, 512, 518)를 로딩하여 실행할 수 있다. 이 실시예는 504, 512 및 518을 지원하기 위한 추가 요소를 포함할 수 있다.
다른 실시예에서, 요소는 Mac OS X 또는 Windows 7과 같은 운영 체계 내에서 실행되는 소프트웨어 요소로서 구현될 수 있다.
다른 실시예에서, 전술한 바와 같이 오디오와 같은 추가 종류의 출력이 수신기에 의해 지원된다. 수신기는 추가의 지터 버퍼(519), 출력 디코더(520) 및 출력 렌더러(521)를 포함하도록 확장될 수 있다.
다른 실시예에서, 하이브리드 접근 방식이, 전술한 바와 같이, 애플리케이션의 그래픽 출력을 인코딩하는데 사용될 수 있다. 그래픽 출력은, 그래픽 명령, 비디오 프레임, 이미지 요소 및 통과 비디오를 포함하는 4 종류의 데이터로 인코딩된다. 4 종류의 데이터는 도시된 바와 같이 4개의 파이프라인에 의해 처리되어, 디스플레이를 위해 실시간으로 단일 픽쳐로 통합된다.
그래픽 명령 파이프라인은 그래픽 명령을 위한 지터 버퍼(505), 그래픽 명령 압축 해제기(de-compressor)(509), 그래픽 명령 번역기(511), 그래픽 명령 렌더러(515) 및 분산 동기화 캐시(510)를 포함한다.
비디오 디코딩 파이프라인은 비디오 디코더를 위한 지터 버퍼(506)와 비디오 디코더(512)를 포함한다.
이미지 기반의 디코딩 파이프라인은 이미지 요소를 위한 지터 버퍼(507), 픽쳐 디코더(여러 종류일 수 있다)(513) 및 분산 동기화 캐시(510)를 포함한다.
통과 비디오 파이프라인은 이미지 요소를 위한 지터 버퍼(508)와 통과 비디오 언래핑(unwrapping) 및 렌더링(507)을 포함한다.
파이프라인 출력은 프레임 컴포지터(compositor)(516)에 의해 단일 이미지로 결합된다. 이 이미지는 이미지에서 영역의 경계를 스무딩(smoothing)하는 스무딩 변환 모듈(517)에 의해 처리된다. 그 다음, 이 이미지는 518에서 그래픽 출력으로서 디스플레이된다.
스무딩 변환은 상이한 영역을 인코딩하는데 사용된 상이한 방법에 의해 발생된 아티팩트(artifact)를 제거할 수 있다. 일부 스무딩 변환은 디블록킹(de-blocking) 변환이다. 상황에 따라 상이한 변환이 사용될 수 있다는 것이 이해될 것이다.
일 실시예에서, 지터 버퍼(505, 506, 507, 508, 519)는 상이한 구현 및 알고리즘을 가질 수 있다. 지터 버퍼는 상이한 종류의 데이터를 다루고, 따라서 상이한 요구를 가진다. 예를 들어, 지터 버퍼는 높은 네트워크 대기 시간이 있다면 낮은 프레임 레이트로 성능을 개선할 수 있다. 따라서, 다중 지터 버퍼는 스무드한 사용자 경험(예를 들어, 오디오/비디오 동기화)을 위하여 다양한 종류의 출력의 동기화를 관리하는데 요구된다. 지터 버퍼는 자신의 크기를 동적으로 변화시키고, 수신된 데이터에서 시간 스탬프를 검증하고, 필요에 따라 수신된 데이터를 버리거나, 지연시키거나 또는 재배열한다. 이는 대기 시간을 관리하고, 특히 신뢰성 없는 네트워크를 통해 고품질의 출력을 유지한다.
예를 들어, 그래픽 명령을 위한 지터 버퍼는 그래픽 GDI 명령이 바른 순서로 수신기에 의해 처리되는 것을 보장한다.
캐시(510)는 비트맵 또는 텍스쳐와 같은 수신된 그래픽 명령을 위하여 픽쳐 요소 및 인자를 검색하는데 사용된다. 전술한 바와 같이, 캐시(510)는 전송기로부터 수신된 해쉬 수에 기초하여 이러한 엔티티를 저장할 수 있다. 캐시(510)는 개별 데이터 통신 채널을 통해 서버 캐시로부터 데이터를 수신하고, 수신기의 캐시와 동기화된 상태로 자신을 유지한다.
도 6은 개선된 전송 프로토콜에 따라 캡쳐하고, 인코딩하고, 전송하기 위하여 서버에 의해 실행되는 예시적인 절차를 도시한다. 본 절차는, 전술한 바와 같이, 하나 이상의 클라이언트와 통신하는 서버 상에서 실행될 수 있다.
601에서, 서버는 실행되는 애플리케이션으로부터 그래픽 출력을 인터셉트한다. 예를 들어, 애플리케이션은 단일 사용자에 대한 인터액티브 사용자 인터페이스를 제공하도록 구성된 종래의 애플리케이션일 수 있다. 그래픽 출력과 사용자 입력(후술함)을 인터셉트함으로써, 애플리케이션은 다중 사용자에게 제공될 수 있다.
이 대신에, 그래픽 출력은 인터셉트되어 복수의 클라이언트에 브로드캐스트될 수 있다. 이것은, 예를 들어, 멀티미디어 프리젠테이션을 넓은 지리적 영역에 걸쳐 분포된 복수의 클라이언트에 브로드캐스트하는데 사용될 수 있다.
602에서, 서버는 영역 검출 절차를 실행한다. 영역 검출 절차는 그래픽 출력을 하나 이상의 영역으로 분할하도록 구성되고, 각 영역은, 후술되는 바와 같이, 최적 데이터 변환에 영향을 미치는 지배적인 특성을 가진다.
예를 들어, 영역 검출은 논의된 바와 같이 모듈에 의해 제공될 수 있다. 예시적인 일 실시예에서, 모듈은 서버 상에서 실행되는 소프트웨어 모듈일 수 있다. 예시적인 다른 실시예에서, 모듈은 전용 하드웨어, 범용 하드웨어 및 서버에 액세스가능한 실행 소프트웨어의 조합일 수 있다.
603에서, 서버는 상기 검출된 영역을 필터링한다. 예를 들어, 그래픽 API 명령은 비디오, 픽쳐 또는 통과 영역에서 전송되지 않는다. 예를 들어, 비디오 및 픽쳐 데이터는 통과 영역에서 전송되지 않는다.
604에서, 서버는 각 영역의 그래픽 출력을 적합하게 변환된 출력으로 변환한다. 4개의 예시적인 영역 및 관련된 특성은 후술된다.
그래픽 API 명령은 운영 체계 또는 그래픽 출력을 렌더링하는데 사용되는 다른 명령어이다. 예를 들어, Microsoft Windows는 윈도우, 원 또는 다른 형상을 그리는 다양한 그래픽 명령을 제공한다. 이러한 영역은 표준 Microsoft API를 통해 검출될 수 있다. 다른 운영 체계는 유사한 동작 원리를 가지며, 또한 유사한 방법으로 영역 검출을 위하여 사용될 수 있는 표준 API를 가진다. 이러한 영역은 원래의 그래픽 명령으로 최적으로 인코딩될 수 있어, 스크린샷을 전송하는 것에 비하여 대역폭 요건을 상당히 완화시킨다.
이러한 명령은 보장된 방법으로 전송되어야만 한다는 것이 이해될 것이다: 하나 이상의 그래픽 API 명령이 클라이언트로 손실된다면, 그래픽 출력을 재구축하는 것은 어렵다.
비디오 데이터는 비디오 코덱으로 인코딩될 수 있다. 계속하여 이동하는 비디오 데이터는 사용자의 경험에 최소의 영향을 미치도록 압축될 수 있다. 예를 들어, 비디오 내에서 움직임이 거의 없을 때, 고품질의 코덱로 스위칭하고, 비디오 내에서 움직임이 많을 때, 저품질의 코덱으로 스위칭하는 다양한 최적화 코덱이 데 사용될 수 있다. 인간의 눈이 비디오의 디테일보다 비디오에서의 움직임을 더 잘 인지하기 때문에, 많은 이동을 갖는 비디오가 더 높은 레이트로 압축될 수 있다는 것이 이해될 것이다.
개별 손실 패킷이 전체 비디오 렌더링에 최소의 영향을 미치기 때문에, 이러한 비디오 데이터는 보장되지 않는 방법으로 전송될 수 있다는 것이 이해될 것이다. 네트워크 상태가 매우 신뢰가 없는 경우(후술되는 네트워크 스택에 의해 검출되는 바와 같이), 이러한 비디오 데이터는 포워드 에러 보정이 적용되는 보장되지 않는 방법으로 전송될 수 있다는 것이 이해될 것이다.
픽쳐는 픽쳐 코덱으로 인코딩될 수 있다. 예를 들어, 픽쳐 코덱은 위에서 사용되고 스틸(still) 그래픽에 대하여 최적화된 비디오 코덱보다 더 높은 품질을 가질 수 있다. 움직임이 없는 것이 개선된 사용자 경험을 위하여 렌더링될 필요가 있는 그래픽 디테일로 사람의 시선을 끌기 때문에, 픽쳐는 고품질을 필요로 한다.
이러한 픽쳐 데이터는 보장되지 않는 방법으로, 그러나 포워드 에러 체크를 하면서 전송될 수 있다는 것이 이해될 것이다. 인코딩된 픽쳐 데이터에서의 에러는 후술되는 바와 같이 포워드 에러 체크를 이용함으로써 최소화될 수 있는 디스플레이된 그래픽 출력에서의 아티팩트를 가져다 줄 수 있다. 보장 전달을 이용하는 것이 가능하지만, 인코딩된 픽쳐 데이터는 보장된 방법으로 전송하기 위하여는 대량의 대역폭을 필요로 할 수 있으며, 이는 비효율적일 수 있다.
픽쳐 데이터 및 비디오 데이터는, 후술되는 바와 같이, 모션 검출 모듈을 통해 그래픽 출력에서 구별될 수 있다.
통과(pass-through) 데이터는, 예를 들어, 클라이언트에 의해 압축 해제될 수 있는 인코딩된 비디오 데이터일 수 있다. 클라이언트가 인코딩된 비디오 데이터를 디코딩하기에 충분한 리소스(하드웨어, 코덱 등)를 가지며, 인코딩된 비디오 데이터가 대역폭 및 품질 요건을 만족한다면, 서버는 인코딩된 비디오 데이터를 렌더링을 위하여 클라이언트에 직접 간단히 전송할 수 있다.
인코딩된 비디오 데이터의 크기와 손실 패킷에 대한 저항에 기초하여, 보장 전달, 비보장 전달 또는 포워드 에러 보정을 이용하는 비보장 전달이 후술되는 바와 같이 사용될 수 있다는 것이 이해될 것이다.
605에서, 서버는 변환된 출력을 전송한다. 전술한 바와 같이, 변환된 출력은 디지털 정보를 운반하도록 구성된 네트워크를 통해 전송될 수 있다. 변환된 출력은 렌더링을 위하여 하나 이상의 클라이언트에 전송될 수 있다.
606에서, 서버는 적절한 큐(queue)를 통해 변환된 출력을 전송한다. 다양한 큐가 사용가능하며, 각 큐는 상이한 전송 및 신뢰 특성을 갖도록 구성된다. 예시적인 큐는 다음을 포함함다:
근본적인 패킷의 전달과 시컨스를 보장하는 신뢰 큐(reliable queue). 신뢰 큐는 제어 채널을 통해 수신기에 의해 다시 전송된 수신 확인(acknowledge)에 의존한다. 신뢰 채널로부터의 청크(chunk)를 갖는 각 패킷은 시컨스 번호(sequence number)를 갖는다. 주기적으로, 수신기는 수신한 패킷의 시컨스 번호를 전송기로 다시 전송한다(<<ACKs vector>> 청크). 수신기가 소정의 시간 동안 패킷에 대한 ACK를 수신하지 않으면, 패킷이 손실된 것으로 고려하여, 신뢰 채널로부터 기인하는 패킷의 청크를 재전송한다. 패킷의 다음 부분을 전송하기 전에 ACK를 대기하지 않는다.
근본적인 패킷의 전달과 시컨스를 보장하지 않는 비신뢰 큐(unreliable queue). 비신뢰 큐는 순서를 복원하고 수신 측 상에서 복제물을 버리도록 채널 내 시컨스 번호를 각 패킷에 접두어로 붙인다. 다른 체크가 수행되지 않고, 따라서, 최소의 가능 지연 및 CPU 활용을 형성한다. 관찰가능한 패킷 손실은 네트워크 패킷 손실률과 같거나 약간 초과(인터리빙(interleaving) 때문에)할 수 있다.
손실 패킷을 복구하는 것을 돕는 전송된 패킷 사이에 분포된 리던던트 정보를 전송하는 포워드 에러 보정(forward error correction, FEC)을 이용하는 비신뢰 큐. 일 실시예에서, FEC 구현은 전통적인 Reed-Solomon 보다 더 빠르고 간단한 변형 Luby 변환 코드(LT code)에 기초한다. 이것은 단일 패킷 손실 및 버스트 패킷 손실로부터의 복구를 허용한다. 일 실시예에서, FEC는 XOR에 대한 패킷 서브 세트를 선택하도록 NxM 행렬을 사용한다(원래의 LT 코드는 의사 랜덤 서브 세트를 사용한다). 비트 레이트 오버헤드는 (N + M)/(N*M)과 같다. 에뮬레이터를 이용한 시험은, 15%의 네트워크 패킷 손실률 15%에 대하여, FEC를 추가하는 것은 관찰 가능한 패킷 손실을 0.5%로 감소시킬 수 있다는 것을 보였다. 5%의 네트워크 패킷 손실에 대하여, 관찰가능한 패킷 손실은 ~ 0.01%이다.
다른 실시예에서, FEC는 일반적인 경우에(네트워크 대역폭 >> 데이터 비트 레이트, 패킷 손실 < 20%) 대기 시간을 최소화하도록 드문 경우(매우 낮은 대역폭 및 매우 높은 패킷 손실)에서의 강력함을 희생시킨다. 이것은 UDP 패킷에서의 채널 청크를 인터리빙함으로써 획득될 수 있으며, 이는 어떠한 신호 채널도 다른 채널에 대하여 추가의 지연을 도입시키지 않을 수 있다는 것을 보장한다. 이것은 패킷 손실에 관한 지연을 거의 제거한다.
607에서, 서버는 절차를 종료한다.
도 7은 개선된 전송 프로토콜에 따라 수신하고, 디코딩하고, 렌더링하기 위하여 클라이언트에 의해 실행되는 예시적인 절차를 도시한다. 본 절차는 전술한 바와 같이 클라이언트 상에서 실행될 수 있다. 본 절차는 도 6에서 전술된 바와 같이 서버로부터 데이터를 수신할 수 있다.
701에서, 클라이언트는 신뢰 큐로부터 데이터를 수신할 수 있다. 신뢰 큐는 606에서 전술한 것일 수 있다.
702에서, 클라이언트는 비신뢰 큐로부터 데이터를 수신할 수 있다. 비신뢰 큐는 606에서 전술한 것일 수 있다.
703에서, 클라이언트는 FEC를 이용하는 비신뢰 큐로부터 데이터를 수신할 수 있다. FEC를 이용하는 비신뢰 큐는 606에서 전술한 것일 수 있다.
각 큐는 논의된 바와 같이 동적으로 조정되는 하나 이상의 지터 버퍼와 관련될 수 있다.
704에서, 클라이언트는 하나 이상의 상기 큐로부터 임의의 조합으로 변환된 출력을 수신할 수 있다. 큐의 각각은 수신된 데이터와 큐 프로토콜에 따라 출력을 생성할 수 있다. 지터 버퍼 알고리즘은 704에서 다양한 종류의 데이터를 운반하는 다양한 채널에 적용된다. 지터 버퍼는 렌더링 후에 수신된 데이터의 인식에서의 왜곡을 최소화하는데 유용하다. 오디오 데이터의 경우, 이는 글리치(glitch)와 크랙(crack)을 최소화하는데 사용될 것이다. 비디오의 경우, 이는 "멜팅(melting)" 및 "더스트(dust)" 또는 유사한 왜곡을 최소화하는데 사용될 수 있다.
신뢰 큐는 임의의 잃어버린 패킷의 재전송을 요청할 것이고, 서버에 의해 전송된 패킷 스트림을 출력하는 것을 보장한다. 비신뢰 큐는 클라이언트에 의해 수신되는 바와 같은 패킷 스트림을 출력할 것이다. FEC를 이용하는 비신뢰 큐는, 논의된 바와 같이, 포워드 에러 보정 알고리즘을 이용하여 임의의 잃어버린 패킷을 재구출하려고 시도할 것이다.
비신뢰 큐와 FEC를 이용하는 비신뢰 큐에 대하여, 잃어버린 패킷은 이웃하는 패킷으로부터 합성될 수 있다. 예를 들어, 잃어버린 패킷은 인접한 패킷으로부터의 추론된 할당된 값이 제공될 수 있다.
또한, 클라이언트는 네트워크 트래픽 상태에 응답하여 지터 버퍼의 용량을 동적으로 조정할 수 있다.
705에서, 클라이언트는 상기 큐로부터 수신된 바와 같은 변환된 출력을 디코딩할 수 있다. 클라이언트는 후술되는 바와 같이 변환된 출력의 각 부분을 디코딩하는 적합한 방법을 결정한다.
706에서, 각 종류의 변환된 출력은 적합하게 디코딩될 수 있다. 적합한 디코딩은 부분적으로 사용된 인코딩 종류에 따라 결정된다.
예를 들어, 그래픽 API 명령은, 명령을 적합한 API에 전송함으로써 클라이언트 상에 복제될 수 있다. 대량의 스크린 데이터는 최소 대역폭 요건을 갖는 방법으로 렌더링될 수 있다.
예를 들어, 비디오 데이터는 적합한 코덱에 의해 디코딩될 수 있다. 적합한 코덱은 서버에 의해 선택될 수 있다.
예를 들어, 픽쳐 데이터는 적합한 코덱에 의해 디코딩될 수 있다. 적합한 코덱은 서버에 의해 선택될 수 있다.
예를 들어, 통과 데이터는 추가의 처리 없이 클라이언트를 통해 단순히 통과될 수 있다. 통과 데이터는 전술한 큐로부터 컴파일되고, 사용가능한 리소스(하드웨어, 코덱)를 이용하여 클라이언트에 의해 렌더링된다.
707에서, 그래픽 출력이 렌더링될 수 있다. 논의된 바와 같이, 그래픽 출력을 렌더링하는 것은 그래픽 API 명령을 렌더링하는 것, 비디오 데이터를 렌더링하는 것, 픽쳐 데이터를 렌더링하는 것 및 통과 데이터를 렌더링하는 것을 포함할 수 있다. 렌더링은 프레임 및 디블로킹 영역 경계를 작성하는 것을 더 포함할 수 있다.
708에서, 클라이언트는 절차를 종료할 수 있다.
도 8은 원격 컴퓨팅을 위한 개선된 전송 프로토콜을 제공하는 예시적인 네트워크 스택을 도시한다. 네트워크 스택은 전술한 바와 같이 서버에 의해 제공될 수 있다.
애플리케이션(801)은 서버 상에서 실행될 수 있다. 전술한 바와 같이, 애플리케이션(801)은 그래픽 출력을 제공하는 서버 상에서 실행되는 임의의 소프트웨어일 수 있다. 예를 들어, 소프트웨어는 사용자가 원하는 기능에 대하여 사용자 인터페이스를 제공하는 애플리케이션일 수 있다.
신뢰 채널(802)은 보장된 전송 패킷을 제공할 수 있다. 신뢰 채널(802)은 전술한 바와 같이 신뢰 큐에 대응할 수 있다.
비신뢰 채널(803)은 보장되지 않는 패킷 전송을 제공할 수 있다. 비신뢰 채널(803)은 전술한 바와 같이 비신뢰 큐에 대응할 수 있다.
FEC(804)를 이용하는 비신뢰 채널은 포워드 에러 보정을 이용하는 패킷의 보장되지 않는 전송을 제공할 수 있다. FEC(804)를 이용하는 비신뢰 채널은 전술한 바와 같이 FEC를 이용하는 비신뢰 큐에 대응할 수 있다. FEC는 필요한 경우에 잃어버린 패킷의 재구축을 허용하도록 패킷 사이에 리던던시를 제공한다. 이는 최소 추가 오버헤드를 갖는 채널의 신뢰성을 증가시킨다.
전술한 각 큐는 하나 이상의 채널과 관련될 수 있다. 각 채널은 우선 순위 레벨과 관련될 수 있다. 네트워크 스택은 우선 순위 레벨에 따라 각 채널을 처리할 수 있다. 또한, 채널은 필요한 경우 여러 개의 실행 애플리케이션 사이에서 분할될 수 있다.
네트워크 피드백 모듈(805)은 네트워크 혼잡을 모니터하고, 필요에 따라 전송 파라미터를 수정한다. 예를 들어, 충돌에서의 증가가 네트워크에서 검출되면, 전송 레이트가 감소될 것이다. 증가된 패킷 손실이 검출되면, 시스템은 비보장 채널로부터 FEC를 이용하는 비보장 채널로 소정의 데이터 종류의 전송을 스위칭할 수 있다. 또한, 네트워크 상태에 따라, 대역폭과 패킷 손실 레벨에 영향을 미치는 FEC 파라미터가 조정될 수 있다. 유사하게, 적은 개수의 충돌이 검출되면, 네트워크 피드백 모듈(805)은 전송 레이트에서의 증가가 적당하다는 것을 나타낼 수 있다.
디멀티플렉서(806)는 네트워크 수송으로부터 수신된 패킷을 디멀티플렉싱한다. 패킷은 적합한 채널로 멀티플렉싱된다. 예를 들어, 각 패킷은 속하는 채널을 식별하는 채널 식별기를 포함할 수 있다.
멀티플렉서 및 패킷 큐(807)는 네트워크 수송을 통해 채널로부터의 패킷을 전송을 위한 패킷 큐로 멀티플렉싱한다. 전술한 바와 같이, 각 패킷은 채널 식별기를 포함할 수 있다. 멀티플렉서는 상이한 채널의 우선 순위를 고려한다.
ACK 전송기 모듈(808)은 신뢰 채널에 대하여 클라이언트로부터 필요한 수신 확인을 수신할 수 있다. 수신기는 수신된 패킷의 패킷 식별기를 주기적으로 전송한다. 예를 들어, 패킷 식별기는 ACK 벡터 청크로서 전송될 수 있다. ACK 전송기 모듈(808)이 ACK 벡터 청크를 수신하면, 식별된 패킷은 수신기에 의해 수신된 것으로 알려진다.
혼잡 제어(809)는 혼잡 제어 모듈을 실행할 수 있다. 네트워크 전송 프로토콜에서의 효율적인 혼잡 제어는 혼잡 붕괴를 방지한다. 혼잡 붕괴가 발생하면, 유용한 처리량이 혼잡, 높은 패킷 손실 및 높은 패킷 때문에 거의 발생하지 않는다. 종래의 혼잡 제어 알고리즘은 TCP 및 다른 네트워크 프로토콜에서 구현되지만, 높은 대역폭 링크를 이용하는 짧은 대기 시간의 고품질 데이터 스트림 전달을 전달하는데 충분히 효율적이고 적극적이지 않다. 일 실시예에서, 네트워크 수송 프로토콜은 사용가능한 대역폭을 효율적으로 탐색하고 사용가능한 네트워크 용량을 활용하는 상이한 혼잡 제어 메커니즘을 이용할 수 있다.
용어 및 정의
네트워크 혼잡( Network Congestion ) - 네트워크 혼잡은 링크 또는 노드가 너무 많은 데이터를 운반하고 있어 그 서비스 품질이 손상될 때 발생한다. 전형적인 효과는 큐 지연, 패킷 손실 또는 새로운 연결에 대한 차단을 포함한다.
혼잡 신호( Congestion Signal ) - 혼잡이 네트워크 경로에서 발생하였다는 통지. 이것은 2개의 연속하는 손실되거나 타임아웃(timeout)된 패킷에 의해 트리거된다.
RTT ( Round Trip Time ) - 패킷이 특정 소스로부터 특정 목적지로, 그리고 다시 반대로 이동하는데 필요한 시간.
IPG ( Inter Packet Gap ) - 전송기에 의해 전송된 연속하는 패킷 사이의 시간 지연.
라운드( Round ) - 알고리즘의 한 단계. 라운드 시간은 평균 RTT와 동일하여, i번째 라운드에서 이루어진 동작은 (i-1)번째 단계에서 이루어진 동작에 대한 네트워크 반응에 대한 응답이다.
혼잡 제어 알고리즘 설명
알고리즘은 레이트 기반이며, IPG 값을 통해 데이터 레이트를 제어한다. 대조적으로, TCP는 혼잡 윈도우 값을 이용한다. 알고리즘은 입력으로서 RTT 샘플 및 혼잡 신호를 취한다.
RTT 샘플은 각각의 전송된 패킷에 대하여 계산된다. RTT 샘플은 패킷이 전송되고 수신 확인되는 사이의 시간 지연이다. 따라서, RTT 샘플은 각각의 수신 확인된 패킷으로 도착한다. RTT 샘플이 주어지면, 다음의 유도된 특성을 계산할 수 있다:
RTT - 이득 α를 갖는 수신된 RTT 샘플의 지수 평균.
DetailedRTT - 이득 β(β > α)를 갖는 수신된 RTT 샘플의 지수 평균.
RTTVariance - 평균 RTT로부터의 RTT 샘플의 변동량.
BaseRTT - 지금까지의 RTT 샘플의 하한의 근사값.
RTT는 긴 시간 구간 동안의 평균이고, DetailedRTT는 더 짧은 구간 동안의 평균이고, BaseRTT는 혼잡하지 않은 네트워크에 대한 최소 획득가능 RTT의 근사값이다.
이러한 값으로부터, 다음의 3차원 변수를 유도할 수 있다:
Figure 112012034134260-pct00001

Figure 112012034134260-pct00002

Figure 112012034134260-pct00003

Feedback은 평균 상태에 관한 현재의 라우터의 큐 상태를 특성화한다. Feedback은 보통 (0.5, 1.5)의 범위에 있지만, 이론적으로 임의의 양수일 수 있다.
Qd - 범위 [0, 1]에 있는 상세한 큐 인자. 이는 작은 시간 스케일에서 라우터 상에서의 현재의 큐 지연을 특성화한다. 0은 작은 큐를 나타내고, 1은 큰 큐를 나타낸다.
Qa - 범위 [0, 1]에 있는 평균 큐 인자. 이는 큰 시간 스케일에서 라우터 상에서의 현재의 큐 지연을 특성화한다.
제어는 IPG 값을 변경하는 것을 통해 수행된다. 전송기는 연속하는 패킷 사이의 시간 지연이 혼잡 제어 알고리즘으로부터 획득된 IPG보다 더 큰 것을 보장한다. IPG는 각 전송 패킷 후에 변경하고, 다음의 방법으로 계산될 수 있다.
Figure 112012034134260-pct00004

여기에서,
BaseIPG i - 현재 라운드에 대한 IPG의 원하는 값. 이는 각 라운드 또는 혼잡 신호에 응답하여 업데이트된다.
Q thresh - 큐 인자에 대한 임계값. 큐 인자가 이러한 임계값을 초과할 때, 추가의 측정이 라우터 상에서 큐 크기를 감소시키기 위하여 IPG를 감소시키는데 적용된다.
BaseIPG i 는 다음의 알고리즘에 따라 업데이트된다:
혼잡이 발생하면,
BaseIPG i +1 = BaseIPGi ·A이고, 여기에서 A > 1(보통 2에 가깝다)이다.
혼잡이 i번째 라운드에서 발생하지 않는다면,
Figure 112012034134260-pct00005
이고, 여기에서,
Figure 112012034134260-pct00006
이고,
Figure 112012034134260-pct00007
는 이른바 단계(step)이다.
상기 수학식은 패킷 레이트를 이용하여 설명될 수 있다. 패킷 레이트는 초당 전송되는 패킷의 수이다. 상세한 IPG 제어를 고려하지 않고, 패킷 레이트는 다음과 같이 표현될 수 있다:
Figure 112012034134260-pct00008

그리고, 상기 수학식으로부터,
Figure 112012034134260-pct00009

를 유도할 수 있다.
BaseIPG가 높은(>Q allowed ) 평균 큐 인자의 경우에 추가의 감소를 갖는 변경된 AIMD(Additive Increase Multiplicative Decrease) 스킴에 따라 업데이트된다.
연결 구축 시컨스
서버는 연결을 경청한다; 클라이언트가 연결된다(TCP에서와 같이).
4웨이 핸드쉐이크(handshake). DoS 공격에 대한 더 높은 저항력.
3웨이 셧다운. TCP에서와 같이 위조(bogus)가 없는 절반이 닫힌 상태.
연결 구축 및 셧다운을 위한 정확한 시컨스가 아래에서 논의된다.
네트워크 수송(810)은 UDP/IP와 같은 종래의 프로토콜에 의해 제공될 수 있다. 다른 프로토콜이 사용될 수 있지만 네트워크 스택의 많은 이점을 없앨 수 있다는 것이 이해될 것이다. 예를 들어, TCP/IP를 사용하는 것은, 사용된 채널에 관계없이, 모든 패킷의 보장 전달을 제공할 수 있지만, 상당한 프로세서 및 대역폭 오버헤드를 추가한다.
도 9는 영역 검출기 모듈을 제공하기 위하여 서버에 의해 실행되는 예시적인 절차를 도시한다. 영역 검출기는 움직임을 검출하고 그래픽 및 비디오 명령의 스트림을 모니터링함으로써 그래픽 출력에서의 각 영역에 대한 적합한 인코딩 스킴을 결정한다.
그래픽 출력은 먼저 영역으로 분할된다. 일 실시예에서, 영역이 상대적으로 정적이고 텍스트 그리기와 같은 2D 그래픽 API 명령에 의해 생성된 문자 또는 간단한 그래픽을 포함하는 경우에, 그래픽 명령 인코딩이 적용된다. 비디오 인코딩은 집중적인 움직임을 갖는 영역에 대하여 적용된다. 디코딩 코덱 CPU 리소스가 수신기에서 사용가능하면, 통과 비디오 인코딩은 미디어 API 명령을 이용하여 비디오 스트림을 플레이함으로써 생성된 비디오를 갖는 영역에 대하여 사용될 수 있다.
프로그레시브 웨이브릿 기반의 코덱은 자주 천천히 변동하는 큰 동작 부분을 갖는 영역에 적용된다. 이러한 영역의 예는 3 내지 5초 마다 이미지를 변경하는 사진 슬라이드쇼일 수 있다. 간단한 무손실 픽쳐 압축이 너무 빠르게 변동하지 않는 작은 영역에 대하여 사용된다. 또한, 본 시스템은 전술한 바와 같이 분산 캐시 시스템을 이용한다.
영역 검출기는 상대적으로 고주파수(초당 25 프레임 이상)를 갖는 비트맵(또는 프레임) Fk(901)를 제공하는 프레임 캡쳐링 방법에 의존한다. 그 다음, 영역 검출기는 후술되는 간단한 모션 검출 루틴(902)을 적용하여 프레임 Fk(901)에 대한 "모션 클래스 맵(motion class map)" Ck(905)를 계산한다.
결과에 따른 Ck(905)는 후술하는 바와 같이 그리드의 각 블록에 대하여 할당된 모션 강도를 갖는 수에 대한 맵이다. 그 다음, 단계 903은 후술되는 바와 같이 미리 정의된 범위 내에서 Ck의 레벨을 갖는 마이크로 영역에 대한 볼록 외피(hull)인 영역 집합 {R1 k, R2 k, …, RN k}(907)을 구축한다. 일 실시예에서, 마이크로 영역에 대한 볼록 외피를 구축하는 단계는 효율의 목적을 위해 생략될 수 있다(이는 더 간단하고 덜 지능적인 알고리즘을 제공할 것이다).
영역은, 영역의 모션 강도에 기초한 색상이 할당될 수 있다. 집중된 모션을 갖는 영역은 적색이고, 모션이 없는 영역은 백색이다. 나타나기 시작하는 산발적인 모션을 갖는 영역은 녹색이고, 모션이 느린 영역은 황색이다. 이러한 통합된 영역(907)은 마크로 영역이라 불리며, 모션 클래스 맵 Ck(905)와 함께 매크로 영역 분석기(908)에 대한 입력으로서 통과된다. 통합된 영역이 구축되지 않았다면, 매크로 영역 분석기 알고리즘은 덜 지능적이지만, 단순화되고 더 빨라진다. 이것은 구현하는 동안의 트레이드 오프로서 고려될 수 있다.
또한, 매크로 영역 분석기(908)는, 전술한 바와 같이, 그래픽 API 명령(예를 들어, GDI) 및 비디오 API 명령(예를 들어, DirectShow)의 스트림을 모니터한다. 분석기(908)는 비디오 인코더(912), 픽쳐 인코더 타입 1(큰 픽쳐)(910) 및 픽쳐 인코더 타입 2(작은 이미지 요소)(911)에 의해 사용된 영역 세트를 출력한다. 또한, 분석기(908)는 913에서 네트워크를 통해 전송되지 않을 그래픽 및 비디오 명령을 버린다.
영역 세트(909)("전송하지 않는다")에 대하여, 그래픽/비디오 API 명령 인코딩이 사용될 수 있거나, 또는 정보가 전혀 전송될 필요가 없다(픽쳐는 정적이다).
일 실시예에서, "적색" 영역은 비디오로 인코딩되거나, 916에서 비디오 통과를 이용하여 전송될 것이다. GDI 명령(GDI 영역은 녹색 영역과 중첩한다)에 의해 모션이 생성되는 "녹색" 영역은 GDI 명령 인코딩으로 전송될 수 있다. 이 대신에, 영역 크기에 따른 "크거나" 또는 " 작은" 픽쳐 코덱이 영역을 인코딩하는데 사용될 수 있다. "황색" 영역은 픽쳐 코덱으로 인코딩될 수 있다: 영역이 작은 영역에 대하여 크고 간단하다면, 프로그레시브하다. 이들은 간단한 발견적 방법의 예인 것이 주목되어야 한다. 그러나, 유용하게는, 마이크로 및 매크로 영역을 조작하는 다른 기술 및 그 내용이 개발될 수 있다는 것이 이해되어야만 한다.
914에서, 타입 1의 픽쳐 인코더는 프로그레시브한(예를 들어, 웨이블릿 기반) 이미지 인코더일 수 있다. 인코더는 상대적으로 큰 이미지(폭과 높이는 임계값 Wmax 및 Hmax를 초과한다)에만 적용된다.
915에서, 타입 2의 픽쳐 인코더는 단순하고 빠른 무손실 이미지 압축기이다. 인코더는 일반적으로 블록 크기의 작은 이미지(폭과 높이는 임계값 Wmax 및 Hmax를 초과하지 않는다)에만 적용된다.
매크로 영역 분석기에 대한 발견적 방법이 아래에서 더 설명된다.
도 10은 간단한 모션 검출기 모듈을 제공하기 위하여 서버에 의해 실행되는 예시적인 절차를 도시한다.
1001에서, 서버는 컴퓨터가 생성한 프레임인 Fk를 수신하고, k는 프레임의 수이다.
1002에서, 서버는 아래에서 사용되는 비디오 인코딩 코어(core)의 매크로 블록 구조에 따라 (p x q) 사각 블록 또는 정사각 블록 bk p , q로 Fk를 분할한다.
1003에서, 프레임 Fk의 각 블록 bk i , j에 대하여, 서버는 블록을 이전 프레임 Fk-1의 동일한 블록 bk -1 i, j와 비교한다.
1004에서, 서버는 블록 bk i , j 이 bk -1 i, j와 동일한지 여부를 시험한다. 동일하다면, 서버는 1005a 로 진행한다. 동일하지 않다면, 서버는 1005b로 진행한다.
1005a에서, 서버는 마이크로 영역 bi , j에 대한 모션 점수 mk i , j를 감소시켜, mk i, j = mk i , j - Δ1로 설정하고, Δ1은 음이 아닌 정수이다. 예시적인 일 구현예에서, Δ1 = 1이다.
1005b에서, 서버는 마이크로 영역 bi , j에 대한 모션 점수 mk i , j를 증가시켜, mk i, j = mk i , j + Δ2로 설정하고, Δ2는 음이 아닌 정수이다. 예시적인 일 구현예에서, Δ2 = 4이다.
1006에서, 서버는 다음과 같이 모션 점수 mk i , j의 값에 기초하여 각 마이크로 영역 bi , j 모션 클래스 ("색상") ck i , j를 할당한다:
mk i , j = 0이면, ci , j = 0 (모션 클래스 "투명"),
0 < mk i , j < T1이면, ck i , j = 1 (모션 클래스 "녹색"),
T1 ≤ mk i , j < T2이면, ck i , j = 2 (모션 클래스 "황색"),
T2 ≤ mk i , j < T3이면, ck i , j = 3 (모션 클래스 "적색");
여기에서, T1, T2, T3은 모션 점수 mi , j에 대한 임계값이다. 예시적인 일 구현례에서, T1 = 10, T2 = 20, T3 = 30이다.
1007에서, 서버는 ck i , j의 (p x q) 값의 직사각형 배열 Ck를 출력한다.
서버가 현재의 프레임 레이트의 빈도(일반적으로 초당 20 내지 40회)로 예시된 절차 루틴을 수행한다는 것이 이해될 것이다.
도 11a는 제1 모션 검출의 예시적인 스크린샷을 도시한다. 디스플레이된 웹사이트 스크린샷은 2개의 모션이 집중된 영역을 가진다. 영역(1101)은 빠르게 변동하는 플래시 영역이기 때문에 "적색"으로 인식되었다. 영역(1102)은 어도비 플래시 비디오이기 때문에 "적색"으로 인식되었다. 모션이 덜 집중된 영역(1101)의 오른쪽에는 정사각형이 있다. 마이크로 영역은 간단한 무손실 픽쳐 코덱을 이용하여 인코딩될 것이다. 또한, 픽쳐 요소는 캐시화될 것이다.
도 11b는 제2 모션 검출의 예시적인 스크린샷을 도시한다. 디스플레이된 웹사이트 스크린샷은 전술한 것과 유사하지만, 녹색(1105) 및 하나의 황색(1104) 영역을 포함한다. 이러한 영역은 전술한 스크린샷과 약간 상이하고, OS 그래픽 API 명령에 의해 생성되지 않았다. 대신에, 이러한 영역들은 어도비 플래시 애니메이션으로서 생성되었고, 따라서 영역들은 간단한 무손실 픽쳐 코덱으로 인코딩될 것이다. 이 대신에, 영역들은 캐시화될 수 있고, 전송을 요구하지 않는다.
영역(1105)은 드물게 변동하는 큰 이미지를 포함한다. 이러한 매크로 영역에 대하여, 픽쳐 기반의 웨이블릿 코덱이 사용될 것이다.
영역(1103, 1106)은 계속 모션이 집중되고, 비디오 인코더를 이용하여 인코딩될 것이다.
도 11c는 제3 모션 검출의 예시적인 스크린샷을 도시한다. 디스플레이된 웹사이트 스크린샷은 전술한 것과 유사하지만, 픽쳐가 더 빠르게 변동하기 시작하였기 때문에, 영역(1108)은 녹색에서 황색으로 변동되었다. 영역 검출기는 인코딩을 위해 픽쳐 기반의 웨이블릿 코덱을 계속 사용할 수 있거나, 또는 영역 검출기는 비디오 영역으로서 전체 영역을 처리할 수 있다.
영역(1107, 1109)는 전술한 바와 같이 계속 인코딩된다.
도 12는 원격 컴퓨팅을 위한 개선된 전송 프로토콜을 제공하는 예시적인 비디오 인코더를 도시한다. 비디오 인코더는 H.264/MPEG-4 AVC와 같은 표준 비디오 인코딩 알고리즘 또는 전용의 짧은 대기 시간의 비디오 인코더를 구현할 수 있는 비디오 인코딩 코어(1205)를 포함한다. 소정의 상황이 표준에 호환되는 비디오 인코딩 코어를 요구하는 한편, 다른 상황은 개선된 성능을 위하여 전용의 해결책을 요구한다는 것이 이해될 것이다.
여기에서 설명되는 비디오 인코더는 이미지 위로 흑색 마스크를 오버레이하는 프레임 전처리기(1204)를 가진다. 이것은 비디오 인코더가 필요한 영역만을 처리하게 한다. 프레임 전처리기는 후술된다.
비디오 인코딩 코어 컨트롤러(1201)는 다양한 시스템 요소와 통신하여, 인코딩 코어를 소정의 파라미터로 초기화하거나, 이러한 파라미터(예를 들어, 이미지 크기 또는 비트 레이트)를 변경한다.
인코딩 코어의 다중 파라미터는 동시에 실행될 수 있어, 여러 해상도에 대한 동시 인코딩을 제공한다.
영역 히스토리/캐시(1202)는 영역 검출기 및 비디오 영역에 대한 빠른 예측 스위칭을 위한 이전의 분석으로부터 수십 개의 프레임과 영역 세트를 유지한다.
도 13은 그래픽 출력을 전처리하기 위한 예시적인 절차를 도시한다. 절차는 전술환 바와 같이 서버 상에서 실행될 수 있다. 설명된 절차의 목적은 상이한 영역 좌표 및 크기를 갖는 비디오 인코딩 코어의 빈번한 재초기화를 방지하기 위한 것이다. 이러한 절차는 시간 및 성능의 면에서 비용이 드는 것으로 판명되었다. 해결책은 큰 영역으로 이를 초기화하고, 비활성화 영역 위로 흑색층을 오버레이하여 이에 따라 비디오 인코딩 코어의 빌트인 모션 예측 절차의 리소스를 처리하는 것을 절약하며, 비전송을 가져다 주는 대부분의 경우에서 비활성화 영역의 효율적인 전송을 허용하는 것이다.
1301에서, 서버는 풀 사이즈의 크기(폭 x 높이)의 프레임 Fk(1308)의 비디오 인코딩 코어를 초기화한다.
1302에서, 서버는, 전술한 바와 같이, 매크로 영역 분석기로부터의 비디오 인코딩을 위한 영역 세트 {VR1 k, VR2 k, ..., VRN k}를 수신한다.
1303에서, 서버는 영역 {VR1 k, VR2 k, ..., VRN k}의 이미지를 흑색(#000000)의 색상과 프레임 Fk의 크기와 동일한 크기 W x H를 갖는 직사각형 BLANKWxH 위로 오버레이하여, 프레임 F'k를 획득한다. F'k = BLANKWxH + VR1 k + VR2 k + ... + VRN k이고, 여기에서 "+" 연산은 비트맵에서 수행되는 논리합(OR)을 나타낸다. VR1 k(1306), VR2 k(1307) 및 VR3 k(1309)가 도시된다.
1304에서, 서버는, 전술한 바와 같이, 비디오 인코딩 코어에 대한 입력으로서 프레임 시컨스 {F'k}를 제공한다. 예를 들어, 비디오 인코딩 코어는 H.264 표준을 활용할 수 있다.
1305에서, 서버는, 예를 들어 비디오 압축에 대한 H.264/MPEG-4 AVC 표준 또는 다른 표준을 이용하여 프레임 {F'k}를 인코딩한다.
도 14는 프로그레시브 픽쳐 인코더를 제공하는 예시적인 절차를 도시한다. 프로그레시브 픽쳐 인코더는 전술한 바와 같이 서버 상에서 실행될 수 있다. 픽쳐 인코더는 인코딩된 이미지를 제1 시리즈(1415) 및 제2 시리즈(1416)의 2개의 시리즈로 마련하기 때문에 프로그래시브이다. 1415에서, 서버는 LL 서브 대역을 전송하여 클라이언트 상에서 대략적인 이미지를 즉시 그린다.
제1 시리즈(1415)는 크기에서 더 작을 수 있고, 수신기로 신속하게 전송될 수 있어, 블러된(blurred) 버젼의 이미지를 제공한다. 대조적으로, 제2 시리즈(1416)는 더 많은 데이터를 갖는 압축된 픽쳐의 완전한 품질 버젼이다. 제2 시리즈(1416)는 더 큰 대기 시간으로 수신기에 전송될 수 있다.
인코더가 추가의 입상(granularity)을 제공할 수 있다는 것이 이해될 것이다. 이러한 인코더는 큰 이미지에 매우 적합하다는 것이 이해될 것이다.
제1 단계에서, 인코더는 입력 RGB 이미지(1401)를 YCbCr 색 공간(1402)으로 변환하여, Y 성분(1403), Cb 성분(1404) 및 Cr 성분(1405)을 생성한다. Y 성분은 루마(luma) 성분("밝기")이다. Cb 성분은 청색차(blue-difference) 크로마(chroma) 성분이다. Cr 성분은 적색차(red-difference) 크로마 성분이다.
제2 단계에서, 인코더는 각각의 상기 성분(1406 - 1408)의 각각에 대하여 Haar와 같은 이산 웨이블릿 변환을 적용한다. Cb 및 Cr 성분에 대한 처리 파이프라인은 Y 성분(도면에 도시)에 대한 것과 동일할 수 있다.
제3 단계에서, 인코더는 제1 데이터 시리즈를 위하여 LL 웨이브릿 서브 대역을 이용하고(네트워크(1409)로 전송하기 전에 RLE로 압축함), 그 다음 결과(1415)를 출력하기 전에 RLE 압축기(1413)로 결과를 압축한다. 단계(1413)는 LL 서브 대역으로부터의 결과를 전체 출력 크기로부터의 절반 이상으로 압축할 수 있다.
RLE(Run-length encoding)은 데이터 "런(run)"이 원래의 런이 아니라 단일 데이터 값과 카운트로서 저장되는 데이터 압축 형태이다("런"은 동일한 데이터 값이 연속하는 데이터 요소에서 발생하는 시컨스이다). RLE는 매우 간단하고 빠른 압축 알고리즘이다. 그러나, 다른 데이터 압축 알고리즘이 사용될 수 있다.
3개의 나머지 웨이블릿 서브 대역은 유사하게 처리된다. HL, LH 및 HH 서브 대역(1410 - 1412)은 출력(1416)되기 전에 RLE 압축기(1414)로 공급된다.
웨이블릿 서브 대역이 4개의 "서브 이미지"를 나타낸다는 것이 이해될 것이다. LL은 더 작은 버젼의 원 이미지를 나타내고, HH는 노이즈 레벨을 나타낸다는 것이 이해될 것이다. 서버 대역은 높은 정도의 상관을 가지며, 양호하게 압출될 수 있다(즉, RLE 알고리즘을 이용하여).
도 15a는 예시적인 패킷 구조를 도시한다. 패킷 포맷(1500)은 전술한 시스템에서의 사용을 위한 예시적인 하나의 패킷 포맷을 도시한다.
도 15b는 예시적인 청크 포맷을 도시한다. 일반적인 청크 포맷(1502)은 전술한 시스템에서의 사용을 위한 하나의 예시적인 청크 포맷을 나타낸다.
도 15c는 신뢰 및 비신뢰 채널에 대한 예시적인 청크 포맷을 도시한다. 청크 포맷(1504)은 전술한 시스템에서의 사용을 위한 하나의 예시적인 청크 포맷을 나타낸다.
도 15d는 FEC 채널에 대한 예시적인 청크 포맷을 도시한다. 청크 포맷(1506)은 전술한 시스템에서의 사용을 위한 하나의 예시적인 청크 포맷을 나타낸다.
도 15e는 예시적인 핑(ping) 청크 포맷을 도시한다. 핑 청크 포맷(158)은 전술한 시스템에서의 사용을 위한 하나의 예시적인 청크 포맷을 나타낸다.
도 15f는 예시적인 핑 응답 청크를 도시한다. 핑 응답 청크(1510)는 전술한 시스템에서의 사용을 위한 하나의 예시적인 청크 포맷을 나타낸다.
도 15g는 핸드쉐이크 시컨스를 도시한다. 1512에서, 클라이언트는 자신의 초기 시컨스 번호로 INIT를 전송함으로써 시작한다.
도 15h는 예시적인 init 청크를 도시한다. init 청크 포맷(1514)은 전술한 시스템에서의 사용을 위한 하나의 예시적인 청크 포맷을 나타낸다.
도 15i는 예시적인 init_ack 청크를 도시한다. init_ack 청크 포맷(1516)은 전술한 시스템에서의 사용을 위한 하나의 예시적인 청크 포맷을 나타낸다. 서버는 서버 초기 시컨스 번호와 쿠키(바이너리 데이터)를 포함하는 INIT_ACK와 응답한다.
도 15j는 예시적인 cookie_echo 청크를 도시한다. cookie_echo 청크 포맷(1518)은 전술한 시스템에서의 사용을 위한 하나의 예시적인 청크 포맷을 나타낸다. 상기의 init_ack 청크에 응답하여, 클라이언트는 F(쿠키)를 포함하는 COOKIE_ECHO와 응답한다.
도 15k는 예시적인 cookie_ack 청크를 도시한다. cookie_ack 청크 포맷(1518)은 전술한 시스템에서의 사용을 위한 하나의 예시적인 청크 포맷을 나타낸다. 상기의 cookie_ack 청크에 응답하여, 서버는 COOKIE_ACK를 전송하여 이에 따라 클라이언티에게 성공적인 연결에 대하여 통지한다. 서버는 성공적인 COOKIE_ECHO 후에만 임의의 높은 가중치의 내부 구조를 할당하여, 이에 따라 TCP에서의 SYN-flood와 유사한 공격을 방지한다.
도 15l은 예시적인 연결 셧다운 시컨스를 도시한다. 흐름(1522)은 피어(peer) 1이 모든 계류중인 데이터를 전송하고, 이어서 SHUTDOWN을 전송하는 것을 도시한다.
피어 2가 SHUTDOWN을 수신하면, 이는 모든 계류중인 데이터를 전송하고, 이어서 SHUTDOWN_ACK를 전송한다.
SHUTDOWN_ACK를 수신함에 따라, Pear 1은 COMPLETE를 전송하고, 따라서 피어 2에게 연결이 셧다운되었다는 것을 통지한다.
도 15m은 예시적인 셧다운 청크를 도시한다. 셧다운 청크 포맷(1524)은 전술한 시스템에서의 사용을 위한 하나의 예시적인 청크 포맷을 나타낸다.
도 15n은 예시적인 shutdown_ack 청크를 도시한다. shutdown_ack 청크 포맷(1526)은 전술한 시스템에서의 사용을 위한 하나의 예시적인 청크 포맷을 나타낸다.
도 15o는 예시적인 shutdown_complete 청크를 도시한다. shutdown_complete 청크 포맷(1528)은 전술한 시스템에서의 사용을 위한 하나의 예시적인 청크 포맷을 나타낸다.
전술한 수신기의 일 실시예는 콘택트 렌즈 디스플레이일 수 있다는 것이 이해될 것이다. 콘택트 렌즈 디스플레이는 본 명세서에 참조로서 편입되는 "Augmented Reality in a Contact Lens", IEEE Spectrum September 2009, http://www.spectrum.ieee.org/biomedical/bionics/augmented-reality-in-a-contact-lens/0 (2009년 9월 28일 최종 탐색)에서 논의된다. 이러한 콘택트 렌즈는 착용자에게 정보를 디스플레이하고, 무선 장치를 통해서 통신할 수 있다. 이러한 장치는 전술한 바와 같은 수신기로서 기능할 수 있고, 착용자의 시야에 그래픽을 오버레이함으로써 사용자의 리얼리티를 증강시킬 수 있다. 컴팩트한 장치이기 때문에, 이러한 장치는, 예를 들어 단지 그래픽 명령과 문자만을 렌더링하는 것과 같이 기능에서 제한될 수 있다. 이러한 장치의 일 실시예는 착용자가 자신의 환경에서의 객체에 초점을 맞춤에 따라 관련 텍스트를 디스플레이할 수 있다.
전술한 그래픽 출력이 3D 그래픽을 포함할 수 있다는 것이 이해될 것이다. 3D 그래픽은 다중 카메라에 의해 촬영되어 홀로그램 또는 다른 3D 이미지를 형성하도록 합성되는 특수 그래픽일 수 있다. 이러한 3D 그래픽은 전술한 시스템에 의해 용이하게 지원된다: 3D 그래픽은 서버에 의해 적합하게 압축되어 렌더링을 위해 수신기로 전송될 수 있다. 수신기가 적합한 컴퓨팅 소스와 렌더링 성능을 가진다고 가정하면, 3D 그래픽은 사용자에게 렌더링될 수 있다. 3D 그래픽은 본 명세서에 참조로서 편입되는 "3D: It's Nearly There" The Economist - Technology Quarterly. 2009년 9월 5일, p. 22에서 논의된다.
전술한 바와 같이, 본 발명의 일 실시예는 특히 그래픽 출력이지만 다른 종류의 출력도 될 수 있는 컴퓨터가 생성한 출력을 제공하는 시스템일 수 있다. 본 시스템은 디지털 정보를 운반하도록 구성된 네트워크를 포함한다. 본 시스템은 네트워크와 통신하는 서버를 포함하고, 서버는 애플리케이션과 출력 캡쳐링 및 인코딩 엔진 모듈(OCE 엔진)을 실행하도록 구성된다. 애플리케이션은 그래픽 출력을 제공한다. OCE 엔진 모듈은 애플리케이션으로부터의 다른 종류의 출력 및 그래픽을 인터셉트하도록 더 구성된다. OCE 엔진 모듈은 그래픽 출력을 그래픽 명령 및 비디오 코덱 데이터 중 적어도 하나로 변환하도록 더 구성된다. OCE 엔진은 (오디오 스트림, 데이터 파일 등의) 적합한 데이터 압축 및 인코딩 방법을 이용하여 다른 종류의 출력을 인코딩한다. OCE 엔진 모듈은 네트워크를 통해 변환된 출력을 전송하도록 더 구성된다. 본 시스템은 네트워크를 통해 서버와 통신하는 클라이언트를 포함하고, 클라이언트는 그래픽 및 비디오 디코딩 및 렌더링 모듈(GVDR 엔진)을 실행하도록 더 구성된다. GVDR 엔진 모듈은 변환되고 전송된 출력을 수신하는 것에 응답하여 그래픽 출력을 렌더링하도록 구성된다. GVDR 엔진 모듈은 클라이언트에서 사용자 입력을 인터셉트하도록 구성된다. GVDR 엔진 모듈은 서버 상에서 입력 처리 모듈에 인터셉트된 사용자 입력을 전송하도록 구성된다. OCE 엔진 모듈은 픽처 코덱 데이터 및 통과 데이터 중 적어도 하나로 그래픽 출력을 변환하도록 더 구성될 수 있다. OCE 엔진 모듈은 영역 검출기 모듈을 실행하도록 더 구성될 수 있다. 엔진 검출기 모듈은 복수의 영역으로 그래픽 출력을 분할하도록 구성된다. 여역 검출기 모델은 각 영역과 관련된 그래픽 출력을 변환하도록 구성된다. 그래픽 출력은 풀 모션 비디오를 포함할 수 있으며, 풀 모션 비디오는 복수의 영역 중 하나 내에 포함된다. 그래픽 명령은 유니버셜 중개 그래픽 명령 언어에 의해 표현될 수 있다. 클라우드 엔진 모듈은 클라이언트로부터 인터셉트된 사용자 입력을 수신하도록 더 구성된다. 서버 상의 입력 처리 모듈은 처리를 위하여 애플리케이션으로 인터셉트된 사용자 입력을 제공하도록 더 구성된다. 네트워크는 비신뢰적일 수 있으며, 네트워크를 통한 전송은 비보장적일 수 있다.
본 발명의 다른 실시예는 그래픽 출력을 제공하는 시스템일 수 있다. 시스템은 디지털 정보를 운반하도록 구성된 네트워크를 포함한다. 본 시스템은 네트워크와 통신하는 서버를 포함하고, 서버는 애플리케이션과 OCE 엔진을 실행하도록 구성된다. 애플리케이션은 그래픽 출력을 제공할 수 있다. OCE 엔진 모듈은 애플리케이션으로부터의 다른 종류의 컴퓨터가 생성한 출력 및 그래픽을 인터셉트하도록 더 구성된다. OCE 엔진 모듈은 인터셉트된 출력을 그래픽 명령 및 비디오 코덱 데이터로 변환하도록 더 구성된다. OCE 엔진 모듈은 네트워크를 통해 변환된 출력을 전송하도록 더 구성된다. 본 시스템은 네트워크를 통해 서버와 통신하는 복수의 클라이언트를 포함하고, 복수의 클라이언트는 각각 GVDR 엔진 모듈을 실행하도록 구성된다. GVDR 엔진 모듈은 변환되고 전송된 출력을 수신하는 것에 응답하여 그래픽 출력을 렌더링하도록 구성된다. GVDR 엔진 모듈은 사용자 입력을 인터셉트하도록 구성된다. GVDR 엔진 모듈은 서버 상에서 입력 처리 모듈에 인터셉트된 사용자 입력을 애플리케이션에 의한 처리를 위하여 전송하도록 구성된다.
본 발명의 다른 실시예는 컴퓨터가 생성한 다른 종류의 출력 및 그래픽을 출력하는 방법일 수 있다. 본 방법은 애플리케이션을 실행하는 것으로부터 그래픽 출력 또는 컴퓨터가 생성한 다른 종류의 출력을 인터셉트하는 단계를 포함한다. 본 방법은 인터셉트된 그래픽 출력을 그래픽 명령 및 비디오 코덱 데이터 중 적어도 하나로 변환하는 단계를 포함한다. 본 방법은 네트워크를 통하여 변환된 출력을 GVDR 엔진 모듈을 실행하는 클라이언트로 전송하는 단계를 포함한다. 전송하는 단계는, 변환된 출력을 신뢰 큐, 비신뢰 큐 및 포워드 에러 보정을 이용하는 비신뢰 큐로 파싱하는 단계 포함하고, 각 큐는 복수의 채널을 가진다. 전송하는 단계는 신뢰 큐를 전송하는 단계를 포함하고, 신뢰 큐에서의 각 패킷은 클라이언트에 의해 수신 확인되고, 신뢰 패킷 시컨스 번호를 포함한다. 전송하는 단계는, 비신뢰 큐를 전송하는 단계를 포함하고, 비신뢰 큐에서의 각 패킷은 비신뢰 패킷 시컨스 번호를 포함한다. 전송하는 단계는 포워드 에러 보정을 이용하는 비신뢰 큐를 전송하는 단계를 포함하고, 포워드 에러 보정을 이용하는 비신뢰 큐에서의 각 패킷은 손실된 패킷을 복구하기 위한 리던던트 정보를 포함하는 변환 코드를 포함한다. 인터셉트된 그래픽 출력은 픽쳐 코덱 데이터 및 통과 데이터 중 적어도 하나로 더 변환될 수 있다. 본 방법은 그래픽 출력을 복수의 영역으로 분할하는 단계를 포함한다. 본 방법은 각 영역과 관련된 그래픽 출력을 변환하는 단계를 포함한다. 그래픽 출력은 풀 모션 비디오를 포함할 수 있으며, 풀 모션 비디오는 복수의 영역 중 하나 내에 포함된다. 그래픽 명령은 유니버셜 중개 그래픽 명령 언어에 의해 표현될 수 있다. 신뢰 큐는 그래픽 명령을 전송하는데 이용될 수 있으며, 비신뢰 큐는 비디오 코덱 테이터를 전송하는데 이용된다. 변환된 출력을 전송하는 단계는 혼잡 제어에 기초하여 전송 대역폭을 조절하는 단계를 포함한다. 본 방법은 사용자 입력을 인트셉트하는 단계를 포함한다. 본 방법은 인트셉트된 사용자 입력을 처리를 위해 실행되는 애플리케이션에 제공하는 단계를 포함한다.
본 발명의 다른 실시예는 그래픽 출력을 수신하는 방법일 수 있다. 본 방법은 서버로부터 네트워크를 통해 변환된 출력을 수신하는 단계를 포함하고, 서버는 그래픽 출력과, 그래픽 출력을 변환된 출력으로 변환하는 OCE 엔진 모듈을 제공하는 애플리케이션을 실행한다. 수신하는 단계는, 신뢰 큐를 수신하는 단계를 더 포함하고, 신뢰 큐에서의 각 패킷은 신뢰 패킷 시컨스 번호를 포함하고, 신뢰 큐를 수신하는 단계는 신뢰 큐 패킷을 수신하는 것에 응답하여 수신 확인을 서버로 전송하는 단계를 더 포함한다. 수신하는 단계는, 비신뢰 큐를 수신하는 단계를 더 포함하고, 비신뢰 큐에서의 각 패킷은 비신뢰 패킷 시컨스 번호를 포함한다. 수신하는 단계는, 포워드 에러 보정을 이용하는 비신뢰 큐를 수신하는 단계를 더 포함하고, 포워드 에러 보정을 이용하는 비신뢰 큐에서의 각 패킷은 손실된 패킷을 복구하기 위한 리던던트 정보를 포함하는 변환 코드를 포함한다. 수신하는 단계는, 신뢰 큐, 비신뢰 큐 및 포워드 에러 보정을 이용하는 비신뢰 큐를 컴파일하는 단계를 더 포함한다. 본 방법은 변환되고 수신된 출력으로부터 그래픽 출력을 렌더링하는 단계를 포함한다. 본 방법은 사용자 입력을 인터셉트하는 것에 응답하여, 클라우드 엔진 모듈로 인터셉트된 사용자 입력을 전송하는 단계를 포함한다. 사용자 입력은 신뢰 큐를 통해 서버에 전송될 수 있다. 수신하는 단계는 지터 버퍼에 의해 처리하는 단계를 더 포함한다. 변환된 출력은 그래픽 명령, 비디오 코덱 데이터, 픽쳐 코덱 데이터 및 통과 데이터 중 적어도 하나를 포함한다. 그래픽 출력은 복수의 영역으로 분할되고, 각 영역과 관련된 그래픽 출력은 그래픽 명령, 비디오 코덱 데이터, 픽쳐 코덱 데이터 및 통과 데이터 중 적어도 하나로 변환된다. 그래픽 출력은 풀 모션 비디오를 포함하며, 풀 모션 비디오는 복수의 영역 중 하나 내에 포함된다.
본 명세서에서 설명된 특정 실시예는 본 발명의 예 또는 실시예를 나타내며, 본질적으로 한정이 아닌 예시이다. 전술한 설명에서, 설명의 목적으로, 다양한 구체적 상세가 본 발명의 완전한 이해를 제공하기 위하여 설명된다. 그러나, 본 발명이 구체적인 상세 없이 실시될 수 있다는 것이 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에게 자명할 것이다.
"일 실시예" 또는 "실시예" 또는 "일부 실시예"에 대한 명세서에서의 언급은 실시예와 관련하여 설명된 특정 특징, 구조 또는 설명이 본 발명의 적어도 하나의 실시예에 포함된다는 것을 의미한다. 다양한 실시예에 대한 특징 및 양태는 다른 실시예로 통합될 수 있으며, 본 명세서에서 예시된 실시예들은 예시되거나 설명된 모든 특징 또는 양태 없이 구현될 수 있다. 이전의 예 및 실시예들은 예시적이며 비한정적이라는 것이 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에게 이해될 것이다.
시스템, 장치 및 방법이 가장 실용적이고 효율적인 실시예로 현재 고려되는 것에 의해 설명되었지만, 본 개시 내용은 개시된 실시예에 한정될 필요가 없다는 것이 이해되어야 한다. 본 명세서의 숙독 및 도면의 연구에 따른 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에게 자명한 모든 치환, 향상, 균등, 조합 및 개선은 본 발명의 진정한 기술적 사상 및 범위에 포함되도록 의도된다. 본 개시 내용의 범위는 이러한 모든 수정물 및 유사한 구조를 포함하도록 가장 넓게 해석되어야 한다. 따라서, 본 출원은 본 발명의 진정한 기술적 사상 및 범위 내에 있는 이러한 모든 수정물, 치환물 및 균등물을 포함하도록 의도된다.

Claims (34)

  1. 디지털 컴퓨터 네트워크를 통해 클라이언트와 통신하는 서버; 및
    상기 서버에 의해 실행가능한 애플리케이션 프로그램
    을 포함하고,
    상기 애플리케이션 프로그램은 컴퓨터가 생성한 출력을 제공하며,
    상기 서버는,
    상기 애플리케이션 프로그램으로부터의 상기 컴퓨터가 생성한 출력을 인터셉트하고,
    상기 컴퓨터가 생성한 출력을 그래픽 명령 및 비디오 코덱 데이터 중 적어도 하나로 변환하고,
    변환된 상기 출력을 상기 네트워크를 통해 전송하도록
    구성되고,
    상기 클라이언트는,
    그래픽 및 비디오를 실행, 디코딩 및 렌더링하고,
    변환되어 전송된 상기 출력을 수신하는 것에 응답하여 그래픽 출력을 렌더링하고,
    사용자 입력을 인터셉트하고,
    인터셉트된 상기 사용자 입력을 상기 네트워크를 통해 상기 서버로 전송하도록
    구성되고,
    상기 서버는,
    상기 그래픽 출력을 픽쳐 코덱 및 통과 데이터 중 적어도 하나로 변환하고,
    상기 그래픽 출력을 복수의 영역으로 분할하고,
    각 영역과 관련된 그래픽 출력을 변환하고,
    복수의 영역 사이의 경계 영역을 스무딩하도록
    더 구성되고,
    상기 그래픽 출력은, 풀 모션 비디오를 포함하며, 상기 풀 모션 비디오는 상기 복수의 영역 중 하나에 포함되는,
    시스템.
  2. 삭제
  3. 삭제
  4. 삭제
  5. 제1항에 있어서,
    상기 그래픽 명령은, 유니버셜 중개 그래픽 명령 언어에 의해 표현되는,
    시스템.
  6. 제1항에 있어서,
    상기 서버는,
    상기 클라이언트로부터 인터셉트된 상기 사용자 입력을 수신하고,
    인터셉트된 상기 사용자 입력을 처리를 위하여 상기 애플리케이션 프로그램에 제공하도록
    더 구성되는,
    시스템.
  7. 제1항에 있어서,
    상기 네트워크는 비신뢰적(unreliable)이고, 상기 네트워크를 통한 전송은 비보장적인(non-guaranteed),
    시스템.
  8. 디지털 컴퓨터 네트워크를 통해 클라이언트와 통신하는 서버; 및
    상기 서버에 의해 실행가능한 애플리케이션 프로그램
    을 포함하고,
    상기 애플리케이션 프로그램은 컴퓨터가 생성한 출력을 제공하며,
    상기 서버는,
    상기 애플리케이션 프로그램으로부터의 상기 컴퓨터가 생성한 출력을 인터셉트하고,
    상기 컴퓨터가 생성한 출력을 그래픽 명령 및 비디오 코덱 데이터 중 적어도 하나로 변환하고,
    변환된 상기 출력을 상기 네트워크를 통해 전송하도록
    구성되고,
    상기 클라이언트는,
    그래픽 및 비디오를 실행, 디코딩 및 렌더링하고,
    변환되어 전송된 상기 출력을 수신하는 것에 응답하여 그래픽 출력을 렌더링하고,
    사용자 입력을 인터셉트하고,
    인터셉트된 상기 사용자 입력을 상기 네트워크를 통해 상기 서버로 전송하도록
    구성되고,
    상기 서버는, 지역화된 모션 검출 루틴 및 모션 예측 루틴 중 적어도 하나를 이용하여 상기 그래픽 출력을 상기 비디오 코덱 데이터로 변환하도록 더 구성되고,
    상기 서버는, 상기 그래픽 출력을 복수의 영역 세트로 분할하고,
    각 영역 세트는 유사한 모션 특성을 공유하는,
    시스템.
  9. 제8항에 있어서,
    상기 서버는, 각 영역 세트에 대한 모션 점수를 계산하도록 구성되고,
    상기 모션 점수는 모션 특성을 나타내는,
    시스템.
  10. 제1항에 있어서,
    상기 서버는, 처리를 위하여 그래픽 활동을 갖는 영역을 선택하여 변환하기 전에 상기 그래픽 출력을 전처리하도록 더 구성되는,
    시스템.
  11. 제10항에 있어서,
    상기 전처리는 정적 영역을 가리도록 상기 그래픽 출력 상에 마스크를 오버레이하는 것을 포함하는,
    시스템.
  12. 제1항에 있어서,
    상기 서버는, 표준 기반 인코딩 코어 및 각 영역과 관련된 영역 히스토리를 포함하는 전용 인코딩 코어 중 적어도 하나로 상기 그래픽 출력을 상기 비디오 코덱 데이터로 인코딩하도록 더 구성되는,
    시스템.
  13. 제1항에 있어서,
    상기 서버는,
    RGB 이미지 데이터를 수신하고,
    상기 RGB 이미지 데이터 상에 웨이블릿 변환을 실행하고,
    변환된 상기 데이터를 LL 서브 대역 데이터를 포함하는 제1 시리즈와, HL 서브 대역 데이터, LH 서브 대역 데이터 및 HH 서브 대역 데이터를 포함하는 제2 시리즈로 분할하고,
    압축 후에 수신기로 상기 제1 시리즈를 전송하고,
    상기 제1 시리즈의 전송에 이어서, 압축 후에 상기 수신기로 상기 제2 시리즈를 전송하도록
    더 구성되는,
    시스템.
  14. 디지털 컴퓨터 네트워크를 통해 복수의 클라이언트와 통신하는 서버; 및
    상기 서버에 의해 실행가능한 애플리케이션 프로그램
    을 포함하고,
    상기 애플리케이션 프로그램은 컴퓨터가 생성한 그래픽 출력을 제공하며,
    상기 서버는,
    상기 애플리케이션 프로그램으로부터의 상기 컴퓨터가 생성한 그래픽 출력을 인터셉트하고,
    인터셉트된 상기 출력을 그래픽 명령 및 비디오 코덱 데이터 중 적어도 하나로 변환하고,
    변환된 상기 출력을 상기 네트워크를 통해 전송하도록
    구성되고,
    각각의 상기 클라이언트는,
    그래픽 및 비디오를 실행, 디코딩 및 렌더링하고,
    변환되어 전송된 상기 출력을 수신하는 것에 응답하여 상기 그래픽 출력을 렌더링하고,
    사용자 입력을 인터셉트하고,
    인터셉트된 상기 사용자 입력을 상기 네트워크를 통해 상기 서버로 전송하도록
    구성되고,
    상기 서버는,
    상기 그래픽 출력을 픽쳐 코덱 및 통과 데이터 중 적어도 하나로 변환하고,
    상기 그래픽 출력을 복수의 영역으로 분할하고,
    각 영역과 관련된 그래픽 출력을 변환하고,
    복수의 영역 사이의 경계 영역을 스무딩하도록
    더 구성되고,
    상기 그래픽 출력은, 풀 모션 비디오를 포함하며, 상기 풀 모션 비디오는 상기 복수의 영역 중 하나에 포함되는,
    시스템.
  15. 실행되는 애플리케이션으로부터 그래픽 출력을 인터셉트하는 단계;
    인터셉트된 상기 출력을 그래픽 명령 및 비디오 코덱 데이터 중 적어도 하나로 변환하는 단계;
    변환된 상기 출력을 네트워크를 통해 클라이언트로 전송하는 단계
    상기 그래픽 출력을 복수의 영역으로 분할하는 단계;
    각 영역과 관련된 그래픽 출력을 변환하는 단계; 및
    복수의 영역 사이의 경계 영역을 스무딩하는 단계
    를 포함하고,
    상기 전송하는 단계는,
    변환된 상기 출력을, 신뢰 큐(reliable queue), 비신뢰 큐(unreliable queue) 및 포워드 에러 보정(forward error correction)을 이용하는 비신뢰 큐로 파싱하는 단계로서, 각각의 큐는 복수의 채널을 가지고, 각 채널은 우선 순위와 관련된 단계;
    상기 신뢰 큐를 전송하는 단계로서, 상기 신뢰 큐에서의 각 패킷은 상기 클라이언트에 의해 수신 확인되고 신뢰 패킷 시컨스 번호를 가지는 단계;
    상기 비신뢰 큐를 전송하는 단계로서, 상기 비신뢰 큐에서의 각 패킷은 비신뢰 패킷 시컨스 번호를 가지는 단계; 및
    상기 포워드 에러 보정을 이용하는 비신뢰 큐를 전송하는 단계로서, 상기 포워드 에러 보정을 이용하는 비신뢰 큐에서의 각 패킷은 손실된 패킷을 복구하기 위한 리던던트 정보를 포함하는 변환 코드를 가지는 단계
    를 포함하고,
    인터셉트된 상기 출력은 픽쳐 코덱 및 통과 데이터 중 적어도 하나로 더 변환되고,
    상기 그래픽 출력은, 풀 모션 비디오를 포함하며, 상기 풀 모션 비디오는 상기 복수의 영역 중 하나에 포함되는,
    컴퓨터 구현 방법.
  16. 삭제
  17. 삭제
  18. 삭제
  19. 제15항에 있어서,
    상기 그래픽 명령은, 유니버셜 중개 그래픽 명령 언어에 의해 표현되는,
    컴퓨터 구현 방법.
  20. 제15항에 있어서,
    상기 신뢰 큐는 상기 그래픽 명령을 전송하는데 사용되고, 상기 비신뢰 큐는 상기 비디오 코덱 데이터를 전송하는데 사용되는,
    컴퓨터 구현 방법.
  21. 제15항에 있어서,
    상기 변환된 출력을 전송하는 단계는, 혼잡 제어에 기초하여 전송 대역폭을 조절하는 단계를 더 포함하는,
    컴퓨터 구현 방법.
  22. 제15항에 있어서,
    인터셉트된 사용자 입력을 수신하는 단계; 및
    인터셉트된 상기 사용자 입력을 처리를 위하여 실행되는 애플리케이션프로그램에 전송하는 단계
    를 더 포함하는,
    컴퓨터 구현 방법.
  23. 변환된 출력을 네트워크를 통해 서버로부터 수신하는 단계로서, 상기 서버는 그래픽 출력을 제공하는 애플리케이션을 실행하고 상기 그래픽 출력을 상기 변환된 출력으로 변환하는 단계;
    수신된 상기 변환된 출력으로부터 그래픽 출력을 렌더링하는 단계; 및
    사용자 입력을 인터셉트하는 것에 응답하여 인터셉트된 상기 사용자 입력을 전송하는 단계
    를 포함하고,
    상기 수신하는 단계는,
    신뢰 큐를 수신하는 단계로서, 상기 신뢰 큐에서의 각 패킷은 신뢰 패킷 시컨스 번호를 가지며, 신뢰 패킷 큐를 수신하는 것에 응답하여 상기 서버로 수신 확인을 전송하는 단계를 더 포함하는 단계;
    비신뢰 큐를 수신하는 단계로서, 상기 비신뢰 큐에서의 각 패킷은 비신뢰 패킷 시컨스 번호를 가지는 단계;
    상기 포워드 에러 보정을 이용하는 비신뢰 큐를 수신하는 단계로서, 포워드 에러 보정을 이용하는 비신뢰 큐에서의 각 패킷은 손실된 패킷을 복구하기 위한 리던던트 정보를 포함하는 변환 코드를 가지는 단계; 및
    상기 신뢰 큐, 상기 비신뢰 큐, 상기 포워드 에러 보정을 이용하는 비신뢰 큐를 수신된 상기 변환된 출력으로 컴파일하는 단계
    를 포함하고,
    상기 변환된 출력은, 그래픽 명령, 비디오 코덱 데이터, 픽쳐 코덱 데이터 및 통과 데이터 중 적어도 하나를 포함하고,
    상기 그래픽 출력은 복수의 영역으로 분할되고, 각 영역과 관련된 상기 그래픽 출력은 그래픽 명령, 비디오 코덱 데이터, 픽쳐 코덱 데이터 및 통과 데이터 중 적어도 하나로 변환되고,
    상기 그래픽 출력은 풀 모션 비디오를 포함하며, 상기 풀 모션 비디오는 상기 복수의 영역 중 하나에 포함되는,
    컴퓨터 구현 방법.
  24. 제23항에 있어서,
    상기 사용자 입력은 상기 신뢰 큐를 통해 상기 서버로 전송되는,
    컴퓨터 구현 방법.
  25. 제23항에 있어서,
    상기 수신하는 단계는, 지터 버퍼에 의해 처리하는 단계를 더 포함하는,
    컴퓨터 구현 방법.
  26. 제23항에 있어서,
    각 큐는 복수의 채널과 관련되고, 각 채널은 지터 버퍼로 인커밍 데이터를 처리하는,
    컴퓨터 구현 방법.
  27. 삭제
  28. 삭제
  29. 삭제
  30. 디지털 컴퓨터 네트워크를 통해 클라이언트와 통신하는 서버; 및
    상기 서버에 의해 실행가능한 애플리케이션 프로그램
    을 포함하고,
    상기 애플리케이션 프로그램은 컴퓨터가 생성한 그래픽 출력을 제공하며,
    상기 서버는,
    상기 애플리케이션 프로그램으로부터의 상기 컴퓨터가 생성한 출력을 인터셉트하고,
    상기 컴퓨터가 생성한 출력을 복수의 데이터 스트림으로 변환하고,
    변환된 상기 출력을 상기 네트워크를 통해 전송하도록
    구성되고,
    상기 클라이언트는,
    그래픽 및 비디오를 디코딩 및 렌더링하고,
    변환되어 전송된 상기 출력을 수신하는 것에 응답하여 상기 컴퓨터가 생성한 출력을 렌더링하고,
    사용자 입력을 인터셉트하고,
    인터셉트된 상기 사용자 입력을 상기 서버로 전송하도록
    구성되고,
    상기 서버는,
    상기 그래픽 출력을 픽쳐 코덱 및 통과 데이터 중 적어도 하나로 변환하고,
    상기 그래픽 출력을 복수의 영역으로 분할하고,
    각 영역과 관련된 출력을 변환하고,
    복수의 영역 사이의 경계 영역을 스무딩하도록
    더 구성되고,
    상기 그래픽 출력은, 풀 모션 비디오를 포함하며, 상기 풀 모션 비디오는 상기 복수의 영역 중 하나에 포함되는,
    시스템.
  31. 제30항에 있어서,
    상기 네트워크는 UDP 프로토콜 상에서 동작하는,
    시스템.
  32. 제30항에 있어서,
    상기 서버는, 대기 시간을 최소화하고 사용가능한 대역폭의 사용을 최적화하도록 혼잡 제어 모듈을 실행하도록 더 구성되는,
    시스템.
  33. 제30항에 있어서,
    상기 서버는, 현재의 네트워크 혼잡 레벨에 응답하여 FEC 파라미터를 조정하도록 네트워크 피드백 유닛을 실행하도록 더 구성되는,
    시스템.
  34. 제30항에 있어서,
    상기 서버는 인터셉터 모듈로 상기 컴퓨터가 생성한 출력을 인터셉트하고,
    상기 컴퓨터가 생성한 출력은 오디오 신호, 컴퓨터 데이터, USB 인터페이스 신호 및 프린트 스풀 중 적어도 하나인,
    시스템.
KR1020127011083A 2009-09-29 2010-09-24 짧은 대기 시간의 전송 프로토콜을 위한 방법 및 시스템 KR101443070B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/569,876 2009-09-29
US12/569,876 US8171154B2 (en) 2009-09-29 2009-09-29 Method and system for low-latency transfer protocol
PCT/US2010/050237 WO2011041229A2 (en) 2009-09-29 2010-09-24 Method and system for low-latency transfer protocol

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020147003517A Division KR20140024478A (ko) 2009-09-29 2010-09-24 짧은 대기 시간의 전송 프로토콜을 위한 방법 및 시스템

Publications (2)

Publication Number Publication Date
KR20120082434A KR20120082434A (ko) 2012-07-23
KR101443070B1 true KR101443070B1 (ko) 2014-11-03

Family

ID=43781660

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020147003517A KR20140024478A (ko) 2009-09-29 2010-09-24 짧은 대기 시간의 전송 프로토콜을 위한 방법 및 시스템
KR1020127011083A KR101443070B1 (ko) 2009-09-29 2010-09-24 짧은 대기 시간의 전송 프로토콜을 위한 방법 및 시스템

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020147003517A KR20140024478A (ko) 2009-09-29 2010-09-24 짧은 대기 시간의 전송 프로토콜을 위한 방법 및 시스템

Country Status (8)

Country Link
US (4) US8171154B2 (ko)
EP (1) EP2484091A4 (ko)
JP (1) JP2013506348A (ko)
KR (2) KR20140024478A (ko)
CN (1) CN102668495A (ko)
AU (1) AU2010300823A1 (ko)
CA (1) CA2774014A1 (ko)
WO (1) WO2011041229A2 (ko)

Families Citing this family (139)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8745173B1 (en) 2011-12-30 2014-06-03 hopTo Inc. Client computing system for and method of receiving cross-platform remote access to 3D graphics applications
US20080085817A1 (en) * 2003-09-22 2008-04-10 Brentlinger Karen W Exercise device for use in swimming
US9401937B1 (en) 2008-11-24 2016-07-26 Shindig, Inc. Systems and methods for facilitating communications amongst multiple users
US8405702B1 (en) 2008-11-24 2013-03-26 Shindig, Inc. Multiparty communications systems and methods that utilize multiple modes of communication
US9135024B2 (en) * 2008-11-30 2015-09-15 Red Hat Israel, Ltd. Playing multimedia content at remote graphics display client
US9674562B1 (en) * 2008-12-18 2017-06-06 Vmware, Inc. Quality evaluation of multimedia delivery in cloud environments
US9214004B2 (en) 2008-12-18 2015-12-15 Vmware, Inc. Watermarking and scalability techniques for a virtual desktop planning tool
US8788079B2 (en) 2010-11-09 2014-07-22 Vmware, Inc. Monitoring audio fidelity and audio-video synchronization
US9344745B2 (en) 2009-04-01 2016-05-17 Shindig, Inc. Group portraits composed using video chat systems
US9712579B2 (en) 2009-04-01 2017-07-18 Shindig. Inc. Systems and methods for creating and publishing customizable images from within online events
US8779265B1 (en) 2009-04-24 2014-07-15 Shindig, Inc. Networks of portable electronic devices that collectively generate sound
EP2302845B1 (en) 2009-09-23 2012-06-20 Google, Inc. Method and device for determining a jitter buffer level
US8171154B2 (en) 2009-09-29 2012-05-01 Net Power And Light, Inc. Method and system for low-latency transfer protocol
WO2011075670A1 (en) * 2009-12-18 2011-06-23 Google Inc. Matching encoder output to network bandwidth
GB2477793A (en) * 2010-02-15 2011-08-17 Sony Corp A method of creating a stereoscopic image in a client device
US8860364B2 (en) * 2010-04-23 2014-10-14 Qualcomm Incorporated Wireless power distribution among a plurality of receivers
US9172979B2 (en) 2010-08-12 2015-10-27 Net Power And Light, Inc. Experience or “sentio” codecs, and methods and systems for improving QoE and encoding based on QoE experiences
US8463677B2 (en) 2010-08-12 2013-06-11 Net Power And Light, Inc. System architecture and methods for experimental computing
WO2012021902A2 (en) 2010-08-13 2012-02-16 Net Power And Light Inc. Methods and systems for interaction through gestures
CN102375714A (zh) * 2010-08-16 2012-03-14 慧荣科技股份有限公司 计算机系统及相关的影像绘图装置和显示装置
US20120239729A1 (en) * 2010-09-13 2012-09-20 Neverware, Inc. Methods and apparatus for connecting a thin client to a virtual desktop
KR20120040958A (ko) * 2010-10-20 2012-04-30 삼성전자주식회사 휴대단말기의 통신 방법
WO2012054895A2 (en) * 2010-10-21 2012-04-26 Net Power And Light Inc. System architecture and method for composing and directing participant experiences
US20120154678A1 (en) * 2010-12-20 2012-06-21 Kuo-Lung Chang Receiving device, screen frame transmission system and method
US8886699B2 (en) * 2011-01-21 2014-11-11 Cloudium Systems Limited Offloading the processing of signals
US8838680B1 (en) 2011-02-08 2014-09-16 Google Inc. Buffer objects for web-based configurable pipeline media processing
BR112013025933A2 (pt) 2011-04-12 2017-11-07 Applied Science Inc sistemas e métodos para gerenciar doações de sangue
WO2012159640A1 (en) * 2011-05-20 2012-11-29 Dream Chip Technologies Gmbh Method for transmitting digital scene description data and transmitter and receiver scene processing device
US10162491B2 (en) * 2011-08-12 2018-12-25 Otoy Inc. Drag and drop of objects between applications
TWI446217B (zh) * 2011-08-23 2014-07-21 Askey Technology Jiang Su Ltd 按鍵之輸出值的程式化方法
US9578336B2 (en) 2011-08-31 2017-02-21 Texas Instruments Incorporated Hybrid video and graphics system with automatic content detection process, and other circuits, processes, and systems
US9712847B2 (en) 2011-09-20 2017-07-18 Microsoft Technology Licensing, Llc Low-complexity remote presentation session encoder using subsampling in color conversion space
US9571406B2 (en) * 2011-10-25 2017-02-14 Vmware, Inc. Network congestion management based on communication delay
WO2013066301A1 (en) 2011-10-31 2013-05-10 Hewlett-Packard Development Company, L.P. Reducing tcp timeouts due to incast collapse at a network switch
US9348552B2 (en) 2011-11-16 2016-05-24 Cisco Technology, Inc. Network appliance for transcoding or enriching virtual desktop infrastructure desktop images
US8667374B2 (en) * 2011-11-21 2014-03-04 Ciena Corporation Video transmission systems and methods over carrier ethernet
US9503497B2 (en) * 2011-12-10 2016-11-22 LogMeln, Inc. Optimizing transfer to a remote access client of a high definition (HD) host screen image
US9852432B2 (en) 2011-12-12 2017-12-26 International Business Machines Corporation Customizing a presentation based on preferences of an audience
KR101467430B1 (ko) * 2011-12-12 2014-12-01 주식회사 케이티 클라우드 컴퓨팅 기반 어플리케이션 제공 방법 및 시스템
US20130151624A1 (en) 2011-12-12 2013-06-13 International Business Machines Corporation Context-Sensitive Collaboration Channels
US9588652B2 (en) 2011-12-12 2017-03-07 International Business Machines Corporation Providing feedback for screen sharing
US9141264B2 (en) * 2011-12-14 2015-09-22 International Business Machines Corporation Variable refresh rates for portions of shared screens
US9124657B2 (en) 2011-12-14 2015-09-01 International Business Machines Corporation Dynamic screen sharing for optimal performance
US9223534B1 (en) 2011-12-30 2015-12-29 hopTo Inc. Client side detection of motion vectors for cross-platform display
US9183663B1 (en) 2011-12-30 2015-11-10 Graphon Corporation System for and method of classifying and translating graphics commands in client-server computing systems
US9367931B1 (en) 2011-12-30 2016-06-14 hopTo Inc. Motion vectors for cross-platform display
US8775545B1 (en) 2011-12-30 2014-07-08 hop To Inc. Image hosting for cross-platform display over a communication network
US9064292B1 (en) 2011-12-30 2015-06-23 hopTo, Inc. System for and method of classifying and translating graphics commands in client-server computing systems
US9454617B1 (en) 2011-12-30 2016-09-27 hopTo Inc. Client rendering
US8766990B1 (en) * 2011-12-30 2014-07-01 hopTo Inc. Server computing system for and method of providing cross-platform remote access to 3D graphics applications
US8922569B1 (en) * 2011-12-30 2014-12-30 hopTo Inc. Cloud based system for and method of translating between disparate 3D graphics languages in client-server computing environments
US8856262B1 (en) 2011-12-30 2014-10-07 hopTo Inc. Cloud-based image hosting
US8838749B1 (en) 2011-12-30 2014-09-16 hopTo Inc. Cloud based client computing system for and method of receiving cross-platform remote access to 3D graphics applications
US9218107B1 (en) 2011-12-30 2015-12-22 hopTo Inc. Cloud-based text management for cross-platform display
US8769052B1 (en) 2011-12-30 2014-07-01 hopTo Inc. Cloud-based server computing system for and method of providing cross-platform remote access to 3D graphics applications
JP6062639B2 (ja) 2012-01-25 2017-01-18 イプシロン ソフト コーポレイション ア.エス. クラウドにおけるファイルの拡張可能処理のためのシステム
US20130254417A1 (en) * 2012-03-21 2013-09-26 Jason Nicholls System method device for streaming video
US9106612B1 (en) * 2012-05-18 2015-08-11 hopTo Inc. Decomposition and recomposition for cross-platform display
US8990363B1 (en) * 2012-05-18 2015-03-24 hopTo, Inc. Decomposition and recomposition for cross-platform display
US9124562B1 (en) 2012-05-18 2015-09-01 hopTo Inc. Cloud-based decomposition and recomposition for cross-platform display
US9660855B2 (en) * 2012-06-29 2017-05-23 Cable Television Laboratories, Inc. Orthogonal signal demodulation
US8928680B1 (en) 2012-07-10 2015-01-06 Google Inc. Method and system for sharing a buffer between a graphics processing unit and a media encoder
KR101720654B1 (ko) * 2012-09-14 2017-03-28 한국전자통신연구원 가상화 시스템 및 가상화 서비스 제공방법
AU2013326854A1 (en) 2012-10-05 2015-04-30 Tactual Labs Co. Hybrid systems and methods for low-latency user input processing and feedback
US8763054B1 (en) 2012-11-02 2014-06-24 hopTo Inc. Cross-platform video display
US8776152B1 (en) 2012-11-02 2014-07-08 hopTo Inc. Cloud-based cross-platform video display
TW201419846A (zh) * 2012-11-09 2014-05-16 Inst Information Industry 動態解析度調節方法系統與動態解析度調節方法
EP2946554B1 (en) * 2013-01-17 2017-08-02 Huawei Technologies Co., Ltd. System, apparatus and method for sharing a screen having multiple visual components
WO2014113684A1 (en) 2013-01-17 2014-07-24 Futurewei Technologies, Inc. System, apparatus and method for sharing a screen having multiple visual components
US9257092B2 (en) * 2013-02-12 2016-02-09 Vmware, Inc. Method and system for enhancing user experience for remoting technologies
US9250782B1 (en) 2013-03-15 2016-02-02 hopTo Inc. Using split windows for cross-platform document views
US9430134B1 (en) 2013-03-15 2016-08-30 hopTo Inc. Using split windows for cross-platform document views
US20140286440A1 (en) * 2013-03-19 2014-09-25 Nvidia Corporation Quality of service management system and method of forward error correction
GB2514543B (en) * 2013-04-23 2017-11-08 Gurulogic Microsystems Oy Server node arrangement and method
US20140333639A1 (en) * 2013-05-13 2014-11-13 Qnx Software Systems Limited System and method for forwarding a graphics command stream
US20140333641A1 (en) * 2013-05-13 2014-11-13 2236008 Ontario Inc. System and method for forwarding a graphics command stream
EP2804095A1 (en) * 2013-05-13 2014-11-19 2236008 Ontario Inc. A system and method for forwarding a graphics command stream
US20140333640A1 (en) * 2013-05-13 2014-11-13 Qnx Software Systems Limited System and method for forwarding a graphics command stream
EP2804094A1 (en) * 2013-05-13 2014-11-19 2236008 Ontario Inc. A system and method for forwarding a graphics command stream
EP2809031B1 (en) * 2013-05-31 2023-09-27 Dassault Systèmes Communication middleware for managing multicast channels
US9210434B2 (en) * 2013-06-12 2015-12-08 Microsoft Technology Licensing, Llc Screen map and standards-based progressive codec for screen content coding
CN103368947B (zh) * 2013-06-21 2016-05-18 腾讯科技(北京)有限公司 一种媒体信息的控制方法及相关设备、系统
CN105378639A (zh) 2013-07-12 2016-03-02 触觉实验室股份有限公司 用限定的交叉控制行为降低控件响应等待时间
JP5994944B2 (ja) * 2013-07-22 2016-09-21 富士通株式会社 情報処理装置、方法、及びプログラム
JP5875555B2 (ja) * 2013-07-29 2016-03-02 株式会社デジタル 画像作成システム
CN103401876B (zh) * 2013-08-07 2017-02-22 武汉大学 一种基于变尺度窗口机制的VoIP服务安全保障方法与系统
US9386319B2 (en) 2013-09-05 2016-07-05 Microsoft Technology Licensing, Llc Post-process filter for decompressed screen content
CN105814852B (zh) * 2013-09-19 2019-02-19 华为技术有限公司 降低端到端网络报文传输延迟的传输和接收设备
US10976986B2 (en) * 2013-09-24 2021-04-13 Blackberry Limited System and method for forwarding an application user interface
US10115174B2 (en) * 2013-09-24 2018-10-30 2236008 Ontario Inc. System and method for forwarding an application user interface
US10158868B2 (en) * 2013-10-15 2018-12-18 Nvidia Corporation Systems and methods to limit lag between a client and a server for remote computing
US10271010B2 (en) 2013-10-31 2019-04-23 Shindig, Inc. Systems and methods for controlling the display of content
US9662199B2 (en) 2013-11-26 2017-05-30 Strathspey Crown Holdings, LLC Intraocular lens having input and output electronics
US20150161754A1 (en) * 2013-12-10 2015-06-11 Joel Solomon Isaacson System and method for remote graphics using non-pixel rendering interfaces
US9412332B2 (en) 2013-12-20 2016-08-09 Blackberry Limited Method for wirelessly transmitting content from a source device to a sink device
KR101671311B1 (ko) * 2014-02-27 2016-11-01 엔트릭스 주식회사 클라우드 스트리밍 서비스 시스템, 이를 위한 장치 및 클라우드 스트리밍 서비스 방법
EP2924563A1 (en) * 2014-03-27 2015-09-30 Hsiu-Ping Lin Methods and systems for communications between apps and virtual machines
US9912562B2 (en) * 2014-03-31 2018-03-06 Microsoft Technology Licensing, Llc Measuring latency in an interactive application
US9952751B2 (en) 2014-04-17 2018-04-24 Shindig, Inc. Systems and methods for forming group communications within an online event
US10051444B2 (en) * 2014-04-18 2018-08-14 Gadget Software, Inc. Application managing application
US9733333B2 (en) 2014-05-08 2017-08-15 Shindig, Inc. Systems and methods for monitoring participant attentiveness within events and group assortments
WO2015184462A1 (en) 2014-05-30 2015-12-03 Applied Science Inc Systems and methods for managing blood donations
KR102063093B1 (ko) * 2014-08-04 2020-01-07 에스케이플래닛 주식회사 클라우드 스트리밍 서비스 시스템, 메모리 병목 현상을 방지하기 위한 데이터 압축 방법 및 이를 위한 장치
EP3171601A4 (en) 2014-07-14 2018-05-16 SK TechX Co., Ltd. Cloud streaming service system, data compressing method for preventing memory bottlenecking, and device for same
US9711181B2 (en) 2014-07-25 2017-07-18 Shindig. Inc. Systems and methods for creating, editing and publishing recorded videos
CN105740081A (zh) * 2014-12-12 2016-07-06 华为技术有限公司 客户端、usb设备及显示处理系统和方法
US20160209968A1 (en) * 2015-01-16 2016-07-21 Microsoft Technology Licensing, Llc Mapping touch inputs to a user input module
US9734410B2 (en) 2015-01-23 2017-08-15 Shindig, Inc. Systems and methods for analyzing facial expressions within an online classroom to gauge participant attentiveness
US10255021B2 (en) * 2015-05-28 2019-04-09 Qualcomm Incorporated Low latency screen mirroring
EP3110100B1 (en) * 2015-06-24 2019-04-10 Tata Consultancy Services Limited System and method for managing virtual environments in an infrastructure
KR20170087350A (ko) * 2016-01-20 2017-07-28 삼성전자주식회사 전자 장치 및 전자 장치의 동작 방법
JP2017228241A (ja) * 2016-06-24 2017-12-28 富士通株式会社 画面送信方法、画面送信装置、及びプログラム
CN106027417B (zh) * 2016-07-05 2019-05-21 北京贝恩可科技有限公司 一种有效利用网络空余带宽传输数据的方法
US10133916B2 (en) 2016-09-07 2018-11-20 Steven M. Gottlieb Image and identity validation in video chat events
GB2555410B (en) * 2016-10-25 2020-11-04 Sony Interactive Entertainment Inc Video content synchronisation method and apparatus
US10715814B2 (en) 2017-02-23 2020-07-14 Netflix, Inc. Techniques for optimizing encoding parameters for different shot sequences
US11153585B2 (en) 2017-02-23 2021-10-19 Netflix, Inc. Optimizing encoding operations when generating encoded versions of a media title
US10742708B2 (en) 2017-02-23 2020-08-11 Netflix, Inc. Iterative techniques for generating multiple encoded versions of a media title
US11166034B2 (en) 2017-02-23 2021-11-02 Netflix, Inc. Comparing video encoders/decoders using shot-based encoding and a perceptual visual quality metric
GB2576846A (en) 2017-04-21 2020-03-04 Zenimax Media Inc Systems and methods for game-generated motion vectors
GB2563282B (en) 2017-06-09 2022-01-12 Displaylink Uk Ltd Bypassing desktop composition
US10666992B2 (en) * 2017-07-18 2020-05-26 Netflix, Inc. Encoding techniques for optimizing distortion and bitrate
CN109983435B (zh) 2017-10-23 2020-08-07 华为技术有限公司 图形处理方法及相关装置和设备
CN108184133B (zh) * 2017-12-07 2020-09-25 西安万像电子科技有限公司 一种网络显卡及图像数据传输方法
US11036525B2 (en) * 2018-05-04 2021-06-15 Citrix Systems, Inc. Computer system providing hierarchical display remoting optimized with user and system hints and related methods
FR3088789B1 (fr) * 2018-11-16 2021-08-06 Blade Protocole de transmission d’un flux de donnees transitant entre un ordinateur hote et un client distant
US11209966B2 (en) * 2019-01-24 2021-12-28 Disney Enterprises, Inc. Extended on-screen gameplay via augmented reality
US11880422B2 (en) 2019-02-04 2024-01-23 Cloudflare, Inc. Theft prevention for sensitive information
US10452868B1 (en) 2019-02-04 2019-10-22 S2 Systems Corporation Web browser remoting using network vector rendering
US10558824B1 (en) 2019-02-04 2020-02-11 S2 Systems Corporation Application remoting using network vector rendering
US10552639B1 (en) 2019-02-04 2020-02-04 S2 Systems Corporation Local isolator application with cohesive application-isolation interface
CN111030757B (zh) * 2019-12-09 2021-11-05 明格(上海)信息技术有限公司 超声接收数据的处理方法、系统和计算机可读介质
CN111093091A (zh) * 2019-12-11 2020-05-01 西安万像电子科技有限公司 视频处理方法、服务器及系统
KR102460474B1 (ko) * 2021-05-14 2022-11-01 (주)이머시브캐스트 화면 떨림 감소를 위한 클라우드 vr 장치
US11799794B2 (en) * 2021-08-31 2023-10-24 International Business Machines Corporation Selective compression of packet payload data in a 5G network
US11755272B2 (en) 2021-12-10 2023-09-12 Vmware, Inc. Method and system for using enhancement techniques to improve remote display while reducing hardware consumption at a remote desktop
CN114827716B (zh) * 2022-03-08 2023-08-11 深圳软牛科技有限公司 一种在wpf中创建视频播放器的方法、装置及相关组件
CN115941865A (zh) * 2022-11-23 2023-04-07 深圳市华德安科技有限公司 一种执法记录仪录像与实时图传的双码流实现方法
CN115842919B (zh) * 2023-02-21 2023-05-09 四川九强通信科技有限公司 一种基于硬件加速的视频低延迟传输方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6141324A (en) * 1998-09-01 2000-10-31 Utah State University System and method for low latency communication
US7516255B1 (en) * 2005-03-30 2009-04-07 Teradici Corporation Method and apparatus for providing a low-latency connection between a data processor and a remote graphical user interface over a network

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US2408908A (en) 1934-05-02 1946-10-08 Gen Mills Inc Method of producing antirachitic material
JPH0678272A (ja) * 1992-08-24 1994-03-18 Olympus Optical Co Ltd 画像記録再生装置
CA2134255C (en) * 1993-12-09 1999-07-13 Hans Peter Graf Dropped-form document image compression
JPH07266633A (ja) * 1994-03-29 1995-10-17 Matsushita Electric Ind Co Ltd 印字装置
US5825308A (en) * 1996-11-26 1998-10-20 Immersion Human Interface Corporation Force feedback interface having isotonic and isometric functionality
US7490166B2 (en) * 2000-05-26 2009-02-10 Citrix Systems, Inc. Remote control of a client's off-screen surface
US20020149617A1 (en) * 2001-03-30 2002-10-17 Becker David F. Remote collaboration technology design and methodology
US7039247B2 (en) * 2003-01-31 2006-05-02 Sony Corporation Graphic codec for network transmission
JP2005027053A (ja) * 2003-07-02 2005-01-27 Toshiba Corp コンテンツ処理装置
US7693345B2 (en) * 2004-03-04 2010-04-06 Nvidia Corporation Method and apparatus for error concealment for JPEG 2000 compressed images and data block-based video data
JP2005275643A (ja) * 2004-03-24 2005-10-06 Hitachi Ltd コンテンツデータ処理装置及び方法
US7590750B2 (en) * 2004-09-10 2009-09-15 Microsoft Corporation Systems and methods for multimedia remoting over terminal server connections
US20060082581A1 (en) 2004-10-14 2006-04-20 Microsoft Corporation Encoding for remoting graphics to decoder device
US7730157B2 (en) 2005-02-03 2010-06-01 The Trustees Of Columbia University In The City Of New York Methods, media, and systems for displaying information on a thin-client in communication with a network
JP4405419B2 (ja) * 2005-03-31 2010-01-27 株式会社東芝 画面送信装置
US20060282855A1 (en) 2005-05-05 2006-12-14 Digital Display Innovations, Llc Multiple remote display system
US7548657B2 (en) * 2005-06-25 2009-06-16 General Electric Company Adaptive video compression of graphical user interfaces using application metadata
JP2007206644A (ja) * 2006-02-06 2007-08-16 Seiko Epson Corp 画像表示システム,画像表示方法,画像表示プログラム,記録媒体,データ処理装置,画像表示装置
US8005149B2 (en) * 2006-07-03 2011-08-23 Unisor Design Services Ltd. Transmission of stream video in low latency
WO2009094673A2 (en) 2008-01-27 2009-07-30 Citrix Systems, Inc. Methods and systems for remoting three dimensional graphics
JP2009260818A (ja) * 2008-04-18 2009-11-05 Nec Corp サーバ装置とコンテンツ配信方法とプログラム
KR20100041423A (ko) 2008-10-14 2010-04-22 삼성전자주식회사 스크로트론 대전 방식의 대전 장치 및 그 대전 장치를 이용한 화상형성장치
US8171154B2 (en) 2009-09-29 2012-05-01 Net Power And Light, Inc. Method and system for low-latency transfer protocol

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6141324A (en) * 1998-09-01 2000-10-31 Utah State University System and method for low latency communication
US7516255B1 (en) * 2005-03-30 2009-04-07 Teradici Corporation Method and apparatus for providing a low-latency connection between a data processor and a remote graphical user interface over a network

Also Published As

Publication number Publication date
EP2484091A2 (en) 2012-08-08
WO2011041229A3 (en) 2011-08-18
KR20120082434A (ko) 2012-07-23
CA2774014A1 (en) 2011-04-07
KR20140024478A (ko) 2014-02-28
JP2013506348A (ja) 2013-02-21
US20120246227A1 (en) 2012-09-27
US20120084456A1 (en) 2012-04-05
EP2484091A4 (en) 2014-02-12
US20110078532A1 (en) 2011-03-31
US8527654B2 (en) 2013-09-03
US8234398B2 (en) 2012-07-31
CN102668495A (zh) 2012-09-12
WO2011041229A2 (en) 2011-04-07
US8171154B2 (en) 2012-05-01
US20140164484A1 (en) 2014-06-12
AU2010300823A1 (en) 2012-04-19

Similar Documents

Publication Publication Date Title
KR101443070B1 (ko) 짧은 대기 시간의 전송 프로토콜을 위한 방법 및 시스템
US11228764B2 (en) Streaming multiple encodings encoded using different encoding parameters
KR101720654B1 (ko) 가상화 시스템 및 가상화 서비스 제공방법
JP5882547B2 (ja) シーンの変化に伴うピクチャ内の符号化及び送信パラメータの好適化
US20150373075A1 (en) Multiple network transport sessions to provide context adaptive video streaming
US10681382B1 (en) Enhanced encoding and decoding of video reference frames
CN100591120C (zh) 视频通信方法及装置
EP3269110B1 (en) Method of communicating data packets within data communication systems
KR20060110267A (ko) 신 클라이언트에서 그래픽 및 미디어 디스플레이를생성하기 위한 장치 및 방법
US10341670B1 (en) Video encoder bit rate stabilization
Gül et al. Cloud rendering-based volumetric video streaming system for mixed reality services
JP2015507902A (ja) 安定した情報および過渡的/確率的情報の別個のエンコードおよびデコード
KR20180086114A (ko) 재생 지연 방지 시스템을 포함하는 미디어 재생 장치 및 방법
JP2022141586A (ja) 低遅延のために統合nicと共有フレームバッファアクセスとを有するクラウドゲーミングgpu
US9226003B2 (en) Method for transmitting video signals from an application on a server over an IP network to a client device
WO2017150792A1 (en) Apparatus and method for providing contents using web-based virtual desktop protocol
Lan et al. Research on technology of desktop virtualization based on SPICE protocol and its improvement solutions
US9363574B1 (en) Video throttling based on individual client delay
KR20160015123A (ko) 클라우드 스트리밍 서비스 시스템, 스틸 이미지 기반 클라우드 스트리밍 서비스 방법 및 이를 위한 장치
JP2008506324A (ja) アプリケーション共有時における画像データの伝送
Qin A compression and transmission method for surveillance video data using SPICE protocol and DWT in cloud desktop environment
KR101251879B1 (ko) 멀티미디어 클라우드 시스템에서 화면변화에 따른 광고영상 출력 장치 및 방법
Hadic et al. A Simple Desktop Compression and Streaming System
WO2014057809A1 (ja) 動画伝送システム及び方法
CN117676266A (zh) 视频流的处理方法及装置、存储介质、电子设备

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
A107 Divisional application of patent
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee