KR102040786B1 - 인터렉티브 스트리밍 미디어를 제공하는 시스템 및 방법 - Google Patents
인터렉티브 스트리밍 미디어를 제공하는 시스템 및 방법 Download PDFInfo
- Publication number
- KR102040786B1 KR102040786B1 KR1020187009569A KR20187009569A KR102040786B1 KR 102040786 B1 KR102040786 B1 KR 102040786B1 KR 1020187009569 A KR1020187009569 A KR 1020187009569A KR 20187009569 A KR20187009569 A KR 20187009569A KR 102040786 B1 KR102040786 B1 KR 102040786B1
- Authority
- KR
- South Korea
- Prior art keywords
- client device
- application
- implementations
- simulation
- host server
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
- G06F9/452—Remote windowing, e.g. X-Window System, desktop virtualisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45575—Starting, stopping, suspending or resuming virtual machine instances
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- User Interface Of Digital Computer (AREA)
- Information Transfer Between Computers (AREA)
Abstract
클라이언트 시스템은 애플리케이션의 실행 환경 내에서, 네트워크를 통해 원격 호스트 서버로부터 수신된, 애플리케이션과 구별되는 제3자 미디어 스트림을 제공한다. 클라이언트 시스템은 제3자 미디어 스트림의 프리젠테이션 동안 인터렉션 이벤트를 검출하고, 검출된 인터렉션 이벤트의 디스크립션(description)을 원격 호스트 서버로 전송한다. 애플리케이션은 예를 들어 개시(start-up) 시간을 최소화하기 위해 프리젠테이션 이전에 사전-큐잉될 수 있다. 일부 구현예에서, 클라이언트 시스템과 원격 호스트 서버 간의 통신을 용이하게 하기 위해 사이드-밴드 메시지 채널이 수립된다.
Description
본 출원은 "인터렉티브 스트리밍 미디어를 제공하는 시스템 및 방법"이라는 명칭으로 2016년 11월 14일자로 출원된 PCT/US2016/061924호의 이점 및 우선권을 주장하며, 그 전체가 본 명세서에 참조로서 통합된다.
"스마트" 전화기 및 태블릿과 같은 모바일 디바이스를 포함하는 컴퓨팅 디바이스는 네트워크를 통해 수신된 콘텐츠를 제시(present)하는 기능(functionality)을 포함할 수 있는 애플리케이션을 실행한다. 경우에 따라 애플리케이션은 수신할 콘텐츠를 선택하거나 수신된 콘텐츠의 소스를 제어하지도 않고, 대신에 콘텐츠를 표시하기 위한 도관(conduit)이다. 상기 수신된 콘텐츠는 텍스트 또는 2차원 이미지의 프리젠테이션 처럼 단순할 수 있거나 멀티미디어 콘텐츠 또는 인터렉티브(interactive) 콘텐츠의 프리젠테이션 처럼 더 복잡할 수 있다. 이보다 더 복잡한 콘텐츠의 프리젠테이션은 기술적인 제약으로 인해 제한될 수 있다.
일부 구현예에서, 호스트 서버는 네트워크를 통해 클라이언트 디바이스로 클라이언트 디바이스에서 실행되는 제1 애플리케이션의 실행 환경 내의 클라이언트 디바이스에서 프리젠테이션하기 위한 미디어 스트림을 제공한다. 원격 호스트 서버는 클라이언트 디바이스를 위한 시뮬레이션 환경(예컨대, 가상 또는 에뮬레이션 환경)에서 제2 애플리케이션을 실행하고, 제2 애플리케이션으로부터의 출력을 프리젠테이션을 위한 미디어 스트림으로서 클라이언트 디바이스로 제공한다. 일부 구현예에서, 미디어 스트림은 클라이언트 디바이스의 요청에 응답하여 클라이언트 디바이스로 제공된다. 일부 구현예에서, 미디어 스트림은 인터렉티브 인터페이스로 클라이언트 디바이스에 제시된다. 이러한 구현예에서, 클라이언트 디바이스는 미디어 스트림의 프리젠테이션 동안 인터렉션 이벤트를 검출하여, 검출된 인터렉션 이벤트의 디스크립션(description)을 원격 호스트 서버로 전송한다. 예를 들어, 제한없이, 인터렉션 이벤트는 버튼 활용, 터치 스크린 접촉("탭"), 디바이스 이동 또는 모션, 또는 방향 변경, 속도, 또는 디바이스 이동 또는 모션의 강도, 또는 디바이스 배향(orientation)(예컨대, 회전, 요(yaw), 피치(pitch) 또는 롤(roll))의 변경, 이미지 또는 광 센서에 의해 감지된 광의 증가 또는 감소, 사운드 감지 및 기타를 포함할 수 있다. 호스트 서버는 검출된 인터렉션 이벤트의 디스크립션(description)을 클라이언트 디바이스로부터 수신하여 상기 시뮬레이션 환경에서 제2 애플리케이션에 대한 대응하는 인터렉션 이벤트를 재생성(recreate)한다.
클라이언트 디바이스와 호스트 서버 사이의 통신은 2개의 단방향 채널(mono-directional channel)로서 기술될 수 있다. 미디어 스트림이 호스트 서버에서 클라이언트 디바이스로 제공되는 제1채널 및 인터렉션 이벤트 디스크립션이 클라이언트 디바이스로부터 호스트 서버로 제공되는 제2채널을 포함한다. 일부 구현예에서, 클라이언트 디바이스와 호스트 서버사이에 부가 통신 채널들이 수립(establish)된다. 부가 통신 채널은 호스트 서버에서의 시뮬레이션 환경을 클라이언트 디바이스에 보다 유사하게 할 수 있도록 하는 사이드-밴드(side-band) 채널들이다. 이러한 구현예에서,(시뮬레이션 환경에서 실행되는) 제2 애플리케이션은 사이드-밴드 채널을 통해 클라이언트 디바이스로 메시지를 전송할 수 있다. 게다가, 일부 그러한 구현예에서, 이어서 제2 애플리케이션은 사이드-밴드 채널을 통해 클라이언트 디바이스로부터 응답을 수신할 수 있다. 예를 들어, 제2 애플리케이션은 클라이언트 디바이스의 구성 또는 설정 관리기(settings manager)에 대한 상태 또는 제약 정보를 요청하고(예를 들어, 제2 애플리케이션이 고수해야 하는 패런털(parental) 제한이 있는지 결정하기 위해), 클라이언트 디바이스의 구성 또는 설정 관리기로부터 응답을 수신하도록 인에이블될 수 있다. 다른 예로서, 제2 애플리케이션은 클라이언트 디바이스상의 센서(예컨대, 클라이언트 디바이스상의 마이크로폰 또는 이미지 센서)로 액세스를 요청하고 응답으로 센서에 대한 인증된(authorized) 액세스를 수신하도록 인에이블될 수 있다.
일부 구현예에서, 호스트 서버는 제2 애플리케이션을 제공하기 위해 클라이언트 디바이스로부터 요청을 수신하기 전에 제2 애플리케이션으로부터의 출력을 클라이언트 디바이스로 제공할 준비를 한다. 호스트 서버는 클라이언트 디바이스에 대한 에뮬레이션 환경을 수립하고, 제2 애플리케이션을 실행하며, 큐 포인트(cue point)에서 제2 애플리케이션의 실행을 일시 중지(suspending)함으로써 제2 애플리케이션의 출력을 제공할 준비를 한다. 일부 구현예에서, 호스트 서버는 시뮬레이션 환경 자체를 일시 중지시킴으로써 제2 애플리케이션의 실행을 일시 중지시킨다. 그 다음, 제2 애플리케이션을 프리젠테이션하라는 요청을 수신하는 것에 응답하여, 호스트 서버는(예컨대, 시뮬레이션 환경을 다시 시작함으로써) 제2 애플리케이션의 실행을 재개하여, 프리젠테이션을 위한 미디어 스트림으로서 상기 프리-큐(pre-cued)된 제2 애플리케이션으로부터의 출력을 클라이언트 디바이스로 제공하기 시작한다. 일부 구현예에서, 큐 포인트는 제2 애플리케이션의 특성, 예를 들어 제2 애플리케이션이 사용자 입력을 기다리고 있음을 검출하는 것에 응답하여 결정된다. 일부 구현예에서, 큐 포인트는 제2 애플리케이션의 실행을 일시 중지하기 전에, 예를 들어, 사전 결정된 실행 시간 범위(extent of execution time) 이후에 결정된다. 사전 결정된 실행 시간 범위는, 예를 들어, 제2 애플리케이션의 과거 프리젠 테이션과 상기 제2 애플리케이션 각각의 과거 프리젠테이션에 대응하는 초기 사용자 인터렉션 사이의, 복수의 과거 프리젠 테이션에 대한 기본적인(예컨대, 평균(mean average) 지연을 측정함으로써 결정될 수 있다.
본 발명의 상기 및 관련 목적, 특징 및 이점은 첨부된 도면과 관련하여 다음의 상세한 설명을 참조함으로써 더욱 완전하게 이해될 것이다.
도 1은 네트워크 환경에서의 예시적인 프리뷰 시스템의 도면이다.
도 2A, 도 2B, 도 2C 및 도 2D는 프리뷰 프리젠테이션 세션에서 데모 애플리케이션을 제시하는 애플리케이션의 상이한 단계를 디스플레이하는 예시적인 디바이스의 도면이다.
도 3은 예시적인 인터렉티브 프리뷰 세션에 대한 흐름도이다.
도 4는 예시적인 인터렉티브 프리뷰 세션 동안 클라이언트 디바이스상의 예시적인 데이터 흐름을 나타내는 도면이다.
도 5는 예시적인 인터렉티브 프리뷰 세션 동안 호스트 서버상의 예시적인 데이터 흐름을 나타내는 도면이다.
도 6은 클라이언트 디바이스에서 프리뷰 세션을 제공하는 방법의 예시적인 구현에 대한 흐름도이다.
도 7은 프리뷰 세션을 제공하는데 사용하기 위한 애플리케이션을 사전-큐잉하는 방법의 예시적인 구현에 대한 흐름도이다.
도 8은 프리뷰 세션을 제공하는데 사용하기 위해 애플리케이션을 사전-큐잉할 큐 포인트를 식별하는 방법의 예시적인 구현에 대한 흐름도이다.
도 9는 프리뷰 세션을 제공하는데 사용하기 위해 애플리케이션을 사전-큐잉할 애플리케이션-특정 실행 시간 기반의 큐 포인트를 식별하는 방법의 예시적인 구현에 대한 흐름도이다.
도 10은 설명된 다양한 구현들에서의 사용에 적합한 컴퓨팅 시스템의 블록도이다.
명료함을 위해, 모든 구성 요소가 모든 도면에서 라벨링될 수 있는 것은 아니다. 도면은 일정한 비율로 그려지도록 의도된 것이 아니다. 다양한 도면에서 동일한 참조 번호 및 명칭은 동일한 요소를 나타낸다.
도 1은 네트워크 환경에서의 예시적인 프리뷰 시스템의 도면이다.
도 2A, 도 2B, 도 2C 및 도 2D는 프리뷰 프리젠테이션 세션에서 데모 애플리케이션을 제시하는 애플리케이션의 상이한 단계를 디스플레이하는 예시적인 디바이스의 도면이다.
도 3은 예시적인 인터렉티브 프리뷰 세션에 대한 흐름도이다.
도 4는 예시적인 인터렉티브 프리뷰 세션 동안 클라이언트 디바이스상의 예시적인 데이터 흐름을 나타내는 도면이다.
도 5는 예시적인 인터렉티브 프리뷰 세션 동안 호스트 서버상의 예시적인 데이터 흐름을 나타내는 도면이다.
도 6은 클라이언트 디바이스에서 프리뷰 세션을 제공하는 방법의 예시적인 구현에 대한 흐름도이다.
도 7은 프리뷰 세션을 제공하는데 사용하기 위한 애플리케이션을 사전-큐잉하는 방법의 예시적인 구현에 대한 흐름도이다.
도 8은 프리뷰 세션을 제공하는데 사용하기 위해 애플리케이션을 사전-큐잉할 큐 포인트를 식별하는 방법의 예시적인 구현에 대한 흐름도이다.
도 9는 프리뷰 세션을 제공하는데 사용하기 위해 애플리케이션을 사전-큐잉할 애플리케이션-특정 실행 시간 기반의 큐 포인트를 식별하는 방법의 예시적인 구현에 대한 흐름도이다.
도 10은 설명된 다양한 구현들에서의 사용에 적합한 컴퓨팅 시스템의 블록도이다.
명료함을 위해, 모든 구성 요소가 모든 도면에서 라벨링될 수 있는 것은 아니다. 도면은 일정한 비율로 그려지도록 의도된 것이 아니다. 다양한 도면에서 동일한 참조 번호 및 명칭은 동일한 요소를 나타낸다.
도 1은 네트워크 환경(100)에서의 예시적인 프리뷰 시스템의 도면이다. 클라이언트 디바이스의 사용자는 클라이언트 디바이스상에 애플리케이션을 설치하지 않고 애플리케이션을 프리뷰할 수 있다. 클라이언트 디바이스에 애플리케이션을 설치하는 대신 애플리케이션은 클라이언트 디바이스에서 멀리 떨어진 호스트 서버상에서 실행된다. 그런 다음 호스트 서버는 네트워크를 통해 클라이언트 디바이스로 애플리케이션의 미디어 스트림을 전송함으로써 클라이언트 디바이스에 프리뷰 세션을 제공한다. 이러한 프리뷰 세션을 호스팅하기 위한 예시적인 환경이 도 1에 도시되어 있다.
도 1의 전반적인 개요에서, 도시된 네트워크 환경(100)은 네트워크(110), 예시적인 클라이언트 디바이스(120), 애플리케이션 백-엔드(back-end) 서버(130), 프리뷰 배포 서버(140), 프리뷰 호스트 서버(170)를 포함하는 몇몇 서버 및 데이터 저장 디바이스(156)로의 액세스를 제공하는 데이터 관리기(150)를 포함한다. 클라이언트 디바이스(120)상에서 실행되는 애플리케이션은 애플리케이션-특정 백-엔드 서버(130)와 데이터를 교환하는 네트워크화된 애플리케이션일 수 있다. 클라이언트 디바이스(120) 또는 애플리케이션 백-엔드 서버(130)상의 애플리케이션은 클라이언트 디바이스(120)상에 제시(present)하도록 예를 들어 프리뷰 배포 서버(140)로부터의 프리뷰를 요청하는 것을 때때로 요청할 수 있다. 일부 경우에, 콘텐츠는 광고주 또는 프리뷰될 애플리케이션 개발자와 같은 제3자로부터 공급된(sourced) 콘텐츠일 수 있다. 배포 서버(140)는 프리젠테이션을 위한 콘텐츠, 예를 들어 인터렉티브 애플리케이션 또는 게임의 데모(demonstration)를 선택하고, 클라이언트 디바이스(120)는 콘텐츠 호스트에 접속한다. 인터렉티브 애플리케이션 또는 게임의 경우, 콘텐츠 호스트는 클라이언트 디바이스(120)를 나타내는 시뮬레이션 실행 환경에서 호스팅된 애플리케이션을 실행하는 프리뷰 호스트 서버(170)로서, 예를 들어, 상기 호스트팅(hosred)된 애플리케이션은 시연될 애플리케이션 또는 게임의 인스턴스(instance)이다. 시청각 미디어 스트림은 프리뷰 호스트 서버(170)로부터 프리젠테이션을 위해 클라이언트 디바이스(120)로 전송된다. 만약 클라이언트 디바이스(120)의 사용자가 제시된 미디어 스트림과 상호 작용(interact)하면, 인터렉션 데이터가 프리뷰 호스트 서버(170)로 되돌려 보내지고, 그런 다음 상기 인터렉션은 시뮬레이션 실행 환경에서 재생성된다. 예를 들어,일부 구현예에서, 시뮬레이션 실행 환경은 가상 머신으로부터의 오디오-비디오 출력이 미디어 스트림내에서 전송되고, 인터렉션 데이터가 가상 머신에서 인터렉션 입력을 재생성하는데 사용될 수 있도록 구성된 가상 머신이다. 프리뷰 호스트 서버(170) 및 프리뷰 배포 서버(140)는 데이터 관리기(150)에 의해 관리되고 데이터 저장 디바이스(156)에 저장되는 데이터를 이용할 수 있다.
도 1을 다시 참조하면, 보다 상세하게, 네트워크(110)는 클라이언트 디바이스(120)와 서버들, 예를 들어, 애플리케이션 백-엔드 서버(130), 프리뷰 배포 서버 (140) 및 프리뷰 호스트 서버(170)간의 통신을 인에이블한다. 일부 구현예에서, 데이터는 데이터 패킷의 흐름으로서, 예를 들어 OSI(Open Systems Interconnection) 계층에 따른 데이터 패킷의 형태로 네트워크(110)을 통해 소스 노드에서 목적 노드로 흐른다. 패킷의 흐름은, 예를 들어 인터넷 프로토콜(IP), 예컨대 IPv4 또는 IPv6와 같은 OSI 계층-3 네트워크 프로토콜을 통해 계층화된 네트워크(110)를 통하여 전송된 사용자 데이터그램 프로토콜(UDP), 전송 제어 프로토콜(TCP) 또는 스트림 제어 전송 프로토콜(SCTP)과 같은 OSI 계층-4 전송 프로토콜을 사용할 수 있다. 네트워크(110)는 참여(participating) 디바이스들 사이에 하나 이상의 통신 경로를 형성하기 위해 함께 링크된 다양한 네트워크 디바이스들로 구성된다. 각각의 네트워크화된 디바이스는 전형적으로 하나 이상의 데이터 패킷으로서 데이터를 수신 및/또는 전송하기 위한 적어도 하나의 네트워크 인터페이스를 포함한다. 예시적인 네트워크(110)는 인터넷이지만 다른 네트워크들이 사용될 수 있다. 네트워크(110)는 다수의 연결된 서브 네트워크들로 구성될 수 있다. 네트워크(110)는 회사 인트라넷, 도시권 통신망(Metropolitan Area Network : MAN), 광역 통신망(Wide Area Network : WAN)), 인터넷과 같은 인터(inter) 네트워크 또는 피어-투-피어(peer-to-peer) 네트워크, 예컨대 애드 혹 WiFi 피어-투-피어 네트워크와 같은 지역 네트워크(LAN)일 수 있다. 네트워크(110) 내의 디바이스들 간의 데이터 링크는 유선 링크(예컨대, 광 섬유, 메시(mesh), 동축, Cat-5 또는 Cat-6 등의 트위스트 페어 (twisted pair)) 및/또는 무선 링크(예컨대, 라디오(radio), 위성, 마이크로웨이브 등)의 임의의 조합일 수 있다. 네트워크(110)는 이동 통신 디바이스를 위한 캐리어 네트워크, 예를 들어 이동 통신용 글로벌 시스템(GSM), 코드 분할 다중 접속 (CDMA), 시분할 동기 코드 분할 다중 액세스(TD SCDMA), 롱텀 에볼루션(LTE) 또는 소위 "3G","4G" 및 "5G" 프로토콜을 포함하되 이에 국한되지 않는 임의의 다른 프로토콜을 구현하는 네트워크들을 포함할 수 있다. 네트워크는 예를 들어 개인 영역 네트워크(PAN) 또는 메쉬 네트워크로 지칭되는 Wi-Fi, 블루투스 또는 지그비 (ZIGBEE)를 통한 단거리 무선 링크들을 포함할 수 있다. 네트워크(110)는 공용, 사설 또는 공용 및 사설 네트워크들의 조합일 수 있다. 네트워크(110)는 임의의 타입 및/또는 형태의 데이터 네트워크 및/또는 통신 네트워크일 수 있다.
예시적인 클라이언트 디바이스(120)는 애플리케이션을 실행하여, 출력을 사용자에게 제시(Present)하고, 사용자로부터 입력을 수신하는 컴퓨팅 시스템 또는 프로세서 기반의 디바이스이다. 클라이언트 디바이스(120)는 네트워크(110)를 통해 서버(130, 140 및 170)와 정보를 교환할 수 있다. 클라이언트 디바이스(120)는 예를 들어 데스크탑 컴퓨터, 랩탑 또는 노트패드(notepad) 컴퓨터, 태블릿 또는 전자 패드와 같은 모바일 디바이스, 개인 휴대 정보 단말기, 또는 스마트 폰, 비디오 게임 디바이스, 텔레비전 또는 텔레비전 보조 박스("셋탑 박스"라고 또한 알려짐), 키오스크(kiosk), 호스트된 가상 데스크탑, 또는 네트워크(110)를 통해 정보를 교환할 수 있는 임의의 다른 디바이스를 포함하는 임의의 종류의 컴퓨팅 다비이스일 수 있다. 일부 구현예에서, 클라이언트 디바이스(120)는 데이터 입력 및 데이터 프리젠테이션을 용이하게 하기 위한 하나 이상의 하드웨어 요소들, 예를 들어 키보드, 디스플레이, 터치 스크린, 마이크로폰, 스피커 및/또는 햅틱 피드백 디바이스를 포함한다. 일부 구현예에서, 클라이언트 디바이스(120)는 기능-특정 버튼(예컨대, 볼륨 업, 볼륨 다운, 뮤트 등과 같은 오디오 디바이스 볼륨 제어) 및/또는 기능-애그노스틱(agnostic) 버튼(예컨대, 소프트 레벨에서 특정 기능을 할당할 수 있는 "소프트" 버튼)과 같은 버턴들을 포함한다. 일부 구현예에서, 클라이언트 디바이스(120)는 예를 들어 가속도계, 자이로 스코프 또는 틸트(tilt) 센서와 같은 클라이언트 디바이스(120) 자체의 움직임을 검출할 수 있는 센서를 포함한다. 가속도계는 단일 축 또는 다중 축의 가속도계일 수 있다. 일부 구현예에서, 클라이언트 디바이스(120)는 특수 목적 논리 회로, 예를 들어 주문형 집적 회로(ASIC)를 이용하여 구현된다. 일부 구현예에서, 클라이언트 디바이스(120)는 적어도 하나의 프로세서(또는 마이크로 프로세서) 코어를 포함하는 시스템 온 칩(SoC) 반도체 디바이스를 사용하여 구현된다. 일부 구현예에서, 클라이언트 디바이스(120)는 범용 컴퓨팅 프로세서를 사용하여 구현된다. 아래에서 보다 상세하게 설명되는 도 4는 예시적인 인터렉티브 프리뷰 세션 동안 클라이언트 디바이스상의 데이터 흐름의 예를 나타내는 도면이다. 도 4에 도시된 클라이언트 디바이스(420)는 도 1에 도시된 클라이언트 디바이스(120)로 사용하기에 적합한 클라이언트 디바이스의 일 예이다. 아래에서 보다 상세하게 기술되는 도 10은 일부 구성에서 클라이언트 디바이스(120)로 사용하기에 적합한 컴퓨팅 디바이스를 도시한다.
일부 구현예에서, 클라이언트 디바이스(120)는 프리뷰 호스트 서버(170)로부터의 미디어 스트림을 제시할 수 있는 수 있는 하나 이상의 소프트웨어 애플리케이션을 포함하여 클라이언트 디바이스(120)상의 소프트웨어 애플리케이션의 실행을 관리하는 운영 시스템을 운영한다. 일부 구현예에서, 운영 시스템에는 클라이언트 디바이스가 제공된다. 일부 구현예에서, 클라이언트 디바이스(120)는 HTTP (Hypertext Transfer Protocol) 및 HTTPS(Transport Layer Security)로 암호화된 HTTP와 같은 하이퍼 텍스트 애플리케이션 프로토콜의 슈트(suite)에 따라 포멧된 데이터를 수신할 수 있는 브라우저 애플리케이션(예컨대, 웹 브라우저)을 실행한다. 이러한 일부 구현예에서, 브라우저는 하나 이상의 웹 페이지의 형태로 데이터 시각화 플랫폼(130)과의 인터렉션을 용이하게 한다. 일부 구현예에서, 브라우저 애플리케이션에는 클라이언트 디바이스(120)가 제공된다. 일부 구현예에서, 클라이언트 디바이스(120)는 예를 들어 애플리케이션 백-엔드 서버(130)와 상호 작용하는 게임 또는 다른 애플리케이션과 같은 커스텀(custom) 애플리케이션을 실행한다. 커스텀 애플리케이션과 애플리케이션 백-엔드 서버(130) 사이의 인터렉션은 HTTP 및 HTTPS와 같은 표준 프로토콜을 사용할 수 있거나 또는 애플리케이션 특정 프로토콜, 예를 들어 UDP, TCP 또는 SCTP와 같은 전송 계층 프로토콜을 통해 구현되는 커스텀 애플리케이션 계층 프로토콜을 사용할 수 있다. 일부 구현예에서, 클라이언트 디바이스(120)는 클라이언트 디바이스(120) 상에 커스텀 애플리케이션을 획득 및/또는 설치하기 위한 툴(tool)을 포함한다. 일부 구현예에서, 클라이언트 디바이스(120)가 통신하는 하나 이상의 서버는 커스텀 명령 세트, 예를 들어 애플리케이션 프로그래밍 인터페이스(API)를 지원하고, 클라이언트 디바이스(120)상에서 실행되는 커스텀 애플리케이션은 API를 구현한다. 애플리케이션은 예를 들어 애플리케이션 개발자에게 제공되는 라이브러리 또는 소프트웨어 개발 키트(SDK)를 사용하여 API를 구현할 수 있다.
클라이언트 디바이스(120)는 애플리케이션 백-엔드 서버(130), 프리뷰 배포 서버(140) 및 프리뷰 호스트 서버(170)와 같은 다양한 서버와 통신(또는 데이터 교환)한다. 일부 구현예에서, 이들 서버 중 하나 이상은 특수 목적 논리 회로, 예를 들어 ASIC(application specific integrated circuit)을 이용하여 구현된다. 일부 구현예에서, 클라이언트 디바이스(120)는 적어도 하나의 프로세서(또는 마이크로 프로세서) 코어를 포함하는 칩(SoC) 반도체 디바이스를 사용하여 구현된다. 일부 구현예에서, 이들 서버 중 하나 이상은 범용 컴퓨팅 프로세서를 사용하여 구현된다. 아래에서 보다 상세히 설명되는 도 10은 일부 구성에서 애플리케이션 백-엔드 서버(130), 프리뷰 배포 서버(140) 및/또는 프리뷰 호스트 서버(170)로 사용하기에 적합한 컴퓨팅 디바이스를 도시한다.
도 1에서, 애플리케이션 백-엔드 서버(130)는 클라이언트 디바이스(120)에서 실행중인 애플리케이션에 백-엔드 지원을 제공한다. 일부 구현예에서, 애플리케이션 백-엔드 서버(130)는 클라이언트 디바이스(120)로부터 데이터를 수신하고 클라이언트 디바이스(120)로 데이터를 전송하는 서비스를 실행한다. 예를 들어, 클라이언트 디바이스(120)에서 실행되는 애플리케이션은 게임, 예를 들어, 상이한 플레이어에 대한 게임 데이터가 애플리케이션 백-엔드 서버(130)에 의해 저장되는 멀티 플레이어 게임일 수 있으며, 클라이언트 디바이스(120)에서 실행되는 애플리케이션은 애플리케이션에 대한 몇몇 기능들이 애플리케이션 백-엔드 서버(130)에 의해 제공되는 유틸리티일 수 있으며, 또는 지원을 위해 백-엔드 서버(130)를 사용하는 임의의 다른 종류의 사용자-인터렉티브 애플리케이션일 수 있다. 일부 구현예에서, 클라이언트 디바이스(120)로부터 원격으로 데이터를 저장하는 것은 다수의 사용자 또는 사용자 디바이스들 사이의 비동기 인터렉션을 허용하고, 클라이언트 디바이스(120)가 고장났을 때 복구를 위한 수단(avenue)을 제공한다.
일부 구현예에서, 프리뷰 배포 서버(140)는 특정 콘텐츠를 제공하라는 요청을 수신하고, 상기 요청에 응답하여 프리뷰 호스트 서버(170)로부터 콘텐츠를 획득하도록 클라이언트 디바이스(120)에 지시(direct)한다. 일부 구현예에서, 프리뷰 배포 서버(140)는 광고 네트워크 서버이다. 일부 구현예에서, 프리뷰 배포 서버 (140)는 클라이언트 디바이스(120)상의 프리젠테이션을 위해 콘텐츠, 예를 들어 제3자 콘텐츠를 식별하는 서비스를 실행한다. 일부 구현예에서, 클라이언트 디바이스(120)상에서 실행되는 애플리케이션은 프리뷰 배포 서버(140)로의 요청을 생성하고, 프리뷰 배포 서버(140)는 콘텐츠 선택으로 응답한다. 콘텐츠 자체는 프리뷰 배포 서버(140) 또는 프리뷰 호스트 서버(170)로부터, 또는 콘텐츠 전달 네트워크 (CDN)에 분산된 콘텐츠 저장 서버 또는 서버들과 같은 다른 서버(미도시)로부터 제공될 수 있다. 예를 들어, 선택된 콘텐츠가 인터렉티브 프리뷰인 경우, 인터렉티브 프리뷰는 프리뷰 호스트 서버(170)에 의해 제공된다.
일부 구현예에서, 프리뷰 배포 서버(140)는 광고 네트워크 서버이다. 광고 네트워크는 광고 배치 서비스를 제공한다. 애플리케이션 개발자는 광고 네트워크를 사용하여 애플리케이션 내에 광고들을 배치하고, 광고 네트워크를 통해 배치된 광고들에 대해 광고주로부터 보상(compensation )을 받을 수 있다. 일부 광고 네트워크에서 광고주들은 ("노출(impression)"로 지칭되는) 프레젠테이션 이벤트에 대해 비용(pay)을 지불한다. 일부 광고 네트워크에서, 광고주들은 광고의 수신자가 광고를 선택(예컨대, 클릭하거나 탭)하여 랜딩 페이지 또는 애플리케이션 스토어와 같은 트랜잭션(transation) 인터페이스로 이동할 때 지불한다. 이러한 선택 이벤트(예컨대, 클릭 또는 탭)를 "클릭(click through)" 이벤트라고 지칭한다. 일부 광고 네트워크에서 광고주는 노출 대(versus) 클릭 이벤트에 대하여 다른 금액을 지불하며, 어떤 경우에는 노출에 대해 전혀 지불하지 않는다. 일부 광고 네트워크에서, 광고주는 광고의 수신자가 광고에 참여(engage)한 경우에만 노출에 대하여 비용을 지불한다. 일부 실시예에서, 참여를 장려하기 위해, 최종 사용자에게는 광고를 보거나 광고에 참여하는 대가로 보상(reward)을 얻을 기회가 제공된다. 이를 "보상 광고(rewarded ad)"라고 한다. 예를 들어, 게임 애플리케이션 내에 보상 광고가 제시되어 게임 플레이어는 보상 광고를 보거나 참여함으로써 "게임내(in game)" 보상을 얻을 수 있다. 플레이어의 게임 내 보상은 예를 들어, 게임 내 화폐, 추가 (extra) 플레이어 "수명(lives)", 게임 내 터미널 이벤트(terminal event)로부터의 복구, 추가 플레이 시간 등이 될 수 있다. 일부 구현예에서, 보상 광고는 광고 네트워크 서버(예컨대, 프리뷰 호스트 서버(170))로부터 스트리밍된 재생 가능한(playable) 애플리케이션이다. 일부 구현에서 재생 가능한 애플리케이션은 설치에 사용할 수 있는 전체 기능(full-feature) 애플리케이션의 기능적 데모 버전이다. 일부 구현예에서, 보상 광고는 최종 사용자가 예를 들어 수초 동안 샘플 게임을 하기 위해 상기 제시된 광고에 참여할 것으로 예상되는 사전 결정된 수의 초 (second)(프리뷰 프레젠테이션 세션 할당 시간) 동안 재생된다. 일부 구현예에서, 보상 광고는 제1 애플리케이션의 콘텍스트 내에서 제시되고, 제1 애플리케이션은 제시되는 데모 애플리케이션으로 인터페이스 제어를 효과적으로 전달한다.
데이터 관리기(150)는 메모리(156)에 데이터를 지속시키는 데이터 저장 및 관리 서비스를 제공한다. 메모리(156)는 하나 이상의 데이터 저장 디바이스를 사용하여 구현될 수 있다. 데이터 저장 디바이스는 컴퓨터 판독 가능 데이터를 저장하기에 적합한 임의의 메모리 디바이스일 수 있다. 데이터 저장 디바이스는 고정 저장 장치를 갖는 디바이스 또는 제거 가능한 저장 미디어를 판독하기 위한 디바이스를 포함할 수 있다. 예로는 모든 형태의 비 휘발성 메모리, 미디어 및 메모리 디바이스, 반도체 메모리 디바이스(예컨대, EPROM, EEPROM, SDRAM 및 플래시 메모리 디바이스), 자기 디스크, 광 자기 디스크 및 광 디스크(예컨대, CD ROM, DVD-ROM 또는 ㅍ플루레이 디스크)를 포함한다. 적합한 데이터 저장 디바이스의 구현예는 스토리지 영역 네트워크(Storage Area Network : SAN), 네트워크 취부 스토리지 (Network Attached Storage :NAS) 및 중복(redundant) 스토리지 어레이를 포함한다.
데이터 관리기(150)는 메모리(156)로의 액세스를 제어한다. 일부 구현예에서, 데이터 관리기(150)는 쿼리(query) 엔진을 호스팅한다. 일부 구현예에서, 데이터 관리기(150)는 예를 들어 관계형 데이터베이스 관리 시스템(RDBMS)을 사용하여 관계형 데이터베이스를 호스팅한다. 일부 구현예에서, 데이터 관리기(150)는 예를 들어 XML 파일과 같은 파일로서 메모리(156)내의 데이터를 관리한다. 일부 구현예에서, 데이터 관리기(150)는 자격 증명(credential) 또는 계좌 관리 유틸리티를 사용하여 데이터 또는 특징들로의 액세스를 규제한다. 일부 그러한 구현들에서, 자격 증명 또는 계좌 정보는 데이터 관리기(150)에 의해 메모리(156)에 저장된다.
데이터베이스 또는 보다 구체적으로는 데이터베이스 관리 시스템(DBMS)은 데이터베이스 정의(예컨대, 데이터베이스 스키마)에 따라 데이터를 조직화한다. 기본적인 관계형 데이터베이스에서, DBMS는 테이블 같은(table-like) 데이터 구조로 데이터를 유지 관리한다. 각 테이블에는 항목(entry) 타입, 분류 또는 목적에 각각 해당하는 열이 있다. 예를 들어, 테이블에는 숫자 데이터에 대한 열, 텍스트 데이터에 대한 열(예컨대, 수치 데이터의 디스크립션), 날짜 데이터에 대한 열 등이 있을 수 있다. 관계형 데이터베이스에서 테이블의 열에 있는 각 항목은 상기 항목을 테이블의 다른 열에 있는 항목과 연관시키는 행에 또한 있다. 경우에 따라 항목은 한 테이블의 행을 다른 테이블의 하나 이상의 행과 연관시킨다. 일부 DBMS 구현에서, "뷰(View)"라고 하는 가상 테이블은 마치 테이블인 것처럼 하나 이상의 테이블에서 가져온 데이터를 나타낸다(즉, 뷰는 데이터베이스 클라이언트 또는 사용자에게 마치 테이블처럼 보여지지만 반드시 그런 식으로 저장되는 것은 아니다). 다양한 타입의 관계형 데이터베이스, 객체 지향형(oriented) 데이터베이스, 문서 지향형 데이터베이스, XML 데이터베이스, NoSQL 데이터베이스 등을 포함하는 다른 타입의 데이터베이스 관리 시스템이 또한 사용될 수 있다. 이러한 데이터베이스 타입 중 많은 것은 관계형 데이터베이스를 참조하여 위에서 설명한 것과 유사한 방식으로 테이블 또는 테이블형 구조를 사용한다. 데이터베이스의 클라이언트 또는 사용자는 데이터베이스 명령 예를 들어, SQL(Structured Query Language)과 같은 데이터베이스 쿼리 언어의 쿼리)을 사용하여 데이터베이스에 데이터를 추가하거나, 데이터베이스내의 데이터를 수정하거나, 데이터베이스로부터 데이터를 검색할 수 있다. 하나 이상의 데이터베이스 명령은 데이터베이스 트랜잭션으로 함께 그룹화될 수 있다. 전통적으로, 데이터베이스는 트랜잭션 원자성, 일관성, 격리 및 내구성을 제공한다. 이들 속성은 약어 "ACID"로 알려져 있다. 일부 구현예에서, 데이터 관리기(150)는 모든 ACID 특성을 갖는 지식 기반을 제공한다. 그러나, 일부 구현예에서, 데이터 관리기(150)는 모든 ACID 특성을 제공하지 않는다
일부 구현예에서, 하나 이상의 서버(130, 140 및 170)는 예를 들어 다이렉트 링크 또는 네트워크(110)를 통해 데이터 관리기(150)와 통신한다. 일부 구현예에서, 하나 이상의 서버(130, 140 및 170)는 SQL(Structured Query Language), HTSQL(Hyper Text Structured Query Language), CQL(Contextual Query Language), DMX(Data mining Extensions) 또는 X쿼리(XML 쿼리)와 같은 공식 쿼리 언어의 쿼리들을 사용하여 데이터 관리기(150)로부터 데이터를 획득한다. 일부 구현예에서, 하나 이상의 서버(130, 140 및 170)는 CORBA(Object Request Broker Architecture), RPC(Remote Procedure Calls), OLE(Object Linking and Embedding), COM(Component Object Model) 또는 DCOM(Distributed Component Object Model)과 같은 프로세스간 통신 아키텍처를 사용하여 데이터 관리기(150)로부터 데이터를 획득한다. 일부 구현예에서, 하나 이상의 서버(130, 140 및 170)는 자연어 또는 의미론적(semantic) 쿼리들을 사용하여 데이터 관리기(150)로부터 데이터를 획득한다. 일부 구현예에서, 하나 이상의 서버(130, 140 및 170)는 시각화 API 쿼리 언어와 같은 커스텀 쿼리 언어의 질의를 사용하여 데이터 관리기(150)로부터 데이터를 획득한다.
프리뷰 호스트 서버(170)는 제3자 콘텐츠를 클라이언트 디바이스(120)로 제공한다. 일부 구현예에서, 프리뷰 호스트 서버(170)는 네트워크(110)를 통해 미디어를 클라이언트 디바이스(120)로 스트리밍하는 미디어 스트리밍 서비스를 실행한다. 일부 구현예에서, 미디어 스트림은 UDP, TCP 또는 SCTP와 같은 표준 프로토콜을 사용하여 전송된다. 일부 구현예에서, 미디어 스트림은 커스텀 프로토콜을 사용하여 전송된다. 일부 구현예에서, 미디어 스트림은 단방향이므로 클라이언트 디바이스(120)는 미디어 스트림을 수신할 수는 있지만 미디어 스트림의 콘텐츠에 응답하는 수단은 가지고 있지 않다. 일부 구현예에서, 미디어 스트림은 클라이언트 디바이스(120)가 미디어 스트림의 콘텐츠에 응답하는 수단을 갖도록, 예를 들어 미디어 스트림의 콘텐츠의 소스가 인터렉션에 응답할 수 있도록 대화형(interactive)이다. 예를 들어, 일부 구현예에서, 프리뷰 호스트 서버(170)는 미디어 스트림 콘텐츠를 수정하기 위한 명령을 클라이언트 디바이스(120)로부터 수신하여, 수신된 명령들에 따라 스트림 콘텐츠를 수정하거나 갱신한다.
일부 구현예에서, 프리뷰 호스트 서버(170)는 클라이언트 디바이스(120)의 시뮬레이션(simulated) 버전을 실행한다. 예를 들어, 일부 구현예에서, 프리뷰 호스트 서버(170)는 클라이언트 디바이스(120)의 이미지로부터 가상 머신을 실행하는 하이퍼바이저(hypervisor)이다. 가상 머신은 클라이언트 디바이스(120)의 가상화 버전, 즉 클라이언트 디바이스(120)의 시뮬레이션이다. 일부 구현예에서, 프리뷰 호스트 서버(170)는 에뮬레이트된(emulated) 클라이언트 디바이스(120)를 클라이언트 디바이스의 시뮬레이션으로서 제공하여 클라이언트 디바이스(120)에 대한 에뮬레이터를 실행한다. 일부 구현예에서, 프리뷰 호스트 서버(170)는 클라이언트 시뮬레이션 서버이다.
일부 구현예에서, 클라이언트 디바이스(120)의 시뮬레이션 버전을 실행하는 프리뷰 호스트 서버(170)는 시뮬레이션으로부터 미디어 스트림, 예를 들어, 오디오 출력 버퍼로부터의 오디오-비디오 미디어 합성물 및 시뮬레이션된 디바이스에 대한 그래픽 디스플레이 버퍼로부터 오디오-비디오 미디어 합성물을 스트리밍하는 시뮬레이션으로부터의 스트림을 생성한다. 미디어 스트림은 프리뷰 호스트 서버(170)에 의해 클라이언트 디바이스(120)로 전송되며, 여기서 미디어 스트림은은 클라이언트 디바이스(120)에 의해 제시될 수 있다. 클라이언트 디바이스(120)의 사용자는 예를들어 미디어 스트림에 제시된 요소들을 클릭하거나 태핑(tapping)하여 상기 클라이언트 디바이스(120)와 상호 작용할 수 있다. 이러한 인터렉션은 클라이언트 디바이스(120)에서 캡처되어 프리뷰 호스트 서버(170)로 전송되어, 프리뷰 호스트 서버(170)에 의해 상기 클라이언트 디바이스(120)의 시뮬레이션 버전을 위해 재생성된다. 이러한 방식으로, 클라이언트 디바이스(120)의 사용자는 인터렉션이 실제 클라이언트 디바이스(120)와 하는 것처럼 클라이언트 디바이스(120)의 시뮬레이션 버전과 상호 작용하는 경험을 갖는다. 애플리케이션은 클라이언트 디바이스(120)의 시뮬레이션 버전 상에 설치될 수 있어, 사용자는 애플리케이션이 실제 클라이언트 디바이스(120) 상에 설치되지 않고도 애플리케이션과 상호 작용할 수 있다.
일부 구현예에서, 클라이언트 디바이스(120)의 시뮬레이션 버전은 예를 들어 시뮬레이션될 클라이언트에 대한 구성 및 메모리 상태를 문서화하는 가상 머신 이미지 또는 데이터 세트와 같은 클라이언트 이미지로부터 시뮬레이션된다. 일부 구현예에서, 클라이언트 디바이스(120)의 시뮬레이션 버전은 일반(generic) 클라이언트 디바이스(120)의 스톡(stock) 이미지로부터 시뮬레이션된다. 일부 구현예에서, 클라이언트 디바이스(120)의 시뮬레이션 버전은 특정 클라이언트 디바이스(120)와 공통인 몇몇 특성을 갖는 일반화된 클라이언트 디바이스(120)의 스톡 이미지로부터 시뮬레이션된다. 예를 들어, 클라이언트 디바이스(120) 및 시뮬레이션 버전은 동일한 운영 체제 버전을 실행할 수 있고, 일치하는 디스플레이 크기 또는 디스플레이 품질 수준을 가질 수 있고 및/또는 동등한 컴퓨터 프로세서 및/또는 메모리 파라미터를 가질 수 있다. 공통된 속성들을 가짐으로써, 시뮬레이션된 디바이스 상에 설치된 애플리케이션과 상호 작용하는 사용자 경험은 클라이언트 디바이스(120) 상에 설치된 애플리케이션과 상호 작용하는 사용자 경험과 매우 유사할 것이다. 그러나, 애플리케이션이 시뮬레이션된 디바이스 상에 설치되고 실행될 때, 그것이 클라이언트 디바이스(120) 상에 설치될 필요는 없다. 일부 구현예에서, 프리뷰 세션은 프리뷰 세션이 제시될 클라이언트 디바이스(120)와 가장 일치하는(또는 이와 유사한 특성을 갖는) 클라이언트 이미지를 시뮬레이션을 위해 선택함으로써 시작된다.
일부 구현예에서, 아래에서 보다 상세히 설명되는 것처럼, 프리뷰 호스트 서버(170)는 클라이언트 디바이스(120)의 시뮬레이션(예컨대, 가상화) 버전의 일시 중지된 인스턴스를 가지며, 요청에 따라 클라이언트 디바이스(120)의 시뮬레이션된 인스턴스를 재개한다. 시뮬레이션된 클라이언트 디바이스의 일시 중지된 인스턴스에는 프리뷰 애플리케이션의 설치된 인스턴스가 포함된다. 예를 들어, 일시 중지된 인스턴스는 시뮬레이션 클라이언트 디바이스에서 프리뷰 애플리케이션을 실행하고 큐 포인트에서 시뮬레이션을 일시 중지함으로써 생성될 수 있다. 일부 구현예에서, 큐 포인트는 도 8을 참조하여 아래에서 설명되는 방법(800)의 구현을 사용하여 식별된다. 프리뷰 호스트 서버(170)가 프리뷰 애플리케이션으로부터 미디어 스트림을 제공하도록 요청되면, 프리뷰 호스트 서버(170)는 클라이언트 디바이스의 일시 중단된 인스턴스를 재개하고 큐 포인트로부터 프리뷰 애플리케이션의 실행을 재개한다. 일부 구현예에서, 프리뷰 호스트 서버(170)는 클라이언트 디바이스 특성 (characteristics) 또는 속성(property)의 상이한 순열(permutation)에 각각 대응하는 가상화된 클라이언트 디바이스의 다수의 중지된 인스턴스를 유지한다. 이러한 구현예들에서, 프리뷰 호스트 서버(170)는 스트림을 수신할 클라이언트 디바이스(120)의 특성 또는 속성에 가장 근접하게 일치하는 특성 또는 속성을 갖는 가상화된 클라이언트 디바이스의 중지된 인스턴스를 선택한다. 이어서, 프리뷰 호스트 서버(170)는 미디어 스트림을 프리뷰 세션에 제공하도록 상기 선택된 중지된 인스턴스를 재개한다.
일부 구현예에서, 클라이언트 디바이스(120)는 프리뷰 호스트 서버(170)로부터 미디어 스트림을 수신하여 이를 예를 들어 프리뷰 세션에서 클라인언트 디바이스(120)에 제시하는 프리뷰 프리젠테이션 인터페이스를 실행한다. 미디어 스트림을 제시하는 것은 미디어 스트림의 시각적인 부분을 제시하거나, 미디어 스트림의 오디오 부분을 제시하거나, 또는 미디어 스트림의 시각 및 오디오 부분 모두를 제시하는 것을 포함할 수 있다. 일부 구현예에서, 미디어 스트림은 포스(force) 피드백 데이터를 포함하고, 클라이언트 디바이스(120)는 예를 들어 클라이언트 디바이스 (120)를 진동 시키거나 클라이언트 디바이스(120)에 내장된 다른 햅틱 피드백 디바이스를 사용하여 미디어 스트림을 제시하면서 포스 피드백 데이터를 제시한다.
일부 구현예에서, 클라이언트 디바이스(120)에 의해 실행되는 프리뷰 프리젠테이션 인터페이스는 사용자 인터렉션 이벤트 데이터를 캡처한다. 인터렉션 이벤트 데이터는 예를 들어, 마우스 클릭, 터치 스크린 탭, 버튼 누름, 센서 작동 및 (예컨대, 가속도계, 자이로스코프, 틸트 센서 또는 클라이언트 디바이스(120)에 내장된 다른 모션 센서에 의해 측정된) 클라이언트 디바이스(120)의 움직임을 포함할 수 있다. 프리뷰 프리젠테이션 인터페이스는 이러한 인터렉션 데이터를 캡쳐하여 캡쳐된 인터렉션을 나타내는 데이터를 프리뷰 호스트 서버(170)로 전송한다. 일부 구현예에서, 프리뷰 프리젠테이션 인터페이스는 센서 입력 인터페이스 라이브러리를 연결(hooking)함으로써 인터렉션 데이터를 캡쳐한다. 일부 구현예에서, 프리뷰 프리젠테이션 인터페이스는 프리뷰 호스트 서버(170)와 클라이언트 디바이스(120) 사이에서 메시지를 교환하기 사이드-밴드 통신 채널을 제공한다.
클라이언트 디바이스(120)는 프리뷰 호스트 서버(170)로부터 수신된 콘텐츠의 프리젠테이션을 포함하는 제1 애플리케이션을 실행할 수 있다. 그런 다음 제1 애플리케이션은 프리뷰 프리젠테이션 인터페이스를 로딩하여 제1 애플리케이션에 대한 애플리케이션 프로그램 콘텍스트 내의 사용자에게 제시할 수 있다. 이러한 구현예에서, 제1 애플리케이션은 프리뷰 프리젠테이션 인터페이스로 향하는 인터렉션 입력에 액세스하지 못한다.
도 2A, 도 2B, 도 2C 및 도 2D는 프리뷰 프리젠테이션 세션에서 데모 애플리케이션에 참여시키기 위해 플레이어에게 보상을 주는 게임의 상이한 단계(stage)를 디스플레이하는 예시적터치 스크린 디바이스(200)의 예이다. 게임으로 되시되었지만, 많은 구현예에서, 어느 한쪽 또는 양쪽 애플리케이션은 스프레드시트 (spreadsheet) 애플리케이션, 데이터베이스 애플리케이션, 워드 프로세싱 애플리케이션, 뱅킹 유틸리티(banking utility) 애플리케이션, 소셜 네트워크 애플리케이션, 교육 애플리케이션 또는 기타 애플리케이션을 포함하는 임의의 타입 또는 형식의 애플리케이션일 수 있다. 전반적인 개요에서 도 2A에 도시된 예를 참조하면, 터치 스크린 디바이스(200)는 스크린(205)에 예시적인 애플리케이션 그래픽 사용자 인터페이스(GUI)(210)를 디스플레이한다. 애플리케이션 GUI(210)는 다른 애플리케이션, 즉 데모 게임의 시연에 참여함으로써 플레이어(터치 스크린 디바이스(200)의 사용자)가 게임 기회(play opportunity)를 얻는 게임을 위한 것이다. 플레이어가 게임 기회(예컨대, 수명, 라운드 등)의 뱅크(bank)를 모두 소비했을 때, 플레이어에게 데모 게임에 대한 프리뷰 프리켄테이션 세션이 제시된다. 프리뷰 프리젠테이션 세션이 종료된 후, 다른 애플리케이션에 참여하는 플레이어에 기초하여, 플레이어는 추가적인 게임 기회(플레이)로 보상받는다. 도 2B는 프리뷰 프리젠테이션 세션의 개시(beginning)시, 예를 들어 플레이어가 게임 기회의 뱅크를 다 써 버렸을 때 제시될 수 있는 전환 스크린(230)의 예시이다. 도 2C는 프리뷰 프리젠테이션 세션 동안 데모 게임을 위한 GUI(240)를 디스플레이하는 예시적인 터치 스크린 디바이스(200)의 도면이다. 도 2D는 예를 들어 데모 게임에 참여한 플레이어에 응답하여 프리뷰 프리젠테이션 세션 후에 제시되는 보상 메시지(260)의 예시이다.
보다 상세하게 도 2A를 참조하면, 터치 스크린 디바이스(200)는 사용자가 터치 스크린 디바이스(200)의 스크린(205)을 두드리거나(tapping), 스와이프하거나 (swiping) 또는 터치함으로써 터치 스크린 디바이스(200)와 상호 작용하는 클라이언트 디바이스(120)의 예이다. 도 2A에서, 스크린(205)은 제1게임을 위한 예시적인 애플리케이션 GUI(210)을 디스플레이한다. 도시된 예시적 게임은 사용자가 더 많은 게임 기회를 얻기 전에 제한된 수의 게임 기회를 가질 수 있도록 한다. 이 예에서, 제1게임은 제1게임에서 더 많은 게임 기회를 얻기 위해 사용자가 다른 애플리케이션(데모 게임)을 시연할 수 있는 프리뷰 프리젠테이션 세션을 호스트한다.
도 2B는 프리뷰 프리젠테이션 세션의 시작시, 예를 들어 플레이어가 게임 기회의 뱅크를 다 써 버렸을 때 제시될 수 있는 전환 스크린(230)의 예시이다. 도 2B에 도시된 바와 같이, 터치 스크린 디바이스(200)는 제1 애플리케이션 내에서 추가의 플레이를 얻기 위해, 사용자가 다른 애플리케이션, 즉 데모 게임과 상호 작용해야 한다는 것을 설명하는 메시지 박스를 갖는 전환 스크린(230)을 제시한다. 전환 스크린(230)은 터치 스크린 디바이스(200) 상에 데모 게임을 설치하지 않고 프리뷰 프리젠테이션 세션 동안 데모 게임이 재생될 수 있음을 명확하게 한다. 재생 가능한 데모 게임은 로컬 디바이스에 설치하지 않아도 되는 방식으로 원격 서버에서 로컬 디바이스로의 프리뷰 프레젠테이션 세션에서 제공된다. 예를 들어, 도 1을 참조하면, 프리뷰 호스트 서버(170)는 클라이언트 디바이스(120) 상에 애플리케이션을 설치하지 않고 클라이언트 디바이스(120)상의 애플리케이션과의 인터렉션을 지원할 수 있다.
도 2에 도시된 예에서, 전환 스크린(230)은 데모 게임이 로딩 중임을 나타내는 시각 요소(235)를 포함한다. 일부 구현예에서, 시각 요소(235)는 애니메이션 (animated) 그래픽(예컨대, 모래 시계 또는 바람개비)이다. 일부 구현예에서, 시각 요소(235)는 데모 게임으로부터 수신된 지시자(indicator)에 응답하여 갱신된다. 일부 구현예에서, 데모 게임은 사전-큐잉(pre-cued)되고 사전-큐잉된 상태로부터, 예를 들어 도 7을 참조하여 후술되는 방법(700)을 사용하여 제공된다. 사전-큐잉된 상태로부터 데모 게임(또는 임의의 프리뷰 애플리케이션)을 제공하는 것은 전환 스크린(230)에 도시된 로딩 시간의 양을 감소시킬 수 있다. 일부 구현예에서, 사전-큐잉은 로드 시간을 제거할 수 있으며, 전환 스크린(230)은 스킵되거나 생략될 수 있다.
도 2C는 프리뷰 프리젠테이션 세션 동안 데모 게임을 위한 GUI(240)를 디스플레이하는 예시적인 터치 스크린 디바이스(200)의 도면이다. 도 2C에 도시된 GUI(240)는 재생 가능한 데모 게임에 대한 예시적인 스플래시 스크린이다. 데모 게임에 대한 프리뷰 프리젠테이션 세션이 시간 제한된 프리뷰임을 나타내는 메시지 바(250)가 스플래시 스크린 상부에 도시되어 있다. 이탈 버튼(escape button)(255)이 또한 도시되어 있다. 일부 구현예에서, 프리뷰 프리젠테이션 세션은 사전 결정된 시간 제한(time limit)을 갖는다. 그러나, 일부 구현예에서, 사용자는 예를 들어 이탈 버튼(255)을 클릭하거나 선택함으로써 사전 결정된 시간이 경과하기 전에 프리뷰 프리젠테이션 세션을 중단(quit)하거나 종료(exit)할 수 있다. 일부 구현예에서, 이탈 버튼 버튼(255)은 프리뷰 프리젠테이션 세션의 초기 기간 동안 표시되지 않거나(또는 디스에이블되고), 초기 기간 이후에 표시(또는 인에이블)된다. 일부 구현예에서, 초기 기간은 프리뷰 프리젠테이션 세션에 대한 사전 결정된 시간의 백분율이다. 일부 구현들에서, 초기 기간은 고정된 시간 길이, 예를 들어 15초이다. 일부 구현에서, 초기 기간은 데모 게임이 로딩된 후 고정된 시간 길이로 종료된다.
일부 구현예에서, 데모 게임이 로딩 중임을 나타내는 (도 2B에 도시된) 시각 요소(235)는 전환 스크린(230) 대신에 데모 게임 자체로부터 스플래시 스크린에 디스플레이된다. 일부 구현예에서는, 어떠한 전환 스크린(230)도 사용되지 않는다. 대신, 데모 게임을 소개하는 스플래시 화면이 표시되고 데모 게임이 "재생 가능"함을 나타내는 메시지가 표시된다.
데모 게임이 로딩되면 사용자 참여를 위한 인터페이스를 제시할 수 있다. 예를 들어, 도 2C에 도시된 바와 같이, 데모 게임은 "시작" 버튼(245)을 제시할 수 있다. 일부 구현예에서, 데모 게임은 제어 인터페이스, 플레이 명령 또는 게임이 사용자 인터렉션을 위해 준비되었다는 다른 지시자를 제시할 수 있다. 사용자는 예를 들어,"시작" 버튼(245)을 탭핑하고, 데모 게임의 플레이 가능 엘리먼트를 탭핑하고, 터치 스크린 디바이스(200)를 움직여 내부 모션 센서를 작동시키는 등을 수행하여 데모 게임에 참여할 수 있다. 상술한 바와 같이, 버튼(245)과 같은 게임의 플레이 가능 요소의 위치는 호스트 애플리케이션, 디바이스의 운영 시스템 또는 클라이언트 에이전트에 알려지지 않았거나 이용 가능하지 않을 수 있다. 그러한 요소들과의 인터렉션을 감지하는 것은 본 명세서에서 논의되는 간접(indirect)시스템 및 방법을 통해 수행될 수 있다. 일부 구현예에서, 프리뷰 프리젠테이션 세션 시간이 종료되거나 사용자가 이탈 버튼(255)을 선택할 때, 호스트 애플리케이션은 사용자가 데모 게임에 참여했는지의 지시자를 수신한다.
도 2D는 예를 들어 데모 게임에 참여한 플레이어에 응답하여 프리뷰 프리젠테이션 세션 이후에 제시되는 보상 메시지(260)의 예시이다. 도 2D에서, 제1게임 GUI(210)는 프리뷰 프리젠테이션 세션 동안 데모 게임에 참여한 사용자에 응답하여 제공되는 보상을 설명하는 메시지 박스(260)와 함께 디스플레이된다.
도 3은 예시적인 인터렉티브 프리뷰 세션에 대한 흐름도(300)이다. 도 2A, 도 2B, 도 2C 및 도 2D의 설명은 프리뷰 세션의 일 예에 관한 것이며, 이하의 도 3의 설명에서 예로서 참조된다. 그러나 이들 설명은 단지 클라이언트 디바이스에서 실행되고, 보상 기회를 제시하고, 인터렉티브 제3자 콘텐츠를 제시하며 그리고 보상을 제시하는 예제 애플리케이션의 예일 뿐이다. 이 예들은 제한하려는 것이 아니다.
전반적인 개요에서 도 3을 참조하면, 흐름도(300) 전체에 걸쳐, 사용자는 클라이언트 디바이스(예컨대, 도 1에 도시된 클라이언트 디바이스(120)) 상에 제시된 애플리케이션과 상호 작용할 수 있다. 클라이언트 디바이스상에서 국부적으로 실행될 수 있는 제1 애플리케이션 및 상기 제1 애플리케이션의 콘텍스트 내에서 제시되지만 예를 들어, (도 1에 도시된 바와 같은) 프리뷰 호스트 서버(170)에서 원격으로 실행될 수 있는 제2 애플리케이션이 존재한다. 흐름도(300)에서, 단계(310)에서, 클라이언트 디바이스는 제1 애플리케이션을 사용자에게 제공한다. 단계(320)에서, 클라이언트 디바이스는 제2 애플리케이션의 프리젠테이션을 요청하는데, 예를 들어 (도 1에 도시된 바와 같은) 프리뷰 배포 서버(140)로 요청을 전송하는 것을 요청한다. 단계(330)에서, 클라이언트 디바이스는 제1 애플리케이션 내의 인터렉티브 프리뷰 세션에서 제2 애플리케이션을 제시한다. 단계(340)에서, 클라이언트 디바이스는 제2 애플리케이션과의 사용자 인터렉션을 검출한다. 단계(350)에서, 클라이언트 디바이스는 호스트 서버로 인터렉션 디스크립션(description)을 제공하는데, 예를 들어 (도 1에 도시된 바와 같이) 단계(340)에서 검출된 인터렉션의 디스트립션을 프리뷰 호스트 서버(170)로 전송한다. 단계(360)에서, 클라이언트 디바이스는 프리뷰 세션이 종료되었는지 여부를 결정한다. 단계(370)에서, 프리뷰 세션이 종료된 것으로 결정한 클라이언트 디바이스는 제1 애플리케이션으로 복귀한다. 일부 구현예에서, 프리뷰 세션 동안, 이러한 모든 인터렉션 데이터는 단계(350)에서 호스트 서버로 효과적으로 다시 보내지기(redirected) 때문에, 제1 애플리케이션은 임의의 인터렉션 입력을 수신하지 못한다. 일부 구현예에서, 단계(370)에서 제1 애플리케이션으로 복귀할 때, 클라이언트 디바이스는 제1 애플리케이션에 프리뷰 세션에 관한 피드백 또는 분석을 제공한다.
보다 상세하게 도 3을 참조하면, 단계(310)에서, 클라이언트 디바이스는 제1 애플리케이션을 사용자에게 제공한다. 제1 애플리케이션은 실행 환경에서 클라이언트 디바이스에 의해 실행된다. 실행 환경은 예를 들어 운영 체제 및 운영 체제에 의해 제공되는 임의의 동적 로드 라이브러리를 포함할 수 있다. 일부 구현예에서, 실행 환경은 디바이스 드라이버, 센서 관리기 등을 포함한다. 일부 구현예에서, 실행 환경은 커널이 디바이스 드라이버를 포함하는 운영 체제 커널을 포함한다. 일부 구현예에서, 실행 환경은 하드웨어 추상화 계층을 포함한다. 제1 애플리케이션은 소프트웨어 유틸리티, 소셜 미디어 애플리케이션, 게임 또는 클라이언트 디바이스에서 실행될 수 있는 임의의 다른 애플리케이션일 수 있다. 사용자는 클라이언트 디바이스상의 인터페이스와 상호 작용하여 제1 애플리케이션과 상호 작용한다. 예를 들어, 사용자는 클라이언트 디바이스상의 터치 스크린을 물리적으로 터치함으로써(예컨대, 도 2A에 도시된 터치 스크린 디바이스(200)상의 예시적인 그래픽 유저 인터페이스(210)를 참조하여 위에서 설명된 바와 같이) 제1 애플리케이션과 상호 작용할 수 있다. 일부 구현예에서, 사용자는 스크린을 탭핑하고, 클라이언트 디바이스상의 버튼을 누르고, 클라이언트 디바이스를 움직이거나 흔들고(디바이스 모션 센서를 작동시킴으로써), 또는 클라이언트 디바이스의 마이크로폰에 말함으로써 제1 애플리케이션과 상호 작용할 수 있다 . 일부 구현예에서, 클라이언트 디바이스는 카메라를 포함하고 사용자는 카메라를 통해 제1 애플리케이션과 상호 작용한다.
단계(320)에서, 클라이언트 디바이스는 제2 애플리케이션의 프리젠테이션을 요청하는데 예를 들어 (도 1에 도시된 바와 같은) 프리뷰 배포 서버(140)로 요청을 전송하는 것을 요청한다. 일부 구현예에서, 제2 애플리케이션의 프리젠테이션 요청은 요청하는 디바이스, 즉 클라이언트 디바이스(120)의 특성을 나타내는 데이터를 포함한다. 예를 들어, 요청은 클라이언트 디바이스(120)의 제조사 및 모델을 나타내고, 운영 체제 빌드(build) 또는 버전을 나타내며, 화면 크기, 프로세서 칩 세트, 가용 메모리 등과 같은 물리적 속성을 나타낼 수 있다. 일부 구현예에서, 제2 애플리케이션의 프리젠테이션에 대한 요청은 제2 애플리케이션을 특정한다. 일부 구현예에서, 제2 애플리케이션의 프리젠테이션 요청은 임의의 제2 애플리케이션에 대한 요청이다. 예를 들어, 요청은 클라이언트 디바이스(120)로부터 상기 클라이언트 디바이스(120)로 전달될 콘텐츠를 선택할 책임이 있는 프리뷰 배포 서버(140)로 전송될 수 있다. 이어서, 프리뷰 배포 서버(140)는 프리뷰 세션에 대한 특정 애플리케이션을 식별할 수 있다. 일부 구현예에서, 프리뷰 배포 서버(140)는 예를 들어 프리뷰 호스트 서버(170)로부터 클라이언트 디바이스(120)로 제2 애플리케이션에 대한 프리뷰 세션 콘텐츠의 전달을 유발한다. 일부 구현예에서, 프리뷰 배포 서버(140)는 프리뷰 세션 요청 데이터를 클라이언트 디바이스(120)로 제공하고, 클라이언트 디바이스(120)는 프리뷰 호스트 서버(170)로부터 제2 애플리케이션에 대한 프리뷰 세션 콘텐츠의 전달을 요청한다. 일부 구현에서, 요청은 URL(uniform request locator)에 격납(embeded)된다. 예를 들어,일부 구현예에서, 프리뷰 배포 서버(140)는 URL을 클라이언트 디바이스(120)로 제공하고, 클라이언트 디바이스 (120)는 제공된 URL로부터 데이터를 검색하여 프리뷰 세션 콘텐츠를 효과적으로 요청한다. 일부 구현예에서, 요청은 커스텀 요청 프로토콜, 예를 들어 암호화 서명 및/또는 암호화된 요청 식별자를 포함하는 프로토콜에 따라 포맷된다.
단계(330)에서, 클라이언트 디바이스는 제1 애플리케이션 내의 인터렉티브 프리뷰 세션에서 제2 애플리케이션을 제시한다. 인터렉티브 프리뷰 프리젠테이션 세션은 사용자가 제3자 콘텐츠, 즉 제2 애플리케이션에 참여할 수 있는 기회이다. 예를 들어, 제2 애플리케이션은 제1 애플리케이션에서 보상 기회로 제시되어, 사용자에게 제3자 콘텐츠를 보거나 참여(예를 들어, 다른 애플리케이션을 프리뷰)함으로써 무언가(인센티브)를 얻을 기회를 제공할 수 잇다. 상기 인센티브는 제1 애플리케이션 자체의 보상일 수도 있고 애플리케이션의 외부에 대한 액세스일 수도 있다. 예를 들어, 만약 애플리케이션이 게임인 경우, 인센티브는 게임 내의 추가 "게임(play)" 또는 "수명", 추가 게임 내 자원, 레벨 또는 기능에 대한 액세스, 추가 게임 내 화폐 또는 신용, 추가 게임 시간, 시간 지연 게임 내 요소의 가속 등일 수 있다. 만약, 애플리케이션이 유틸리티 예를 들어 사진 편집 프로그램 또는 프리젠테이션 유틸리티이면, 상기 인센티브는 추가 툴, 필터, 커스텀 그래픽, 클립 아트,"스티커"등에 대한 액세스일 수 있다. 일부 애플리케이션은 백-엔드 서버, 예를 들어 도 1에 도시된 애플리케이션 백-엔드 서버(130)에 의존할 수 있으며, 인센티브는 백 엔드 서버상의 리소스 사용과 관련될 수 있다. 예를 들어, 애플리케이션에는 백-엔드 서버에서 수행되는 기능이 포함될 수 있으며 사용자는 제3자 콘텐츠와의 참여(engagement)에 기초하여 백 엔드 기능에 대한 액세스 권한을 부여받을 수 있다. 다른 예로서, 애플리케이션은 백-엔드 서버에 데이터를 저장할 수 있으며 인센티브는 추가 데이터 저장 공간일 될 수 있다. 일부 구현에서, 인센티브는 애플리케이션 외부에 있다. 일부 구현예에서 인센티브는 레스토랑, 소매점, 놀이 공원, 극장, 공연장, 장비 대여 위치, 서비스 제공자 등에서 상환할 수 있는 쿠폰 또는 티켓이다. 일부 구현에서, 인센티브는 그림이나 추첨에 참여하는 것이다. 인센티브는 제3자 콘텐츠에 대한 사용자의 참여를 보상하기 위해 애플리케이션이 사용하는 모든 것일 수 있다.
일부 구현예에서, 애플리케이션은 애플리케이션 프로그래밍 인터페이스(API)에 대한 함수 호출을 통해 인터렉티브 프리뷰 프리젠테이션 세션을 인스턴스화함으로써 사용자에게 제3자 콘텐츠를 제시한다. 일부 구현에서, 애플리케이션은 소프트웨어 개발자 키트(SDK)에서 제공된 유틸리티를 사용하여 인터렉티브 프리뷰 프리젠테이션 세션을 인스턴스화하여 사용자에게 제3자 콘텐츠를 제시한다. 일부 구현에서 애플리케이션은 동적 로드 라이브러리(DLL)에 대한 함수 호출을 통해 인터렉티브 프리뷰 프레젠테이션 세션을 인스턴스화하여 사용자에게 제3자 컨텐트를 제시한다. 일부 구현예에서, 제2 애플리케이션은 제1 애플리케이션에 의해 프레임된 (framed) 디스플레이 윈도우 내에 제시된다. 예를 들어, 도 2B에서, 전환 스크린 (230)은 제1 애플리케이션에 의해 프레임된 디스플레이 윈도우에 제시된다. 일부 구현에서, 이 윈도우는 제2 애플리케이션을 제시하는데 사용된다. 이러한 윈도우 내에서 제시될 때, 제2 애플리케이션은 제1 애플리케이션의 컨텍스트 내에서 명확하게 제시된다. 윈도우의 더 작은 디스플레이 공간은 또한 프리젠테이션 디바이스들 간의 변화(variation)를 감소시킬 수 있다(즉, 디스플레이의 프레임 부분 (framing portion)은 상이한 스크린 크기 또는 해상도를 갖는 디바이스들사이에서 변할 수 있고, 윈도우 자체는 보다 일정한 크기 및 해상도를 가질 수 있다). 일부 구현에서, 제2 애플리케이션은 전체 스크린을 사용하여 표시된다. 예를 들어, 도 2C에서, 도시된 그래픽 사용자 인터페이스(GUI)(240)는 예시적인 터치 스크린 디바이스(200)상의 전체 스크린(205)을 사용하는 재생 가능한 데모 게임을 위한 예시적인 스플래시 스크린이며, 여기서 이탈 버튼(255)을 갖는 메시지 바(250)는 GUI(240) 위에 겹쳐져(layered)있다. 전체 스크린(205)을 사용하여 제시될 때, 제2 애플리케이션은 사용자가 클라이언트 디바이스 상에 제2 애플리케이션을 설치해야 하는 경우 사용자가 그것을 보게 되는 것과 동일한 방식으로 제시된다. 즉, 전체 스크린(205)을 사용함으로써 사용자는 기본적으로(natively)로 실행되는 제2 애플리케이션을 갖는 것과 유사한 프리뷰 경험을 수신한다.
단계(340)에서, 클라이언트 디바이스는 제2 애플리케이션과의 사용자 인터렉션을 감지한다. 사용자의 관점에서, 클라이언트 디바이스에 제시된 제2 애플리케이션은 상호작용 적이다. 사용자는 예를 들어 터치 감지 스크린에 디스플레이된 가상 버튼을 탭핑함으로써 제2 애플리케이션이 제시하는 임의의 인터페이스에 참여할 수 있다. 일부 구현예에서, 사용자는 클라이언트 디바이스상의 물리적 버튼을 누르거나 작동시킴으로써 제2 애플리케이션과 상호 작용할 수 있다. 일부 구현예에서, 사용자는 클라이언트 디바이스를 회전, 기울이기, 흔들기 또는 물리적으로 이동시킴으로써 제2 애플리케이션과 상호 작용할 수 있다. 일반적으로 사용자가 로컬에 설치된 애플리케이션과 상호 작용하는데 사용할 수 있는 임의의 인터렉션의 모드는 제2 애플리케이션이 로컬로 설치되지 않은 경우에도 제2 애플리케이션과 상호 작용하는데 사용될 수 있다. 이러한 인터렉션은 로컬 디바이스에서 발생하며 각 인터렉션 이벤트는 로컬 디바이스의 하나 이상의 센서에서 수신되고 실행 환경에 의해 처리된다. 예를 들어, 사용자가 클라이언트 디바이스를 회전시키는 경우, 이 활동 (activity)은 모션 센서(예컨대, 가속도계, 자이로스코프 또는 틸트 스위치)에 의해 감지되어 실행 환경의 디바이스 드라이버 또는 센서 관리기에 의해 처리된다. 클라이언트 디바이스는 감지된 모션을 소프트웨어 이벤트 또는 신호로 변환한 다음 제1 애플리케이션 또는 제2 애플리케이션에 보고한다. 일부 구현예에서, 제2 애플리케이션은 프리뷰 호스트 서버(170), 예를 들어 가상 머신상의 시뮬레이션 환경에서 실행되고, 클라이언트 디바이스는 인터렉션 이벤트 디스크립션을 프리뷰 호스트 서버(170)로 전송하고, 프리뷰 호스트 서버(170)는 제2 애플리케이션에 제공한다. 센서들로부터 애플리케이션들로의 데이터의 흐름은 도 4를 참조하여 아래에서 보다 상세히 논의된다.
단계(350)에서, 단계(340)에서 인터렉션을 감지하는 것에 응답하여, 클라이언트 디바이스는 호스트 서버로 인터렉션 디스크립션을 제공한다. 예를 들어, 일부 구현예에서, 클라이언트 디바이스는 단계(340)에서 검출된 인터렉션의 디스크립션을 (도 1에 도시된 바와 같이) 네트워크(110)를 통해 프리뷰 호스트 서버(170)로 전송한다. 디스크립션은 예를 들어 제2 애플리케이션에 대한 입력으로서 호스트 서버에서 인터렉션을 재생성하기에 충분한 정보를 호스트 서버로 제공한다. 일부 구현예에서, 클라이언트 디바이스는 클라이언트 디바이스상의 입력 센서(예컨대, 터치 스크린, 가속도계, 틸트 센서, 버튼, 마이크로폰 또는 광 센서)로부터의 신호를 캡쳐, 후크 또는 인터셉트하여 상기 캡쳐된, 후킹된, 또는 인터셉트된 신호를 호스트 서버로 전송한다. 일부 구현예에서, 호스트 서버로 전송된 정보는 데이터 구조로 패키징된다. 예를 들어, 클라이언트 디바이스는 데이터 구조에 추가 컨텍스트 정보, 예를 들어, 인터렉션이 감지된 때를 나타내는 시간 값을 포함할 수 있다. 일부 구현예에서, 인터렉션 디스크립션(또는 인터렉션 디스크립션을 포함하는 데이터 구조)은 클라이언트 디바이스에서 압축되고, 클라이언트 디바이스는 압축된 정보를 호스트 서버로 전송함으로써 호스트 서버에 인터렉션 디스크립션을 제공한다.
단계(360)에서, 클라이언트 디바이스는 프리뷰 세션이 종료되었는지 여부를 결정한다. 프리뷰 세션은 예를 들어 미리 정해진 시간이 경과하거나, 제2 애플리케이션이 종료하거나, 또는 예를 들어, 사용자가 이탈 버튼을 선택한 결과로서 클라이언트 디바이스가 조기 종료를 요청할 때 종료될 수 있다. 일부 구현예에서, 클라이언트 디바이스는 프리뷰 세션이 종료되었음을 나타내는 신호를 호스트 서버로부터 수신한다. 일부 구현예에서, 클라이언트 디바이스는 프리뷰 세션이 종료되었음을 나타내는 신호를 생성하여 호스트 서버로 전송한다.
단계(370)에서, 프리뷰 세션이 종료된 것으로 결정한 클라이언트 디바이스는 제1 애플리케이션으로 복귀한다. 일부 구현예에서, 프리뷰 세션 동안, 모든 인터렉션 데이터는 단계(350)에서 호스트 서버로 효과적으로 다시 보내지기 때문에, 제1 애플리케이션은 임의의 인터렉션 입력을 수신하지 못한다. 일부 구현예에서, 단계(370)에서 제1 애플리케이션으로 복귀할 때, 클라이언트 디바이스는 제1 애플리케이션에게 프리뷰 세션에 관한 피드백 또는 분석을 제공한다.
일부 구현예에서, 분석기는 단계(340)에서 검출된 인터렉션에 인터렉션 휴리스틱(heuristic)을 적용한다. 인터렉션 휴리스틱은 프리젠테이션 세션 동안 발생하는 인터렉션 이벤트를 나타내는 데이터 세트를 클라이언트 디바이스(120)의 사용자가 미디어 스트림에 참여한 가능성으로 변환한다. 휴리스틱은 사용자가 프리뷰 프리젠테이션 세션 동안 클라이언트 디바이스에 관여(engaged)했는지 아니면 무시했는지 여부를 결정하는데 사용될 수 있다. 예를 들어, 만약 클라이언트 디바이스(120)가 클라이언트 디바이스(120)의 전면 스크린이 아래로 향한 상태로 내려지거나, 디바이스 오디오 재생이 프리뷰 프리젠테이션 세션 동안 음소거(mute)로 설정되면, 이는 사용자가 콘텐츠에 참여하지 않았다는 강력한 지표(indicator)가 될 수 있다. 마찬가지로, 클라이언트 디바이스(120)의 작은 모션은 사용자가 프리젠테이션 세션 동안 디바이스를 계속 들고 있음을 나타낼 수 있으며, 이는 참여 가능성이 더 높을 수 있음을 시사한다. 일부 구현예에서, 휴리스틱은 프리뷰 프리젠테이션 세션 동안 스크린이 디스플레이 상태를 변경했는지 여부를 고려한다. 예를 들어, 만약 스크린에 사용자 입력을 기다리는 메뉴 옵션이 디스플레이되고 변경되지 않으면, 이는 사용자가 콘텐츠에 참여하지 않았음을 나타낼 수 있다. 일부 구현예에서, 휴리스틱은 이탈 버튼(예컨대, 이탈 버튼(255))이 프리뷰 프리젠테이션 세션을 조기에 종료시키는데 사용되었는지 여부를 고려한다(그러나, 조기 종료는 반드시 사용자가 참여하지 않았다는 것을 의미하는 것은 아니며, 사용자는 할당된 기간이 경과하기 전에 제3자 콘텐츠에 대한 참여를 완료했을 수 있다). 다른 예로서, 디바이스 오디오 재생의 볼륨이 증가되거나 음소거되면, 이들 이벤트는 프리젠테이션 세션 동안 사용자가 제3자 콘텐츠에 관여했음을 나타낼 수 있다. 일부 구현예에서, 클라이언트 디바이스가 단계(370)에서 제1 애플리케이션으로 복귀할 때, 클라이언트 디바이스는 인터렉션 휴리스틱의 평가(evaluation)에 기초하여 제1 애플리케이션으로 정보를 제공한다. 예를 들어, 일부 구현예에서, 클라이언트 디바이스는 상태(330)에서 인터렉티브 프리뷰 세션에 제시된 콘텐츠에 사용자가 관여한(또는 관여하지 않은) 확률 또는 가능성에 대응하는 값을 제1 애플리케이션으로 제공한다.
도 4는 예시적인 인터렉티브 프리뷰 세션 동안 예시적인 클라이언트 디바이스(420)(예컨대, 클라이언트 디바이스(120))상의 데이터 흐름의 일 예를 나타내는 도면(400)이다. 도면(400)에서, 예시적인 클라이언트 디바이스(420)는 예를 들어 도 3을 참조하여 상술한 바와 같이 프리젠테이션 객체(470)에서 프리뷰 세션을 제공하는 소프트웨어 애플리케이션(430)을 실행한다. 프리젠테이션 객체(470)는 네트워크(110)를 통해 원격 호스트 서버(예컨대, 도 1에 도시된 바와 같이 프리뷰 호스트 서버(170))로부터 미디어 스트림(434)을 수신한다. 프리젠테이션 객체(470)는 물리적 이벤트의 디스크립션(436)을 원격 호스트 서버(즉, 프리뷰 호스트 서버(170))로 전송함으로써 인터렉티브 프리뷰 세션을 용이하게 한다. 예시적인 클라이언트 디바이스(420)는 디바이스 인터페이스(422) 및 센서(426)를 사용하여 물리적 이벤트를 검출한다. 일부 구현예에서, 디바이스 인터페이스(422)는 입력을 수신하기 위한 임의의 형태의 사용자 액션을 요구할 수 있고, 센서(426)는 사용자 액션에 관계 없이(또는 필요로 하는) 현재 디바이스 조건을 검출하는데 보다 수동적일 수 있다. 일부 구현예에서, 도 4에 도시된 바와같이, 애플리케이션 스택(440)은 디바이스 인터페이스들(422) 및 센서들(426)로부터의 정보를 전달한다. 예를 들어, 일부 구현예에서, 애플리케이션 스택(440)은 커널 레벨 드라이버(442) 및 하드웨어 추상화 계층(444)(HAL(444))을 포함한다. 커널 레벨 드라이버(442)는 디바이스 인터페이스(422) 및/또는 센서(426)로부터 물리적 이벤트를 나타내는 데이터를 수신하고, 커널 레벨 드라이버(442)는 데이터를 HAL(444)로 전달한다. 예시된 애플리케이션 스택(440)은 또한 운영 프레임 워크(448)를 지원하기 위해 HAL(444)상에서 실행되는 런타임 계층(446)을 포함한다. 런타임 계층(446)은 HAL(444)을 사용하여 상이한 하드웨어 플랫폼 간의 사소한 차이에 관계없이 균일한 실행 플랫폼으로 애플리케이션(예컨대, 소프트웨어 애플리케이션(430))을 제시한다. 운영 프레임 워크(448)는 프로세스 관리기, 유틸리티, 라이브러리 및 애플리케이션, 예를 들어 소프트웨어 애플리케이션(430)에 의해 사용되는 다른 리소스를 제공한다. 예를 들어,일부 구현예에서, 애플리케이션 스택(440)은 메시지(468)를 프리뷰 호스트 서버 (170)와 교환하기 위한 메시징 서비스(460)를 포함한다. 일부 구현예에서, 프리젠테이션 객체(470)는 애플리케이션 스택(440)으로부터의 리소스를 사용한다. 일부 구현예에서, 메시징 서비스는 소프트웨어 애플리케이션(430)에 통합된다. 도시된 예시적인 아키텍처 및 데이터 흐름은 제한하려는 것이 아니다. 대안적인 디바이스 설계는 다른 방식으로, 예를 들어 상이한 아키텍처를 사용하여 센서 및 입력 메카니즘으로부터 소프트웨어 및/또는 원격 서버로 데이터를 전달한다.
예시적인 클라이언트 디바이스(420)는 입력을 수신하고 소프트웨어 애플리케이션을 실행하는 컴퓨팅 시스템 또는 프로세서 기반 디바이스이다. 예시적인 클라이언트 디바이스(420)는 기술된 바와 같은 기능할 수 있는 임의의 디바이스일 수 있으며, 예를 들어 도 1을 참조하여 상술한 클라이언트 디바이스(120)일 수 있다. 일부 구현예에서, 예시적인 클라이언트 디바이스(420)는 예를 들어 키보드, 디스플레이, 터치 스크린, 마이크로폰, 스피커 등과 같은 데이터 입력 및 데이터 프리젠테이션을 용이하게 하기 위한 하나 이상의 하드웨어 디바이스 인터페이스(422) 요소를 포함한다. 일부 구현예에서, 디바이스 인터페이스(422)는 볼륨 버튼과 같은 전용 버튼을 포함한다. 일부 구현예에서, 디바이스 인터페이스(422)는 소프트웨어 지정 가능 목적 및 작업 뿐만 아니라 터치 스크린에 디스플레이된 버튼을 갖는 물리적 버튼과 같은 "소프트" 버튼을 포함한다. 일부 구현예에서, 예시적인 클라이언트 디바이스(420)는 물리적 이벤트를 수동적으로 검출할 수 있는 하나 이상의 센서(426), 예를 들어(단일 축 또는 다중 축 가속도계, 틸트 센서 및 자이로 스코프와 같은) 모션 센서, 핑거 프린트 센서, 광 센서, 이미지 센서(예컨대, 카메라), 온도 센서, 습도 센서 등을 포함한다. 어떤 경우에, 센서는 사용자가 소프트웨어 응답을 발생하도록 클라이언트 디바이스(420)를 회전시킬 때 처럼 디바이스 인터페이스(422)로서 사용될 수 있다. 디바이스 인터페이스(422)와 센서(426)는 각각 물리적 이벤트를 전자 신호로 변환할 수 있는 임의의 디바이스일 수 있다. 일부 구현예에서, 예시적인 클라이언트 디바이스(420)는 특수 목적 논리 회로, 예를 들어 ASIC(application specific integrated circuit)을 사용하여 구현된다. 일부 구현예에서, 클라이언트 디바이스(120)는 적어도 하나의 프로세서(또는 마이크로 프로세서) 코어를 포함하는 SoC(system on a chip) 반도체 디바이스를 사용하여 구현된다. 일부 구현예에서, 예시적인 클라이언트 디바이스(420)는 범용 프로세서를 사용하여 구현된다. 아래에서 보다 상세하게 설명되는 도 10은 일부 구성에서, 예시적인 클라이언트 디바이스(420)로서 사용하기에 적합한 컴퓨팅 디바이스를 도시한다.
예시적인 클라이언트 디바이스(420)는 하나 이상의 커널 레벨 드라이버(442)를 포함하는 운영 체제 커널을 실행한다. 각각의 커널 레벨 드라이버(442)는 대응하는 디바이스 인터페이스(422) 또는 센서(426)로부터 수신된 입력 신호를 데이터 프리젠테이션으로 변환한다. 일부 구현예에서, 커널 레벨 드라이버(442)는 운영 체제 커널로 컴파일된다. 일부 구현예에서, 커널 레벨 드라이버(442)는 예를 들어 시동 또는 부팅 단계(phase) 동안 커널로 동적으로 로딩된다. 일부 구현예에서, 운영 체제 커널은 리눅스 버전이다. 일부 구현에서 운영 체제 커널은 스레딩(threading) 및 일부 메모리 관리와 같은 핵심 시스템 기능들을 제공한다. 일부 구현예에서, 운영 체제 커널은 인터럽트 처리기를 사용하여 커널 레벨 드라이버(442)로부터의 신호를 처리한다.
하드웨어 추상화 계층(HAL)(444)은 동일한 런타임 계층(446) 및 동작 프레임 워크(448)가 여러 유형의 하부 물리적 하드웨어상에서 기능하도록 하는 추상화 계층이다. HAL(444)은 커널 레벨 드라이버(442)의 하드웨어-특정 버전에 의해 생성될 수 있는 상이한 데이터 프리젠테이션을 균일한 데이터 프리젠테이션으로 변환한다. 일부 구현예에서, HAL(444)은 이벤트 핸들러를 포함한다. 일부 구현예에서, HAL (444)은 이벤트 모니터를 포함한다. 일부 구현예에서, HAL(444)은 이벤트 핸들러를 포함하는데, 여기서 이벤트 핸들러는 이벤트 모니터를 포함한다.
런타임 계층(446)은 HAL(444)상에서 실행되어 예시적인 클라이언트 디바이스(420)에서 실행되는 애플리케이션들에 대한 동작 프레임 워크(448)를 지원한다. 일부 구현예에서, 런타임 계층(446)은 (전술한 하위 레벨 운영 체계 커널 대신에) 설치된 애플리케이션들에 운영 체제로서 나타난다. 이러한 구현예에서, 런타임 계층(446)은 독립된(isolated) 애플리케이션 실행을 위해 하나 이상의 가상 머신을 제공한다. 일부 구현에서, 런타임 계층(446)은 자바 가상 머신(JVM)과 같은 바이트-코드 처리 가상 머신이다.
운영 프레임 워크(448)는 프로세스 관리기, 유틸리티, 라이브러리 및 애플리케이션, 예를 들어 소프트웨어 애플리케이션(430)에 의해 사용되는 다른 리소스들을 제공한다. 일부 구현예에서, 동작 프레임 워크(448)는 소프트웨어 설치, 사용자 계정, 보안 및 인증 등을 관리한다. 일부 구현예에서, 동작 프레임 워크(448)는 이벤트 핸들러를 포함한다. 일부 구현예에서, 동작 프레임 워크(448)는 이벤트 모니터를 포함한다. 일부 구현예에서, 동작 프레임 워크(448)는 이벤트 핸들러를 포함하며, 여기서 이벤트 핸들러는 이벤트 모니터를 포함한다.
디바이스 인터페이스(422) 또는 센서(426)가 물리적 이벤트를 경험하거나 검출할 때, 이벤트를 나타내는 데이터는 대응하는 커널 레벨 드라이버(442)로 전달된다. 이 데이터는 커널 레벨 드라이버(442), HAL(444), 런타임 계층(446) 및 동작 프레임 워크(448)를 통해 소프트웨어 애플리케이션(430)으로 흐른다. 일부 구현예에서, 커널 레벨 드라이버(442)는 하나의 포맷 또는 데이터 프리젠테이션을 사용하여 이벤트 데이터를 나타내고, HAL(44)은 이들을 좀 더 일반화된 입력 타입 또는 센서 타입의 값으로 변환한다. 예를 들어, 입력은 전압 레벨일 수 있고, 커널 레벨 드라이버(442)는 전압 레벨을 센서 특정 값으로서 보고할 수 있다. HAL(444)은 센서-특정 값을 수신하여 보다 일반화된 센서-타입 값으로 변환할 수 있다. 동작 프레임 워크(448)는 소프트웨어 애플리케이션(470)에 대한 이 값들의 교환을 용이하게 한다. 일부 구현예에서, 프리뷰 세션 동안, 소프트웨어 애플리케이션(430)은 그러한 모든 입력을 프리젠테이션 객체(470)로 전환(divert)시킨다. 이어서, 프리젠테이션 객체(470)는 검출된 물리적 이벤트의 디스크립션(436)을 원격 호스트 서버(즉, 프리뷰 호스트 서버(170))로 전송할 수 있다.
일부 구현예에서, 애플리케이션 스택(440)은 메시지(468)를 프리뷰 호스트 서버(170)와 교환하기 위한 메시징 서비스(460)를 포함한다. 이러한 구현예에서, 프리뷰 호스트 서버(170)의 시뮬레이션 환경에서 실행하는 게스트(guest) 애플리케이션은 메시징 서비스(460)에 의해 수신되어 처리된 메시지(468)를 예시적인 클라이언트 디바이스로 전송할 수 있다. 예를 들어, 일부 구현예에서, 프리뷰 호스트 서버(170)는 게스트 애플리케이션에게 예시적인 클라이언트 디바이스(420)를 액세스하기 위한 인터페이스(예컨대, API)를 제공한다. 인터페이스로의 메시지는 상기 메시징 서비스(460)가 해당 메시지를 처리할 수 있는 예시적인 클라이언트 디바이스(420)로 전송되고, 필요에 따라 응답 메시지(468)를 전송한다. 일부 구현예에서, 예시적인 클라이언트 디바이스(420) 상에 존재하는 메시징 서비스(460)는 서버 생성(server-generated) 메시지들(468)에 응답하여 운영 프레임 워크(448) 및 런타임 계층(446)과 직접 상호 작용하여, 미디어 스트림(434)를 제시하는 소프트웨어 애플리케이션(430)을 거치지 않고 게스트 애플리케이션으로부터 예시적인 클라이언트 디바이스(420)와의 직접 통신을 용이하게 한다.
일부 구현예에서, (메시징 서비스(460), 메시징 서비스(460)로 인터페이스를 제공하는 애플리케이션 또는 메시징 서비스(460)를 통합하는 애플리케이션과 같은) 컨트롤러 애플리케이션은 예시적인 클라이언트 디바이스(420) 및 게스트 애플리케이션이 프리뷰 호스트 서버(170)에서 실행되는 시뮬레이션 환경(예컨대, 가상 머신 또는 에뮬레이터) 모두에서 실행된다. 시뮬레이션 환경에서 컨트롤러 애플리케이션에 대한 쿼리, 예를 들어 게스트 애플리케이션으로부터의 쿼리는 컨트롤러 애플리케이션의 예시적인 클라이언트 디바이스(420) 인스턴스로 포워딩되며, 여기서 쿼리는 클라이언트 환경에서 처리될 수 있고, 그 반대도 가능하다. 일부 구현에서 애플리케이션은 메시징 서비스가 이용 가능다고 결정하고, 애플리케이션이 데모 모드로 실행되고 있음을 알린다.
메시징 서비스(460)의 구현을 위한 예시적인 헤더는 다음과 같다 :
service StreamingService
{
void setOnMessageListener(IMessageListener);
void sendMessage(Message);
}
일부 구현예에서, 클라이언트 디바이스로 전송된 메시지는 클라이언트 디바이스 액세스를 위한 액세스 요청이다. 일부 구현예에서, 클라이언트 디바이스로 전송된 메시지는 클라이언트 디바이스상의 시스템 구성 데이터에 액세스하기 위한 액세스 요청이다. 일부 구현예에서, 클라이언트 디바이스로 전송된 메시지는 클라이언트 디바이스의 오디오 센서에 대한 액세스 요청이다. 일부 구현예에서, 클라이언트 디바이스로 전송된 메시지는 클라이언트 디바이스의 이미지 센서에 대한 액세스 요청이다. 일부 구현예에서, 클라이언트 디바이스로 전송된 메시지는 클라이언트 디바이스의 생체 센서에 대한 액세스 요청이다. 일부 구현예에서, 클라이언트 디바이스로 전송된 메시지는 클라이언트 디바이스의 발광 다이오드에 액세스하기 위한 액세스 요청이다. 일부 구현예에서, 클라이언트 디바이스로 전송된 메시지는 클라이언트 디바이스상의 시청 제한 설정(parental control setting)에 대한 액세스 요청이다. 일부 구현예에서, 클라이언트 디바이스로 전송된 메시지는 클라이언트 디바이스의 파일 시스템에 대한 액세스 요청이다. 일부 구현예에서, 클라이언트 디바이스로 전송된 메시지는 클라이언트 디바이스의 기능에 액세스하기 위한 액세스 요청이다.
소프트웨어 애플리케이션(430)은 애플리케이션 스택(440)의 상부에서 실행되는 별개의 소프트웨어 패키지로서 도 4에 도시되어 있다. 일부 구현예에서, 소프트웨어 애플리케이션(430)은 예를 들어, 운영 프레임 워크(448)의 일부로서 애플리케이션 스택(440)에 통합될 수 있다. 소프트웨어 애플리케이션(430)은 예시적인 클라이언트 디바이스(420)와 함께 패키징되거나, 예를 들어 제3자 애플리케이션과 같이 개별적으로 설치될 수 있다. 소프트웨어 애플리케이션(430)은 게임, 유틸리티, 툴, 또는 예시적인 클라이언트 디바이스(420)가 실행할 수 있는 임의의 다른 소프트웨어일 수 있다.
일부 구현예에서, 소프트웨어 애플리케이션(430)은 원격 호스트 서버, 예를 들어 프리뷰 호스트 서버(170)로부터의 콘텐츠를 제시하기 위한 프리젠테이션 객체(470)를 포함한다. 일부 구현예에서, 소프트웨어 애플리케이션(430)은 예를 들어, 운영 프레임 워크(448)의 일부로서 애플리케이션 스택(440)에 의해 제공되는 프리젠테이션 객체(470)에 링크한다. 프리젠테이션 객체(470)는 네트워크(110)를 통해 프리뷰 호스트 서버(170)로부터 미디어 스트림(434)을 수신하고 물리적 이벤트의 디스크립션(436)을 프리뷰 호스트 서버(170)로 전송함으로써 인터렉티브 프리뷰 세션을 용이하게 한다. 프리젠테이션 객체(470)는 애플리케이션 스택(440)을 통해 커널 레벨 드라이버(442)로부터 데이터를 수신하여, 수신된 데이터를 인터렉션 이벤트의 디스크립션으로 패키징한다. 이어서, 프리젠테이션 객체(470)는 디스크립션(436)을 네트워크(110)를 통해 프리뷰 호스트 서버(170)로 전송한다. 예를 들어, 일부 구현에서, 프리젠테이션 객체(470)는 예를 들어 프리뷰 호스트 서버(170)의 호스트 환경 내의 제2 애플리케이션에 대한 입력으로서 인터렉션을 재생성하기에 충분한 정보를 제공하는 검출된 인터렉션의 디스트립션(436)을 프리뷰 호스트 서버(170)로 전송한다. 일부 구현예에서, 예시적인 클라이언트 디바이스(420)는 예시적인 클라이언트 디바이스(420)의 디바이스 인터페이스(422) 및 센서(426)로부터의 신호를 캡쳐, 후크 또는 인터셉트하고, 프리젠테이션 객체(470)는 캡처된, 후킹된 또는 인터셉트된 신호에 대한 값들(raw values)을 (물리적 이벤트의 디스크립션(436)으로서) 프리뷰 호스트 서버(170)로 전송한다. 일부 구현예에서, 프리뷰 호스트 서버(170)로 전송된 정보는 데이터 구조로 패키징된다. 예를 들어, 프리젠테이션 객체(470)는 데이터 구조에 추가적인 컨텍스트 정보, 예를 들어, 인터렉션이 검출된 때를 나타내는 시간 값을 포함할 수 있다. 일부 구현예에서, 프리젠테이션 객체(470)는 인터렉션 디스크립션(또는 인터렉션 디스크립션을 포함하는 데이터 구조)을 압축하여 압축된 정보를 호스트 서버로 전송함으로써 호스트 서버로 인터렉션 디스크립션(436)을 전송한다.
도 5는 예시적인 인터렉티브 프리뷰 세션 동안 호스트 서버(570)상의 데이터 흐름의 예를 나타내는 도면(500)이다. 도 5의 설명에서, 클라이언트 디바이스(120)의 시뮬레이션은 가상화의 관점에서 도시되는데 이는 제한하려는 것이 아니며, 일부 구현예에서 에뮬레이션과 같은 다른 시뮬레이션 방법이 사용된다. 도면(500)에서, 예시적인 호스트 서버(570)(예컨대, 프리뷰 호스트 서버(170))는, 예를 들어 도 3을 참조하여 상술한 바와 같이, 프리뷰 세션에서 클라이언트 디바이스(120)로 제공되는 호스팅된 애플리케이션을 실행한다. 일부 구현예에서, 호스트 서버(570)는 클라이언트 시뮬레이션 서버이다. 호스트 애플리케이션(530)은 가상화 컨트롤러(580)에 의해 호스팅된 클라이언트 디바이스(120)의 가상화(virtualized) 버전인 가상 클라이언트 디바이스 인스턴스(520)상에서 실행한다. 가상화 컨트롤러(580)는 가상 클라이언트 디바이스 인스턴스(520)에 대한 미디어 출력 디바이스(예컨대, 디스플레이 스크린, 스피커, 햅틱 피드백 등)를 시뮬레이션하고, 가상 클라이언트 디바이스 인스턴스(520)로부터의 미디어 출력의 미디어 스트림(434)을 네트워크(110)를 통해 클라이언트 디바이스(120)로 전송하는 가상 클라이언트 인터페이스(540)를 포함한다. 가상 클라이언트 인터페이스(540)는 클라이언트 디바이스(120)에 의해 검출된 물리적 이벤트의 디스크립션(436)을 클라이언트 디바이스(120)로부터 수신한다. 이어서, 가상 클라이언트 인터페이스(540)는 수신된 이벤트 디스트립션을 가상화 컨트롤러(580)가 가상 클라이언트 디바이스 인스턴스(520)에 대한 이벤트를 시뮬레이션하기 위해 사용하는 입력 데이터로 변환한다. 일부 구현예에서, 가상화 컨트롤러(580)는 호스트 서버(570)의 저 레벨 리소스 할당을 처리하는 호스트 플랫폼(577)상에서 실행된다. 일부 구현예에서, 호스트 서버(570)는, 예를 들어, 데이터 관리기(150)에 의해 저장된 디바이스 이미지를 사용하여 다수 타입의 디바이스를 가상화한다. 일부 구현예에서, 가상 클라이언트 디바이스 인스턴스(520)는 클라이언트 디바이스(120)와 메시지(468)를 교환하기 위한 메시징 서비스(560)를 호스팅된 애플리케이션(530)에 제공한다. 일부 구현예에서, 메시징 서비스(560)는 프로세스간 요청 및/또는 가상 클라이언트 디바이스 인스턴스(520)의 애플리케이션 스택에 대한 요청과 같은, 호스팅된 애플리케이션(530)으로부터의 메시지를 인터셉트하여, 인터셉트된 메시지를 클라이언트 디바이스(120)의 대응하는 메시징 서비스로 전송한다. 도시된 예시적인 아키텍처 및 데이터 흐름은 제한하려는 것이 아니며, 대안적인 구현에서 상이한 아키텍처가 사용될 수 있다
예시적인 호스트 서버(570)(예컨대, 프리뷰 호스트 서버(170))는 가상 클라이언트 디바이스 인스턴스(520)를 호스팅하는 컴퓨팅 디바이스이다. 일부 구현예에서, 예시적인 호스트 서버(570)는 하이퍼바이저 아키텍처를 사용하여 가상 클라이언트 디바이스 인스턴스(520)를 호스팅한다. 일부 구현예에서, 예시적인 호스트 서버(570)는 에뮬레이션 소프트웨어를 사용하여 가상 클라이언트 디바이스 인스턴스(520)를 호스팅한다. 일부 구현예에서, 예시적인 호스트 서버(570)는(도 4에 도시된) 애플리케이션 스택(440)을 시뮬레이션하여 호스팅된 애플리케이션(530)에 대한 실행 컨텍스트를 제공하고, 여기서 실행 컨텍스트는 가상 클라이언트 디바이스인스턴스(520)를 대체한다. 아래에서 보다 상세하게 설명되는 도 10은 일부 구성에서 예시적인 호스트 서버(570)로 사용하기에 적합한 컴퓨팅 디바이스를 도시한다.
일부 구현예에서, 호스트 서버(570)는 호스트 플랫폼(577)을 실행하여 가상 클라이언트 디바이스 인스턴스(520)를 호스팅하는 것을 관리한다. 호스트 플랫폼(577)은 예를 들어 가상화 컨트롤러(580)를 로딩하고, 메모리 및 컴퓨팅 프로세서로의 액세스를 제공하는 등의, 호스트 서버(570)상의 저 레벨 리소스 할당을 처리한다. 일부 구현예에서, 호스트 서버(570)는 예를 들어 데이터 관리기(150)에 의해 저장된 디바이스 이미지를 사용하여 다수의 유형의 디바이스를 가상화하거나 에뮬레이션한다. 호스트 플랫폼(577)은 데이터 관리기(150)로부터의 디바이스 이미지를 검색하는데 필요한 저 레벨 작업들을 처리한다.
일부 구현예에서, 호스팅된 애플리케이션(530)은 대응하는 클라이언트 디바이스(120)와의 인터렉션 없이 가상 클라이언트 디바이스 인스턴스(520)상에서 실행된다. 예를 들어, 호스팅된 애플리케이션(530)은 큐 포인트까지 로딩되고 실행될 수 있으며, 그 후 애플리케이션의 실행은 일시 중단되고 애플리케이션의 상태(예컨대, 메모리 및 실행 스택)가 캡처되어 예를 들어 데이터 관리기(150)에 기록된다. 일부 구현예에서, 큐 포인트는 도 8을 참조하여 이하에서 설명되는 방법(800)의 구현을 사용하여 식별된다. 다목적 기능을 위해, 동일한 호스팅된 애플리케이션(530)은 예를 들어, 상이한 화면 크기, 상이한 프로세서 속도 및/또는 상이한 메모리 할당과 같은 상이한 속성을 갖는 다양한 가상화 디바이스상에서 실행될 수 있다. 호스팅된 애플리케이션(530)의 그러한 각각의 인스턴스는 큐 포인트까지 실행될 수 있고, 일시 중지된 호스팅된 애플리케이션을 갖는 대응하는 가상화된 디바이스의 이미지는, 예를 들어 데이터 관리기(150)에 의해 저장될 수 있다. 클라이언트 디바이스(120)로 프리뷰 세션을 제공할 때, 호스트 플랫폼(577)은 클라이언트 디바이스(120)의 특징들과 거의 매칭하는 가상화된 디바이스의 이미지를 검색하고 일시 중지된 호스팅된 애플리케이션을 재개한다. 이러한 구현의 예는 아래에서 보다 상세히 설명된다.
호스트 서버(570)(예컨대, 프리뷰 호스트 서버(170))는 클라이언트 디바이스(120)의 가상화된(또는 에뮬레이트된) 인스턴스를 호스팅하는 가상화 컨트롤러(580)를 포함한다. 일부 구현예에서, 가상화 컨트롤러(580)는 클라이언트 디바이스(120)를 위한 가상 머신 호스트(예컨대, 하드웨어 하이퍼바이저, 소프트웨어 가상 머신 호스트, 또는 임의의 다른 형태의 가상 머신 호스트)이고, 가상 클라이언트 디바이스 인스턴스(520)를 클라이언트 디바이스(120)의 가상화된 인스턴스로서 호스팅한다. 일부 구현예에서, 가상화 컨트롤러(580)는 클라이언트 디바이스(120)에 대한 소프트웨어 에뮬레이터이고 상기 가상 클라이언트 디바이스 인스턴스(520)를 클라이언트 디바이스(120)의 에뮬레이트된 인스턴스로서 호스팅한다. 일부 구현예에서, 예시적인 호스트 서버(570)는(도 4에 도시된) 애플리케이션 스택(440)을 시뮬레이션하여 상기 호스팅된 애플리케이션(530)에 대한 실행 컨텍스트를 제공하며, 여기서 실행 컨텍스트는 가상 클라이언트 디바이스인스턴스(520)를 대신한다. 예를 들어, 일부 구현예에서, 가상화 컨트롤러(580)는 도 4에 도시된 HAL(444)에 대응하는 가상화된 하드웨어 추상화 계층(HAL)의 인스턴스를 제공하고, 호스팅된 애플리케이션(530)은 가상화된 HAL의 상부에 있는 애플리케이션 스택상의 호스트 서버(570)에 의해 실행된다.
가상화 컨트롤러(580)는 가상 클라이언트 디바이스 인스턴스(520)에 대한 미디어 출력 디바이스(예컨대, 디스플레이 스크린, 스피커, 햅틱 피드백 등)를 시뮬레이션한다. 예를 들어,일부 구현예에서, 가상화 컨트롤러(580)는 그래픽 출력 디바이스로서 가상 클라이언트 디바이스 인스턴스(520)에 나타나는 그래픽 드라이버를 제공할 수 있지만, 실제로 그래픽 명령을 그래픽 버퍼(예컨대, 링 버퍼)에 바로 기록한다. 이어서, 이 버퍼는 클라이언트 디바이스(120)로 전송될 수 있다. 일부 구현예에서, 가상화 컨트롤러(580)는 예를 들어 그래픽 버퍼를 사용하여 네트워크(110)을 통해 상기 가상 클라이언트 디바이스 인스턴스(520)로부터의 미디어 출력의 미디어 스트림(434)을 클라이언트 디바이스(120)로 전송하는 가상 클라이언트 인터페이스(540)를 포함한다. 가상 클라이언트 인터페이스(540)는 클라이언트 디바이스(120)로부터 상기 클라이언트 디바이스(120)에 의해 검출된 물리적 이벤트의 디스크립션(436)을 수신한다. 가상 클라이언트 인터페이스(540)는 수신된 이벤트 디스크립션을 가상화 컨트롤러(580)가 가상 클라이언트 디바이스 인스턴스(520)에 대한 이벤트를 시뮬레이션하기 위해 사용하는 입력 데이터로 변환한다. 예를 들어, 일부 구현예에서, 가상 클라이언트 인터페이스(540)는 입력 디바이스로서 가상 클라이언트 디바이스 인스턴스(520)에 나타나는 디바이스 드라이버를 포함하고, 가상 클라이언트 인터페이스(540)는 클라이언트 디바이스(120)로부터 수신된 물리적 이벤트의 디스크립션(436)에 기초하여 입력 디바이스를 시뮬레이션한다.
일부 구현예에서, 가상 클라이언트 디바이스 인스턴스(520)는 클라이언트 디바이스(120)와 메시지(468)를 교환하기 위한 메시징 서비스(560)를 호스팅한다. 일부 구현예에서, 메시징 서비스(560)는 프로세스간 요청 및/또는 가상 클라이언트 디바이스(520)의 애플리케이션 스택에 대한 요청과 같은 호스팅된 애플리케이션(530)으로부터의 메시지를 인터셉트하여 상기 인터셉트된 메시지를 클라이언트상의 대응하는 메시징 서비스로 전송한다. 일부 구현예에서, 메시징 서비스(560)는 클라이언트 디바이스(120)로부터 메시지를 수신하여 수신된 메시지를 호스팅된 애플리케이션(530)에 제공한다. 일부 구현예에서, 메시징 서비스(560)는 가상화 컨트롤러(580)에 의해 제공된다.
호스팅된 애플리케이션(530)은 가상 클라이언트 디바이스 인스턴스(520)상에서 실행되는 소프트웨어 애플리케이션이다. 일부 구현예에서, 호스팅된 애플리케이션(530)은 어떠한 변경없이 클라이언트 디바이스(120) 상에 설치될 수 있는 애플리케이션이다. 일부 구현예에서, 호스팅된 애플리케이션(530)은 가상 클라이언트 디바이스 인스턴스(520) 상에 또는 실제 클라이언트 디바이스(120) 상에 설치되는지 여부에 기초하여 실행 행동(behavior)를 변경한다. 예를 들어, 일부 실시예에서, 메시징 서비스(560)의 존재를 검출하는 것에 응답하여, 호스팅된 애플리케이션(530)은 메시징 서비스(560)를 사용하기 위한 실행 행동을 변경한다. 일부 구현예에서, 호스팅된 애플리케이션(530)은 호스트 서버(570)에서 가상 클라이언트 디바이스 인스턴스(520)상에서 실행하는 동안 클라이언트 디바이스(120)에서 로컬로 실행하는 것처럼 클라이언트 디바이스(120)에 제시된다.
도 6은 클라이언트 디바이스(120)에서 프리뷰 세션을 제공하는 방법(600)의 예시적인 구현에 대한 흐름도이다. 방법(600)의 전반적인 개요에서, 단계(610)에서, 클라이언트 디바이스(120)는 실행 환경에서 애플리케이션을 실행한다. 단계 (620)에서, 클라이언트 디바이스(120)는 다른 애플리케이션에 대한 프리뷰 세션을 개시한다. 일부 구현에서, 프리뷰 세션은 애플리케이션과 동일한 실행 환경 내에서 제공된다. 단계 630에서, 클라이언트 디바이스(120)는 실행 환경 내에서, 원격 호스트 서버(570)로부터 수신된 미디어 스트림(434)을 제시한다. 일부 구현예에서, 원격 호스트 서버(570) 및 클라이언트 디바이스(120)는 사이드 밴드 통신(즉, 미디어 스트림(434)을 전송하는데 사용되는 채널 외부의 통신 및 클라이언트 디바이스(120)에 의해 검출된 물리적 이벤트의 디스크립션(436)을 위한 메시지를 교환하기 위한 사이드 채널을 수립한다. 이러한 구현에서, 단계 640에서, 클라이언트 디바이스(120)는 원격 호스트 서버(570)로부터 사이드 밴드 메시지를 수신하고, 단계 645에서, 클라이언트 디바이스(120)는 원격 호스트 서버(570)로 응답을 보낸다. 단계 650에서, 클라이언트 디바이스(120)는 인터렉션 이벤트를 검출하고, 단계 655에서, 클라이언트 디바이스(120)는 검출된 인터렉션 이벤트의 디스크립션(436)을 원격 호스트 서버(570)로 전송한다. 단계(660)에서, 만약 미디어 스트림이 종료되지 않은 경우, 방법(600)은 단계(630)로 복귀하여 프리젠테이션을 계속한다. 그렇지 않으면, 단계(660)에서 미디어 스트림이 종료된 경우, 단계(670)에서 클라이언트 디바이스(120)는 실행 제어를 제1 애플리케이션으로 반송한다. 즉, 프리뷰 세션이 종료된다.
보다 상세하게 도 6을 참조하면, 단계 610에서, 클라이언트 디바이스(120)는 실행 환경에서 애플리케이션을 실행한다. 예를 들어, 도 4를 참조하면, 일부 구현예에서, 클라이언트 디바이스(예컨대, 도 1의 클라이언트 디바이스(120) 또는 도 4의 클라이언트 디바이스(420))는 애플리케이션 스택(440)에서 소프트웨어 애플리케이션(430)을 실행한다. 일부 구현에서, 애플리케이션은 클라이언트 디바이스에 설치된 제3자 애플리케이션이다. 일부 구현예에서, 애플리케이션은 클라이언트 디바이스에 기본적으로 제공되는 소프트웨어 컴포넌트에 포함된다. 단계(610)에서, 애플리케이션은 클라이언트 디바이스(120) 상에서, 예를 들어 사용자로부터의 애플리케이션 시작(launch) 요청에 응답하여 실행된다. 애플리케이션은 클라이언트 디바이스에서 실행되고 프리뷰 세션이 제공될 실행 지점(execution point)에 도달한다. 일부 구현에서는 애플리케이션이 프리뷰 세션을 요청한다. 일부 구현예에서, 애플리케이션은 콘텐츠를 제시하고, 콘텐츠는 프리뷰 세션에 대한 요청을 트리거하는 요소를 포함한다. 예를 들어, 일부 구현예에서, 애플리케이션은 웹 페이지, 전자 문서, 비디오 또는 멀티미디어 프레젠테이션, 게임 등과 같은 네트워크를 통해 수신된 콘텐츠를 제시한다. 일부 구현예에서, 프리뷰 세션이 제공될 때, 애플리케이션은 프리젠테이션 모드로 스위칭하거나 프리젠테이션 객체(470)를 시작한다.
단계(620)에서, 클라이언트 디바이스(120)는 다른 애플리케이션에 대한 프리뷰 세션을 개시한다. 일부 구현예에서, 프리뷰 세션을 개시하는 것은 프리뷰 세션에 대한 콘텐츠를 식별하기 위해 프리뷰 분배 서버(140)로 요청을 전송하는 것을 포함한다. 일부 구현예에서, 프리뷰 세션은 콘텐츠를 제공하도록 프리뷰 호스트 서버(170)로 요청하는 것으로 시작한다. 일부 구현예에서, 요청은 제공될 콘텐츠를 식별한다. 클라이언트 디바이스(120)는 요청된 콘텐츠를 제시하기 위해 준비한다. 예를 들어, 일부 구현예에서, 프리뷰 세션이 제공될 때, 애플리케이션은 프리젠테이션 모드로 스위칭하거나 프리젠테이션 객체(470)를 시작한다. 일부 구현예에서, 클라이언트 디바이스(120)는 메시징 서비스(460)를 인스턴스화한다. 예를 들어, 일부 구현예에서, 클라이언트 디바이스(120)는 소정 포트 번호로 착신 메시지를 청취하는 서비스를 시작하고, 애플리케이션(430)이 메시징 서비스를 통해 메시지를 송신 및 검색하는데 사용할 수 있는 애플리케이션 인터페이스를 제공한다. 일부 구현예에서, 클라이언트 디바이스(120)는 프리뷰 세션을 개시하기 위해 프리뷰 호스트 서버(170)로부터 개시(initiation) 데이터를 수신한다. 예를 들어, 일부 구현예에서, 클라이언트 디바이스(120)는 프리뷰 세션에 대한 세션 식별자를 수신한다.
단계(630)에서, 클라이언트 디바이스(120)는 실행 환경 내에서, 원격 호스트 서버(570)로부터 수신된 미디어 스트림(434)을 제시한다. 일부 구현예에서, 미디어 스트림(434)은 비디오 이미지 데이터를 포함한다. 일부 구현예에서, 미디어 스트림(434)은 오디오 데이터를 포함한다. 일부 구현예에서, 미디어 스트림(434)은 햅틱 피드백 데이터를 포함한다. 일부 구현예에서, 미디어 스트림(434)은 MPEG-4, MPEG-DASH(HyperText Transport Protocol)를 통한 MPEG 동적 적응형 스트리밍 또는 MPEG 전송 스트림(MPEG TS)과 같은 MPEG(Moving Picture Experts Group) 표준에 따라 포맷되거나 인코딩된다. 일부 구현예에서, 미디어 스트림(434)은 다른 표준에 따라 포맷되거나 인코딩된다. 일부 구현예에서, 미디어 스트림(434)은 커스텀 포맷팅 또는 인코딩 방식에 따라 포맷되거나 인코딩된다.
일부 구현예에서, 원격 호스트 서버(570) 및 클라이언트 디바이스(120)는 사이드-밴드 통신(즉, 미디어 스트림(434) 및 클라이언트 디바이스(120)에 의해 검출된 물리적 이벤트의 디스크립션(436)을 전송하는데 사용되는 채널 외부의 통신)을 위한 메시지(468)를 교환하기 위한 사이드 채널을 수립한다. 이러한 구현예에서, 단계(640에서), 클라이언트 디바이스(120)는 원격 호스트 서버(570)로부터 사이드-밴드 메시지를 수신한다.
일부 구현예에서, 단계(640)에서 클라이언트 디바이스(120)로 전송된 메시지는 클라이언트 디바이스 액세스에 대한 액세스 요청이다. 일부 구현예에서, 단계(640)에서 클라이언트 디바이스(120)로 전송된 메시지는 클라이언트 디바이스의 시스템 구성 데이터에 액세스하기 위한 액세스 요청이다. 일부 구현예에서, 단계(640)에서 클라이언트 디바이스(120)로 전송된 메시지는 클라이언트 디바이스의 오디오 센서에 액세스하기 위한 액세스 요청이다. 일부 구현예에서, 단계(640)에서 클라이언트 디바이스(120)로 전송된 메시지는 클라이언트 디바이스상의 이미지 센서에 액세스하기 위한 액세스 요청이다. 일부 구현예에서, 단계(640)에서 클라이언트 디바이스(120)로 전송된 메시지는 클라이언트 디바이스의 생체 센서에 액세스하기 위한 액세스 요청이다. 일부 구현예에서, 단계(640)에서 클라이언트 디바이스(120)로 전송된 메시지는 클라이언트 디바이스의 발광 다이오드에 액세스하기 위한 액세스 요청이다. 일부 구현예에서, 단계(640)에서 클라이언트 디바이스(120)로 전송된 메시지는 클라이언트 디바이스상의 시청 제한 설정에 액세스하기 위한 액세스 요청이다. 일부 구현예에서, 단계(640)에서 클라이언트 디바이스(120)로 전송된 메시지는 클라이언트 디바이스의 파일 시스템에 액세스하기 위한 액세스 요청이다. 일부 구현예에서, 단계(640)에서 클라이언트 디바이스(120)로 전송된 메시지는 클라이언트 디바이스의 특징들(feature)에 액세스하기 위한 액세스 요청이다.
단계(645)에서, 클라이언트 디바이스(120)는 단계(640)에서 전송된 메시지에 대한 응답을 원격 호스트 서버(570)로 전송한다. 일부 구현예에서, 응답은 메시지에서 요청된 정보를 포함한다. 일부 구현예에서, 단계(645)에서 전송된 응답은 스크림 또는 일련의 메시지 메시지이다. 예를 들어, 일부 구현예에서, 요청은 클라이언트 디바이스 센서, 예를 들어, 마이크로폰, 이미지 센서, 카메라 등)에 액세스하기 위한 요청일 수 있으며, 단계(645)에서의 응답은 클라이언트 디바이스 센서로부터의 데이터를 갖는 일련의 데이터 메시지이다. 일부 구현예에서, 호스팅된 애플리케이션은 이들 사이드-밴드 메시지들로부터 수신된 데이터를 사용하여 미디어 스트림을 생성한다. 예를 들어, 애플리케이션은 클라이언트 디바이스의 카메라에서 찍은 사진을 편집할 수 있는 이미지 편집기일 수 있다.
일부 구현예에서, 단계(640)에서의 액세스 요청은 클라이언트 디바이로 하여역여금 사용자로부터 추가 인증(authorization)을 얻도록 한다. 예를 들어, 일부 구현예에서, 클라이언트 디바이스(120)는 단계(645)에서 인증 스크린을 디스플레이하고, 인증을 처리하고, 처리된 인증에 응답하여 호스트 서버로 액세스 허용(granted) 지시자를 제공한다. 인증 스크린은 액세스 요청을 인증하기 위해 사용자 입력을 요구(solicit)한다. 일부 구현예에서, 인증 스크린은 사용자가 인증을 제공하도록 선택할 수 있는 소프트 버튼을 포함한다. 일부 구현예에서, 인증을 완료하기 위해서는 핀 번호 또는 생체인식 스크린(예컨대, 엄지 손가락 인쇄 또는 홍채 스캔)과 같은 보안 키가 필요하다. 클라이언트 디바이스(120)는 요청이 인가되는지 결정하기 위해 사용자 입력을 처리한다. 일부 구현예에서, 단계(610)에서 실행된 애플리케이션(호스트 애플리케이션)이 인가되면, 프리뷰 세션에 제시된 원격 애플리케이션은 자동으로 허용된 동일한 권한(authorization)을 부여받는다. 일부 구현에서, 호스트 애플리케이션이 인가되더라도 원격 애플리케이션에 자동으로 허용된 권한이 부여되는 것은 아니다. 예를 들어, 호스트 애플리케이션은 클라이언트 디바이스에 내장된 이미지 센서 또는 카메라 디바이스를 액세스하기 위한 권한을 가질 수 있다. 일부 구현에서 이 권한은 원격 애플리케이션으로 전송되며, 일부 구현에서는 이 권한이 원격 애플리케이션으로 전송되지 않는다. 따라서, 일부 구현예에서, 원격 애플리케이션은 호스트 애플리케이션과 별도로 인증을 획득해야 한다. 원격 애플리케이션은 단계(640)에서 클라이언트 디바이스에 의해 수신된 사이드-밴드 메시지를 사용하여 그렇게 할 수 있다
일부 구현예에서, 단계(640)에서의 액세스 요청은 구성 데이터, 사용자 설정, 애플리케이션 스토어 또는 관리 사용자 액세스 제한을 관리하는 클라이언트 디바이스(120) 상의 일부 다른 특징에 액세스하기 위한 요청이다. 액세스 요청은 예를 들어 보호자 설정 또는 연령 제한 등으로 인해 사용자가 특정 콘텐츠를 수신하는 것이 금지되는지를 결정하는데 사용될 수 있다.
단계(650)에서 클라이언트 디바이스(120)는 인터렉션 이벤트를 검출하고, 단계(655)에서 클라이언트 디바이스(120)는 상기 검출된 인터렉션 이벤트의 디스크립션(436)을 원격 호스트 서버(570)로 전송한다. 일부 구현예에서, 클라이언트 디바이스(120)상의 이벤트 핸들러는 인터렉션 이벤트를 검출한다. 클라이언트 디바이스(120)가 단계(630)에서 수신된 미디어 스트림을 제시하는 동안, 클라이언트 디바이스 상의 이벤트 핸들러는 인터렉션 이벤트, 예를 들어 클라이언트 디바이스(120)와 상호 작용하려는 사용자 시도를 검출한다. 일부 구현예에서, 인터렉션 이벤트는 스크린 탭(tap), 버튼 누름, 버튼 해제 또는 마우스 클릭과 같은 촉각 입력 이벤트이다. 일부 구현예에서, 인터렉션 이벤트는 클라이언트 디바이스(120)에 대한 구성의 변경, 예를 들어 디바이스 오디오 볼륨 설정의 증가, 감소 또는 뮤팅이다. 일부 구현예에서, 인터렉션 이벤트는 스크린 잠금 이벤트 또는 커버 클로즈(close) 이벤트이다. 일부 구현예에서, 인터렉션 이벤트는 클라이언트 디바이스(120)의 모션 센서에 의해 검출된 디바이스 이동 이벤트이다. 예를 들어, 클라이언트 디바이스(120)는 가속도계, 자이로스코프, 틸트 센서 또는 임의의 다른 유형의 모션 센서를 포함할 수 있다. 이벤트 핸들러는 입력 예를 들어 촉각 입력 또는 디바이스 이동을 검출하고 이것을 인터렉션 이벤트로서 처리한다. 일부 구현에서, 별도의 이벤트 모니터는 인터렉션 이벤트를 후크하거나 인터셉트한다. 일부 구현에서, 이벤트 핸들러는 이벤트 모니터를 포함한다.
단계(655)에서, 클라이언트 디바이스(120)는 검출된 인터렉션 이벤트의 디스크립션(436)을 원격 호스트 서버(570)로 전송한다. 일부 구현예에서, 클라이언트 디바이스(120)는 검출된 인터렉션을 나타내는 데이터를 송신한다. 일부 구현예에서, 클라이언트 디바이스(120)는 인터렉션의 특성을 나타내는 데이터를 포함하는 데이터 구조를 전송한다. 예를 들어, 인터렉션이 스크린 탭인 경우, 데이터 구조는 탭의 스크린 좌표, 탭의 시간 길이, 탭 동안 가해진 압력, 탭 형상(geometry)의 측정 등을 나타내는 필드를 포함할 수 있다. 일부 구현예에서, 클라이언트 디바이스(120)는 전송된 데이터에 내부 데이터 표현(representation)을 포함한다. 예를 들어, 디바이스 드라이버가 특정 포멧으로 인터렉션 이벤트를 보고하면, 클라이언트 디바이스(120)는 해당 특정 포멧으로 상기 보고를 원격 호스트 서버(570)로 전송한다. 클라이언트 디바이스(120)는 원격 호스트 서버(570)가 인터렉션 이벤트를 재생성할 수 있게 하는 방식으로, 상기 검출된 인터렉션 이벤트의 디스크립션(436)을 원격 호스트 서버(570)로 전송한다.
단계(660)에서, 미디어 스트림이 종료되지 않은 경우, 방법(600)은 단계(630)로 복귀하여 프리젠테이션을 계속한다. 프리뷰 세션은, 예를 들어 미리 정해진 시간이 경과하거나, 제2 애플리케이션이 종료하거나, 또는 예를 들어, 사용자가 이탈 버튼을 선택한 결과로서 클라이언트 디바이스가 조기 종료를 요청할 때 종료될 수 있다. 일부 구현예에서, 클라이언트 디바이스는 프리뷰 세션이 종료되었음을 나타내는 신호를 호스트 서버로부터 수신한다. 일부 구현예에서, 클라이언트 디바이스는 프리뷰 세션이 종료되었음을 나타내는 신호를 생성하여 호스트 서버로 전송한다
단계(660)에서 미디어 스트림이 종료된 경우, 단계(670)에서 클라이언트 디바이스(120)는 실행 제어를 제1 애플리케이션으로 반송한다. 즉, 프리뷰 세션이 종료된다. 일부 구현예에서, 프리뷰 세션을 위해 클라이언트 디바이스에 의해 예비된(reserved) 모든 메모리가 해제된다
도 7은 프리뷰 세션을 제공하는데 사용할?애플리케이션을 사전 큐잉하는 방법(700)의 예시적인 구현에 대한 흐름도이다. 방법(700)의 전반적인 개요에서, 단계(710)에서, 호스트 서버(570)는 클라이언트 디바이스 시뮬레이션 인스턴스를 시작(launch)하고, 단계(720)에서 클라이언트 디바이스 시뮬레이션 인스턴스에서 호스팅된 애플리케이션을 실행한다. 단계(730)에서, 호스트 서버(570)는 큐 포인트에서 상기 호스팅된 애플리케이션의 실행을 일시 중지(suspend)하고, 단계(740)에서 클라이언트 디바이스 시뮬레이션 인스턴스를 일시 중지시킨다. 일부 구현예에서, 큐 포인트는 도 8을 참조하여 아래에서 설명되는 방법(800)의 구현을 사용하여 식별된다. 그 다음, 단계(750)에서, 호스트 서버(570)는 호스팅된 애플리케이션의 프리뷰 세션을 클라이언트 디바이스로 제공하라는 요청을 수신한다. 단계(760)에서, 호스트 서버(570)는 중지된 클라이언트 디바이스 시뮬레이션 인스턴스가 클라이언트 디바이스에 대한 디바이스 프로파일에 부합되는(conform) 것으로 결정한다. 단계(770)에서 호스트 서버(570)는 중지된 클라이언트 디바이스 시뮬레이션 인스턴스를 다시 시작하고, 단계(780)에서 호스트 서버(570)는 큐 포인트(단계 730에서 이전에 일시 중단되었던 곳)로부터 상기 호스팅된 애플리케이션의 실행을 재개한다. 그 다음, 단계(790)에서, 호스트 서버(570)는 요청된 프리뷰 세션을(단계 750에서 수신된 요청에 응답하여) 클라이언트 디바이스(120)로 제공한다
보다 상세하게 도 7을 참조하면, 단계(710)에서, 호스트 서버(570)는 클라이언트 디바이스 시뮬레이션 인스턴스를 시작한다. 일부 구현예에서, 호스트 서버(570)는 클라이언트 디바이스(120)의 시뮬레이션된 버전을 실행한다. 예를 들어, 일부 구현예에서, 호스트 서버(570)는 클라이언트 디바이스(120)의 이미지로부터 가상 머신을 실행하는 하이퍼바이저이다. 가상 머신은 클라이언트 디바이스(120)의 가상화 버전, 즉 클라이언트 디바이스(120)의 시뮬레이션이다. 일부 구현예에서, 호스트 서버(570)는 에뮬레이트된 클라이언트 디바이스(120)를 클라이언트 디바이스의 시뮬레이션으로서 제공하는, 클라이언트 디바이스(120)에 대한 에뮬레이터를 실행한다. 일부 구현예에서, 호스트 서버(570)는 예를 들어 가상 머신 이미지로부터 데이터 관리기(150)에 의해 저장된 데이터로부터 디바이스 시뮬레이션 인스턴스를 시작한다.
단계(720)에서, 호스트 서버(570)는 클라이언트 디바이스 시뮬레이션 인스턴스에서 호스팅된 애플리케이션을 실행한다. 일부 구현예에서, 호스트 서버(570)는 데이터 관리기(150)에 의해 저장된 데이터로부터 상기 호스팅된 애플리케이션을 설치한다. 일부 구현예에서, 호스팅된 애플리케이션은 단계(710)에서 클라이언트 디바이스 시뮬레이션을 시작하는데 사용되는 머신 이미지에 설치된다. 단계(720)에서, 호스트 서버(570)는 호스팅된 애플리케이션을 실행하고 큐 포인트에 대한 실행을 모니터링한다.
단계(730)에서, 호스트 서버(570)는 큐 포인트에서 상기 호스팅된 애플리케이션의 실행을 일시 중지한다. 일부 구현예에서, 큐 포인트는 도 8을 참조하여 아래에서 설명되는 방법(800)의 구현을 사용하여 식별된다. 예를 들어, 애플리케이션은 애플리케이션이 사용자 인터렉션을 위해 준비될 때까지 실행될 수 있다. 아래에서 상술하는 바와 같이, 이것은 사용자 옵션이 호스팅된 애플리케이션에 의해 처음 제시될 때 감지될 수 있다. 일부 구현에서, 큐 포인트는 애플리케이션이 실행된 시간의 길이 또는 범위이다. 지정된 시간 범위 동안 애플리케이션을 실행한 후(단계 720에서), 단계(730)에서 호스트 서버(570)는 실행을 일시 중지한다. 일부 구현예에서, 호스트 서버(570)는 호스팅된 애플리케이션에 신호 또는 인터럽트를 전송함으로써, 예를 들어 애플리케이션이 일시 중지하도록 요청함으로써 상기 호스팅된 애플리케이션의 실행을 중지한다. 일부 구현에서, 호스팅된 애플리케이션은 사용자 입력을 기다리는, 큐 포인트에서 안정 상태(stable state)에 있다. 일부 구현예에서, 호스트 서버(570)는 생성된 레코드가 나중에 애플리케이션을 동일한 실행 상태로 복원하는데 사용될 수 있는, 큐 포인트에서 상기 호스팅된 애플리케이션에 대한 메모리 이용 및 실행 스택의 레코드를 생성한다. 일부 구현예에서, 단계(730)는 스킵되고, 호스트 서버(570)가 호스팅된 애플리케이션이 큐 포인트에 도달했다고 결정하면, 단계(740)로 진행하여 클라이언트 디바이스 시뮬레이션 인스턴스를 중지시킨다.
단계(740)에서, 호스트 서버(570)는 클라이언트 디바이스 시뮬레이션 인스턴스를 일시 중지한다. 일부 구현예에서, 호스트 서버(570)는 클라이언트 디바이스 시뮬레이션 인스턴스를 중지 상태(예컨대, 슬립 또는 하이버네이션(hibernation) 모드)로 두고 클라이언트 디바이스 시뮬레이션 인스턴스의 메모리 상태를 캡처한다. 일부 구현예에서, 메모리 상태를 캡쳐하는 것은 클라이언트 디바이스 시뮬레이션 인스턴스에 대한 캐시 및 시스템 메모리의 상태를 캡처하는 것을 포함한다. 캡쳐된 메모리는 예를 들어 프로세서 레지스터의 데이터, 명령 실행 스택의 데이터, 캐시로부터의 데이터 등을 포함할 수 있다. 일부 구현예에서, 호스트 서버(570)는 메모리 캡쳐 이전에 상기 클라이언트 디바이스 시뮬레이션 인스턴스를 안정 상태로 둔다. 그 후, 호스트 서버(570)는 캡처된 메모리 상태를, 예를 들어 데이터 관리기(150)를 사용하여 저장한다.
일부 구현예에서, 클라이언트 디바이스 시뮬레이션, 예를 들어 가상 클라이언트 디바이스 인스턴스(520)는 시동(start-up)시 스트리밍 세션을 연다. 클라이언트 디바이스 시뮬레이션은 시동시에 상기 호스팅된 애플리케이션(530)을 자동으로 실행하고 사전 결정된 시간 범위 동안 상기 호스팅된 애플리케이션(530)을 실행하도록 구성된다. 사전 결정된 시간 범위는 큐 포인트, 과거 프레젠테이션에서 측정된 전형적인 대기 시간(laytency), 측정된 전형적인 대기 시간의 오프셋, 구성된 시간 길이 또는 다른 시간 범위일 수 있다. 일부 구현예에서, 클라이언트 디바이스 시뮬레이션은 호스팅된 애플리케이션(530)으로부터의 그래픽 출력의 스크린 샷을 캡처하고 스크린 샷에 제시된 인터렉티브 요소들을 식별하기 위해 이미지 인식, 광학 문자 인식, 기계 학습 기법, 컴퓨터 비전, 패턴 인식 등을 사용한다. 일부 구현예에서, 호스트 서버(570)는 인터렉션 이벤트 데이터 내의 탭 좌표를 수집하고 가장 일반적으로 탭핑(tapping)되는 스크린 위치를 결정한다. 그 다음, 호스트 서버(570)는 식별된 인터렉티브 요소 또는 식별된 가장 일반적으로 탭핑된 위치에서 클라이언트 디바이스 시뮬레이션을 위한 탭을 시뮬레이션한다. 시뮬레이션된 탭(또는 클릭)은 호스팅된 애플리케이션(530)과의 시뮬레이션된 인터렉션이다. 그 후, 호스트 서버(570)는 클라이언트 디바이스 시뮬레이션의 실행을 중지하고, 예를 들어 데이터 관리기(150)에 미래 사용을 위해 상기 일시 중지된 시뮬레이션의 이미지를 저장한다.
단계(750)에서, 호스트 서버(570)는 호스팅된 애플리케이션의 프리뷰 세션을 클라이언트 디바이스로 제공하라는 요청을 수신한다. 단계(740)와 단계(750) 사이에 상당한 시간차(time gap)가 있을 수 있다. 일부 구현예에서, 호스트 서버(570)는 단계(710, 720, 730 및 740)를 여러 번 반복 수행하여, 예를 들어 각각이 스크린 크기, 칩 셋, 메모리 할당, 운영 체제, 가용 주변 디바이스 등과 같은 디바이스-특정 특성과 관련된 디바이스 프로파일을 가지는, 상이한 호스팅된 디바이스 및/또는 상이한 클라이언트 디바이스의 시뮬레이션에 대해 다수의 메모리 상태 캡처를 생성 및 저장한다. 단계(750)에서, 호스트 서버(570)는 호스팅된 애플리케이션의 프리뷰 세션을 클라이언트 디바이스로 제공하라는 요청을 수신한다. 일부 구현예에서, 수신된 요청은 프리뷰할 호스팅된 애플리케이션을 특정하거나 식별하는 정보를 포함한다. 일부 구현예에서, 수신된 요청은 클라이언트 디바이스의 하나 이상의 특성을 특정하거나 식별하는 정보를 포함한다. 몇몇 구현예에서, 호스트 서버(570)는 클라이언트 디바이스로부터 디바이스별 프로파일을 식별하는 정보를 수신한다.
단계(760)에서, 호스트 서버(570)는 중지된 클라이언트 디바이스 시뮬레이션 인스턴스가 클라이언트 디바이스에 대한 디바이스 프로파일에 부합되는 것으로 결정한다. 일부 구현예에서, 호스트 서버(570)는 상기 특정되거나 식별된 특성에 기초하여 디바이스 프로파일을 요청 클라이언트 디바이스에 할당한다. 디바이스 프로파일은 클라이언트 디바이스의 특징 및 속성을 기술한다. 호스트 서버(570)는 클라이언트 디바이스에 가장 잘 대응하는 프로파일을 클라이언트 디바이스에 할당한다. 일부 구현예에서, 호스트 서버(570)는 클라이언트 디바이스로부터 특정 디바이스 프로파일을 식별하는 정보를 수신한다. 단계(760)에서, 호스트 서버(570)는 요청 클라이언트 디바이스의 특성에 부합되는 일시 중지된 클라이언트 디바이스 시뮬레이션 인스턴스를 식별한다.
단계(770)에서, 호스트 서버(570)는 중지된 클라이언트 디바이스 시뮬레이션 인스턴스를 다시 시작한다. 즉, 단계(750)에서 중지된 클라이언트 디바이스 시뮬레이션 인스턴스가 요청 클라이언트 디바이스의 특성에 부합한다고 단계(760)에서 결정하면, 단계(770)에서 호스트 서버(570)는 중지된 클라이언트 디바이스 시뮬레이션 인스턴스를 다시 시작(또는 실행을 재개)한다. 일부 구현예에서, 호스트 서버(570)는 중지된 클라이언트 디바이스 시뮬레이션 인스턴스를 나타내는 데이터 관리기(150)로부터 데이터를 검색하여, 검색된 데이터로부터 중지된 클라이언트 디바이스 시뮬레이션 인스턴스를 다시 시작한다. 일부 구현예에서, 호스트 서버(570)는 중단된 클라이언트 디바이스 시뮬레이션 인스턴스의 실행을 슬립 또는 하이버네이션 상태로부터 재개한다.
단계(780)에서, 호스트 서버(570)는 단계(730)에서 이전에 중지되었던 큐 포인트로부터 상기 호스팅된 애플리케이션의 실행을 재개한다. 호스팅된 애플리케이션이 클라이언트 디바이스 시뮬레이션 인스턴스와 별도로 중지되는 구현예에서, 호스트 서버(570)는 중단된 호스팅된 애플리케이션을 복원한다. 호스팅된 애플리케이션은 단계(730)에서 큐 포인트에서 일시 중지되었으므로 단계(780)에서 큐 포인트로부터 재개될 수 있다. 호스팅된 애플리케이션은 효과적으로 큐 포인트에 사전 큐잉되어 단계(780)에서 재개를 위한 준비를 한다.
단계(790)에서, 호스트 서버(570)는 요청된 프리뷰 세션을(단계 750에서 수신된 요청에 응답하여) 클라이언트 디바이스(120)로 제공한다. 사전 큐잉된 호스팅된 애플리케이션의 재개된 실행으로부터의 출력은 호스트 서버(570)에 의해 네트워크(110)를 통해 클라이언트 디바이스(120)로 전송된다. 예를 들어, 일부 구현예에서, 호스팅된 애플리케이션은 오디오 및/또는 비디오 그래픽 버퍼로 출력 데이터를 생성하고, 호스트 서버(570)는 버퍼 내용의 미디어 스트림을 전송한다. 일부 구현예에서, 가상 클라이언트 인터페이스(540)는 미디어 콘텐츠를 클라이언트 디바이스(120)로 스트리밍하고 클라이언트 디바이스(120)로부터 인터렉션 이벤트를 나타내는 데이터를 수신한다. 가상 클라이언트 인터페이스(540)는 클라이언트 디바이스 시뮬레이션 인스턴스에서 상기 호스팅된 애플리케이션에 대한 인터렉션 이벤트를 재생성한다. 일부 구현예에서, 호스트 서버(570)는 도 6을 참조하여 전술한 방법(600)을 사용하여 프리뷰 세션을 제공한다.
도 8은 프리뷰 세션을 제공하는데 사용하기 위해 애플리케이션을 사전 큐잉할 큐 포인트를 식별하는 방법(800)의 예시적인 구현에 대한 흐름도이다. 일반적으로 대부분의 구현에서, 선호 큐 포인트는 애플리케이션이 사용자 인터렉션을 위해 준비되는 애플리케이션 실행 중의 첫 번째 순간(first moment)이다. 일부 구현예에서, 대체 큐 포인트는, 예를 들어 도입(introductory) 프레젠테이션이 완전히 큐되고 사용자에게 제시할 준비가 되는 포인트로 사용된다. 방법(800)의 전반적인 개요에서, 단계(810)에서, 호스트 서버(570)는 클라이언트 디바이스 시뮬레이션 인스턴스상에서 실행된 호스팅된 애플리케이션으로부터의 출력을 모니터링한다. 단계(820)에서, 호스트 서버(570)는 호스팅된 애플리케이션이 큐 포인트에 도달했는지를 결정한다. 도 8은 이하에서 보다 상세히 설명되는 4개의 예시적인 결정 분기(branch)(822, 824, 826 및 828)를 도시한다. 이러한 예시적인 결정 분기는 개별적으로 또는 임의의 조합 또는 순서로 구현될 수 있으며, 예로서 제공된다. 다른 결정 분기들이 사용될 수 있으며 도시된 4개는 제한하려는 것이 아니다. 단계(830)에서 방법(800)의 개요를 계속하면, 호스트 서버(570)는 결정된 큐 포인트에서 애플리케이션의 실행을 일시 중지하고, 단계 840에서 호스트 서버(570)는 중지된 호스트 애플리케이션에 대한 중지된 실행 상태 정보를 저장한다. 예를 들어, 호스트 서버(570)는 중지된 실행 상태 정보를 데이터 저장 시스템(150)으로 전송할 수 있다.
보다 상세하게 도 8을 참조하면, 단계(810)에서, 호스트 서버(570)는 클라이언트 디바이스 시뮬레이션 인스턴스에서 실행되는 호스팅된 애플리케이션으로부터의 출력을 모니터링한다. 단계(820)에서, 호스트 서버(570)는 호스팅된 애플리케이션이 큐 포인트에 도달했는지 결정한다.
도 8은 개별적으로 또는 임의의 조합 또는 순서로 구현될 수 있는 4개의 예시적인 결정 분기(822, 824, 826 및 828)를 도시한다. 간단히 요약하면, 4개의 예는 호스팅된 애플리케이션이 인식된 사용자 입력 옵션을 제시하는지 여부를 결정하는 것에 기초한 분기(822), 호스팅된 애플리케이션이 정적 스크린을 제시하는지 여부를 결정하는 것에 기초한 분기(824), 호스팅된 애플리케이션이 안정한 스크린(예컨대, 루핑(looping) 애니메이션)을 제공하는지를 결정하는 것에 기초한 분기(826), 및 호스팅된 애플리케이션이 사전 결정된 시간 범위 동안 실행되었는지를 결정하는 것에 기초한 분기(828)를 포함한다. 이것들은 예이며, 다른 결정 분기들이 사용될 수 있으며, 도시된 4개는 제한하려는 것이 아니다.
많은 결정 분기 전략은 스크린 캡처의 분석을 사용한다. 일부 구현예에서, 호스트 서버(570)는 호스팅된 애플리케이션("스크린 캡처")으로부터의 그래픽 출력의 이미지를 주기적으로 캡처하여 스크린 캡처를 분석한다. 일부 구현예에서, 스크린 캡쳐는 디스플레이 스크린이 존재하는 경우, 예를 들어, 클라이언트 디바이스 시뮬레이션 인스턴스를 위한 그래픽 버퍼에 기초하여) 디스플레이 스크린이 어떻게 보이는지를 나타낸다. 즉, 스크린 캡처에는 실제 화면 또는 프리젠테이션 인터페이스가 필요하지 않는다. 일부 구현에서 스크린 캡처는 스크린의 포괄적인 이미지이다. 일부 구현예에서, 스크린 캡쳐는 스크린 상태를 나타내는 스크린의 서브-세트의 샘플링이다. 일부 구현예에서, 스크린 캡처는 JPEG, GIF, BMP, PNG 또는 TIFF 이미지 파일 포맷과 같은 이미지 파일 포맷으로 메모리에 유지된다. 일부 구현예에서, 스크린의 상태에 대응하는 데이터는 디스플레이 픽셀의 서브 세트에 대한 픽셀 상태의 샘플링이다. 샘플링은 전체 스크린 디스플레이의 대표적인 서브 세트로서 선택된 특정 픽셀일 수 있다. 일부 구현예에서, 클라이언트 디바이스상의 이벤트 핸들러(또는 이벤트 모니터)는 주기적으로 스크린 캡처를 수행한다. 픽셀에 대한 상태 정보는 예를 들어 색상 값, 색조, 명암, 밝기 및 채도 등을 포함할 수 있다. 색상 값은 빨강-녹색-파랑(RGB) 값, 시안-마젠타-노랑-키(CMYK) 값, 채도 기반"YCbCr" 또는 "Y'CbCr" 값, PANTONE 값 또는 임의 다른 색상값 체계를 사용하는 색상값일 수 있다. 샘플링에 사용되는 픽셀 세트는 사전 결정된 픽셀 세트일 수 있다. 일부 구현예에서, 픽셀 세트는 처음에 무작위로 선택되지만, 호스팅된 애플리케이션의 분석을 통해 동일한 픽셀 세트가 사용된다. 스크린 캡처는 애플리케이션 로드 화면, 비디오 또는 미디어 프레젠테이션, 그래픽 사용자 인터페이스(GUI) 또는 호스팅된 애플리케이션이 제시할 수 있는 다른 것을 나타낼 수 있다.
단계(820)에서 분기(822)를 사용하여, 호스트 서버(570)는 호스팅된 애플리케이션이 인식된 사용자 입력 옵션을 제시하는지 여부를 결정하는 것에 기초하여 호스팅된 애플리케이션이 큐잉 포인트에 도달했는지를 결정한다. 일부 구현예에서, 호스트 서버(570)는 주기적으로 스크린 캡처를 캡처하고 인식된 사용자 입력 옵션에 대한 스크린 캡처를 분석한다. 일부 구현예에서, 호스트 서버(570)는 "시작(start)","시작(begin)","플레이(play)","입력(enter)" 등과 같은 소프트 버튼 라벨을 식별하기 위해 화면 캡처에서 광학 문자인식(OCR) 기술을 사용한다. 예를 들어,도 2에 도시된 예시적인 스플래시 스크린 GUI(240)은 "시작(start)" 버튼(245)을 포함하고, 버튼(245)상의 라벨("시작"이라고 읽음)은 사용자 입력 옵션으로서 OCR을 통해 인식될 수 있다. 일부 구현예에서, 호스트 서버(570)는 우측 대향(right-facing) 삼각형 또는 화살표와 같은 이미지 또는 아이콘을 식별하기 위해 이미지 인식, 광학 문자 인식, 기계 학습 기법, 컴퓨터 비전, 패턴 인식 등을 사용한다. 일부 구현예에서, 호스트 서버(570)는 공통 사용자 입력 옵션의 디렉토리를 유지하고 디렉토리로부터 공통 사용자 입력 옵션을 따르는(conforming) 이미지 요소에 대해 상기 호스팅된 애플리케이션의 출력을 분석한다. 단계(820)에서 분기(822)를 사용하는 일부 구현예에서, 호스트 서버(570)가 호스팅된 애플리케이션이 인식된 사용자 입력 옵션을 제시한다고 결정할 때, 호스트 서버(570)는 호스팅된 애플리케이션이 큐 포인트에 도달했는지를 결정한다.
단계(820)에서 분기(824)를 사용하여, 호스트 서버(570)는 호스팅된 애플리케이션이 정적(static) 스크린을 제시하는지 여부를 결정하는 것에 기초하여 상기 호스팅된 애플리케이션이 큐 포인트에 도달했는지를 결정한다. 일부 구현예에서, 호스트 서버(570)는 주기적으로 스크린 캡처들의 시퀀스를 캡처하고 스크린 캡처들의 시퀀스를 분석하여 스크린 캡처들간에 차이가 있는지를 결정한다. 임계 시간 길이에 걸쳐 스크린 캡처들간에 차이가 없으면, 호스트 서버(570)는 호스팅된 애플리케이션이 정적 스크린을 제공하고 있다고 결정한다. 일부 구현예에서, 스크린 캡처 간들의 차이의 정도가 임계량 미만인 경우(예컨대, 스크린 캡처들간에 프리젠테이션의 1%미만이 변경되는 경우), 호스트 서버(570)는 호스팅된 애플리케이션이 정적 스크린을 제시하고 있다고 결정한다. 일부 구현예에서, 호스트 서버(570)는 빈 (blank) 스크린과 정적 스크린을 구별한다. 스크린 캡쳐가 색상, 채도, 밝기 또는 다른 특성에서 실질적으로 균일하면, 호스트 서버(570)는 그것을 빈 화면으로 분류할 수 있다. 일부 구현예에서, 호스트 서버(570)는 정적 스크린으로서 자격을 부여하기 위해 스크린 캡처에서 최소한의 특성 다이버시티(diversity)를 요구한다. 단계(820)에서 분기(824)를 사용하는 일부 구현예에서, 호스트 서버(570)가 호스팅된 애플리케이션이 정적 스크린을 제시한다고 결정할 때, 호스트 서버(570)는 호스팅된 애플리케이션이 큐 포인트에 도달했는지 결정한다.
단계(820)에서 분기(826)를 사용하여, 호스트 서버(570)는 호스팅된 애플리케이션이 안정된 스크린(예컨대, 루핑 애니메이션)을 제시하는지 여부를 결정하는 것에 기초하여 호스팅된 애플리케이션이 큐잉 포인트에 도달했는지 결정한다. 일부 구현예에서, 호스트 서버(570)는 주기적으로 스크린 캡처들의 시퀀스를 캡처하고, 스크린 캡처들의 시퀀스를 분석하여 스크린 캡처 또는 스크린 캡처 시퀀스의 반복이 있는지를 결정한다. 임계 시간 길이에 걸쳐 반복된 시퀀스가있는 경우, 호스트 서버(570)는 호스팅된 애플리케이션이 루프를 제공하고 있다고 결정한다. 루프가 예를 들어 임계 시간 길이 또는 임계 횟수의 반복 동안 지속되면, 호스트 서버(570)는 스크린 캡처가 안정된 스크린이라고 결정한다. 단계(820)에서 분기(826)를 사용하는 일부 구현예에서, 호스트 서버(570)가 호스팅된 애플리케이션이 안정한 스크린을 제공시다고 결정할 때, 호스트 서버(570)는 호스팅된 애플리케이션이 큐 포인트에 도달했는지를 결정한다. 그러한 일부 구현예에서, 호스트 서버(570)는 안정된 화면이 제시하는 제1 포인트(예를 들어, 애니메이션 루프의 시작)를 식별하고, 큐 포인트는 식별된 제1 포인트이다. 그러한 일부 구현예에서, 호스트 서버(570)는 안정된 스크린의 프리젠테이션 동안 임의의 포인트(예컨대, 프리젠테이션이 루프인 것으로 결정된 시점의 포인트)를 식별하고, 큐 포인트는 식별된 포인트이다.
단계(820)에서 분기(828)를 사용하여, 호스트 서버(570)는 호스팅된 애플리케이션이 미리 결정된 시간 동안 실행되었는지 여부를 결정하는 것에 기초하여 호스팅된 애플리케이션이 큐 포인트에 도달했는지 결정한다. 일부 구현예에서, 호스트 서버(570)는 호스팅된 애플리케이션을 수초 동안(또는 몇 분의 1초 동안) 실행하고, 단계(830)로 진행하여 사전 결정된 시간 범위 후에 애플리케이션의 실행을 일시 중지한다. 일부 구현예에서, 사전 결정된 시간 범위는 고정되어있다. 일부 구현예에서, 사전 결정된 시간 범위는 구성 가능하다. 일부 구현예에서, 사전 결정된 시간 범위는 애플리케이션 특정적이다. 예를 들어, 호스팅된 애플리케이션의 소스(예컨대, 애플리케이션 작성자, 공급 업체, 배포자 등)가 예상 로드 지연 (estimated loading latency) 또는 큐 포인트로 사용할 "로드 시간"을 제공할 수 있다. 일부 구현예에서, 사전 결정된 시간 범위는 실험에 의해 결정된다. 예를 들어,도 9를 참조하여 아래에서 설명되는 바와 같이, 일부 구현예에서, 호스팅된 애플리케이션은 다수의 클라이언트 디바이스(120)로 제시되고, 호스트 서버(570)는 초기 프리젠테이션으로부터 각 프리젠테이션에 대한 제1 인터렉션까지의 시간 길이를 측정한다. 그런 다음 이들 측정값은 일반적인 지연 시간을 식별하는데 사용되며큐 포인트 시간의 범위로 사용될 수 있다. 그러한 구현에서, 프로세스는 반복적이다. 즉, 이전에 일시 중단된 애플리케이션의 프리젠테이션을 위해 측정값이 수집될 수 있으므로 큐 포인트의 정확도는 시간 경과에 따라 자동으로 조정될 수 있다. 단계(820)에서 분기(828)를 사용하는 일부 구현에서, 호스트 서버(570)가 호스팅된 애플리케이션이 사전 결정된 시간 범위 동안 실행했다고 결정할 때, 호스트 서버 (570)는 호스팅된 애플리케이션이 큐 포인트에 도달했는지 결정한다.
단계(830)에서 방법(800)의 세부 사항을 계속하면, 호스트 서버(570)는 결정된 큐 포인트에서 애플리케이션의 실행을 일시 중지한다. 전술한 바와 같이, 도 7의 단계(730) 및 단계(740)을 참조하면, 호스트 서버(570)는 큐 포인트에서 클라이언트 디바이스 시뮬레이션 및 클라이언트 디바이스 시뮬레이션 상에 호스팅된 애플리케이션에 대한 메모리 상태를 나타내는 데이터를 캡처한다. 예를 들어, 일부 구현예에서, 호스트 서버(570)는 클라이언트 디바이스 시뮬레이션을 하이버네이션 상태 또는 슬립 상태에 두고, 하이버네이션 또는 슬립 상태에서 시뮬레이션 이미지를 기록한다.
단계(840)에서, 호스트 서버(570)는 중지된 호스팅된 애플리케이션에 대한 중지된 실행 상태 정보를 저장한다. 예를 들어, 호스트 서버(570)는 일시 중지된 실행 상태 정보를 데이터 저장 시스템(150)으로 전송할 수 있다.
도 9는 프리뷰 세션을 제공하는데 사용하기 위해 애플리케이션을 사전-큐잉하는 애플리케이션별 실행 시간-기반 큐 포인트를 식별하는 대상 방법(900)의 예시적인 구현에 대한 흐름도이다. 방법(900)은 가능한 많은 샘플링 인스턴스 중 단일 샘플에 대한 것이다. 각 샘플링 인스턴스는 사용자가 본 명세서에서 개시된 대로 제공된 콘텐츠에 처음 참여할 때를 나타내는 시작 통계 수집에 기여할 수 있다. 방법(900)의 전반적인 개요에서, 단계(910)에서, 호스트 서버(570)는 호스팅된 애플리케이션의 프리뷰 세션을 클라이언트 디바이스(120)에 제공하라는 요청을 수신한다. 단계(920)에서, 호스트 서버(570)는 클라이언트 디바이스 시뮬레이션 인스턴스상에서 호스팅된 애플리케이션을 실행하고 클라이언트 디바이스(120)로 프리뷰 세션을 제공하기 시작한다. 단계(930)에서, 호스트 서버(570)는 클라이언트 디바이스(120)로부터 인터렉션 이벤트의 통지를 수신한다. 단계(940)에서, 호스트 서버(570)는 단계(930)에서 실행 시작으로부터 통지 수신까지 경과된 시간의 양을 식별한다. 단계(950)에서, 호스트 서버(570)는 시작 통계를 갱신하고 단계(960)에서 호스트 서버(570)는 종료될 때까지 프리뷰 세션을 계속 제공한다.
보다 상세하게 도 9를 참조하면, 단계(910)에서, 호스트 서버(570)는 클라이언트 애플리케이션(120)로 호스팅된 애플리케이션의 프리뷰 세션을 제공하라는 요청을 수신한다. 일부 구현예에서, 수신된 요청은 호스팅된 애플리케이션을 특정하거나 식별하는 정보를 포함한다. 일부 구현예에서, 수신된 요청은 클라이언트 디바이스의 하나 이상의 특성을 특정하거나 식별하는 정보를 포함한다. 일부 구현예에서, 호스트 서버(570)는 클라이언트 디바이스로부터 디바이스-특정 프로파일을 식별하는 정보를 수신한다.
단계(920)에서, 호스트 서버(570)는 클라이언트 디바이스 시뮬레이션 인스턴스상에서 호스팅된 애플리케이션을 실행하고 클라이언트 디바이스(120)로 프리뷰 세션을 제공하기 시작한다. 일부 구현예에서, 호스트 서버(570)는 예를 들어 클라이언트 디바이스 프로파일에 기초하여 클라이언트 디바이스의 특성과 유사한 특성을 갖는 클라이언트 디바이스 시뮬레이션 인스턴스를 선택한다. 일부 구현예에서, 호스트 서버(570)는, 예를 들어 호스팅된 애플리케이션의 클린 인스톨(clean installation)로부터 클라이언트 디바이스 시뮬레이션 인스턴스로의 초기 "프레쉬(fresh)" 상태로부터 호스팅된 애플리케이션을 실행한다. 일부 구현예에서, 호스트 서버(570)는 사전-큐잉된 일시 중지 상태로부터 호스팅된 애플리케이션을 실행한다. 이러한 일부 구현예에서, 호스트 서버(570)는 사전 큐잉된 일시 중지 상태에 대해 경과된 실행 시간, 즉 애플리케이션이 일시 중지되기 전에 실행된 시간의 범위를 식별한다. 호스트 서버(570)는, 예를 들어 도 6을 참조하여 상술한 바와 같이, 프리뷰 세션에서 클라이언트 디바이스로 애플리케이션을 제공한다.
단계(930)에서, 호스트 서버(570)는 클라이언트 디바이스(120)로부터 인터렉션 이벤트의 통지를 수신한다. 예를 들어, 도 6의 단계(655)를 참조하여 상술한 바와 같이, 일부 구현예에서, 클라이언트 디바이스(120)는 검출된 인터렉션 이벤트의 디스크립션(436)을 호스트 서버(570)로 전송한다. 일부 구현예에서, 클라이언트 디바이스(120)는 검출된 인터렉션을 나타내는 데이터를 전송한다. 일부 구현예에서, 클라이언트 디바이스(120)는 인터렉션의 특성을 나타내는 데이터를 포함하는 데이터 구조를 전송한다. 일부 구현예에서, 클라이언트 디바이스(120)는 전송된 데이터에 내부 데이터 프리젠테이션을 포함한다. 클라이언트 디바이스(120)의 사용자가 애플리케이션과 상호 작용하려는 제1 시간은 애플리케이션이 인터렉션할 준비가 된 첫 번째 시간을 나타낼 수 있다. 따라서, 일부 구현예에서, 이 제1 인터렉션은 애플리케이션 실행의 시작부터 애플리케이션이 사용자 인터렉션을 위해 준비될 때까지의 시간 길이를 측정하는데 사용된다.
단계(940)에서, 호스트 서버(570)는 단계(930)에서 실행 시작부터 통지의 수신까지 경과된 시간의 양을 식별한다. 일부 구현에서, 실행의 시작은 클라이언트 디바이스 시뮬레이션 인스턴스에서 애플리케이션의 초기 새로 설치(fresh install)로부터 호스팅된 애플리케이션을 실행하는 시작에 대응한다. 일부 구현예에서, 단계(920)는 부분적으로 실행된 중지 상태로부터 호스팅된 애플리케이션을 재개한다. 그러한 일부 구현예에서, 실행 시작으로부터 경과된 시간의 양은 애플리케이션이 일시 중지되기 전에 실행된 시간의 양을 포함한다.
단계(950)에서, 호스트 서버(570)는 시작 통계를 갱신한다. 일부 구현예에서, 시작 통계는 평균 시간 길이가 계산될 수 있는 시간 길이의 집합이다. 예를 들어, 일부 구현예에서, 시간 길이의 집합은 관측된 시간 길이의 테이블 및 길이가 관찰될 때마다의 횟수이다. 평균, 중앙값, 모드, 절사 평균(trimmed mean) 또는 다른 통계적 일반화는 시간 길이 집합으로부터 계산될 수 있다. 일부 구현예에서, 시작 통계는 카운터의 쌍, 측정 횟수(n)에 대한 하나의 카운터 및 측정의 실행 평균에 대한 다른 카운터(d)이다. 새로운 측정치(x)가(ng+x)/(n+1)과 같이 실행 평균(d)에 추가된다.
일부 구현예에서, 시작 통계는 인터렉션 당시의 스크린 디스플레이(스크린 샷)의 이미지 표현을 포함한다. 호스트 서버(570)는 인터렉션할 때 이미지를 캡처하고 이미지로 시작 통계를 갱신한다. 일부 구현예에서, 호스트 서버(570)는 인터렉션 이벤트의 타이밍이 이전 측정의 범위(range) 또는 클러스터(cluster) 내에 있는 경우에만 스크린 샷을 기록한다. 즉, 측정이 유용할 만한 충분한 문턱 값이 있는 경우에만 이미지가 기록된다. 일부 구현예에서, 범위는 제 인터렉션 이벤트에 대한 평균 시간 전후의 고정된 시간(초)의 시간-원도우이다. 일부 구현예에서, 이미지는 타이밍이 제1 임계 백분위수(percentile) 이상, 제2임계 백분위수 또는 이전에 관측된 제1 인터렉션의 제1 백분위수와 제2백분위수 사이에 있는 경우에 기록된다. 예를 들어, 일부 구현예에서, 타이밍이 80번째 백분위수에서 5초 이내이면 이미지가 기록된다. 일부 구현예에서, 이미지는 예를 들어, 이미지 인식, 광학 문자 인식, 기계 학습 기법, 컴퓨터 비전, 패턴 인식 등을 사용하여 분석되어, 시작 버튼과 같은 인터렉티브 요소를 식별한다. 일부 구현예에서, 호스트 서버(570)는 터치 인터렉션 이벤트에 대응하는 디스플레이 좌표, 프리젠테이션에 대한 터치 인터렉션 이벤트의 타이밍, 및 터치 이벤트에 대응하는 디스플레이의 스크린 샷을 기록한다. 일부 구현예에서, 호스트 서버(570)는 인터렉션 이벤트가 인터렉션 요소의 프리젠테이션에 응답한 가능성에 대응하는 스코어를 시작 통계에 포함시킨다. 즉, 스코어는, 예를 들어 호스트 서버(570)가 인터렉티브 요소를 식별했는지 여부에 기초하여, 인터렉션 이벤트가 애플리케이션과 인터렉션할 준비가 되었는지에 대한 가능성을 나타낼 수 있다. 일부 구현예에서, 호스트 서버(570)는 또한 인터렉션 이벤트가 식별된 인터렉티브 요소에 대응하는 좌표에 있는지의 여부를 평가한다. 일부 구현예에서, 스코어는 인터렉티브 요소의 기계 인식에 대한 신뢰도 값이다
애플리케이션은 스크린 크기, 프로세서 속성, 메모리 할당 등과 같은 일부 클라이언트 디바이스 시뮬레이션에서 다른 것보다 로드하는데 더 시간이 오래 걸릴 수 있다. 일부 구현에서, 시작 통계는 특정 클라이언트 디바이스 시뮬레이션 인스턴스에 대해 유지된다.
단계(960)에서, 호스트 서버(570)는 종료될 때까지 프리뷰 세션을 계속 제공한다. 일부 구현예에서, 호스트 서버(570)는 검출된 제1 인터렉션에 대한 통계만을 갱신한다. 그 후, 프리뷰 세션은 도 6을 참조하여 전술한 바와 같이 기본적으로 제공된다. 일부 구현예에서, 호스트 서버(570)는 추가적인 인터렉션 통계를 수집한다. 예를 들어, 애플리케이션이 인터렉션할 준비가되지 않은 경우 인터렉션시 첫번째 사용자 시도는 무시되었을 수 있다. 따라서, 일부 구현예에서, 호스트 서버(570)는 추가적인 인터렉션에 대한 통계를 수집하고 애플리케이션 가용성에 대응하는 인터렉션 이벤트의 제1 클러스터를 식별한다.
일부 구현예에서, 호스트 서버(570)는 방법(900)에 의해 수집된 제1 인터렉션 통계를 사용하여 호스팅된 애플리케이션을 사전 큐잉하기 위한 큐 포인트를 식별한다. 이러한 구현예에서, 호스트 서버(570)는 애플리케이션 실행의 시작부터 제1 인터렉션 이벤트까지의 평균 시간을 식별한다. 일부 구현예에서, 호스트 서버 (570)는 이상치(outlier) 통계의 사전 정의된 백분율을 생략하여 제1 인터렉션 통계로부터 절사 평균(trimmed mean)을 계산한다. 일부 구현예에서, 호스트 서버 (570)는 애플리케이션 실행의 시작부터 제1 인터렉션 이벤트의 클러스터의 시작까지의 시간 길이를 계산한다. 일부 구현예에서, 호스트 서버(570)는 제1 인터렉션에 대해 측정된 시간 길이의 사전 정의된(예를 들어, 80번째) 백분위수에 있는 시간 길이를 식별한다. 식별된 큐 포인트는 애플리케이션의 로드 지연에 대한 추정치이며, 예를 들어 도 7을 참조하여 상술한 바와 같이, 미래의 프리젠테이션을 위해 애플리케이션을 사전-큐잉(pre-cue)하는데 사용될 수 있다.
적어도 하나의 실시 예에서, 호스트 서버(570)는 게임의 프리뷰 세션을 제공한다. 게임이 처음 로드되면 게임에 필요한 다양한 그래픽이 렌더링되므로 시간이 오래 걸린다. 게임이 게임 데이터를 생성하는 동안, 애니메이션된 바람개비 그래픽이 제시된다. 일단 게임이 준비되면 "지금 플레이(play now)"라고 레이블된 버튼과 "지금 구입(buy now)"라고 레이블된 버튼이 중첩된 게임 캐릭터의 짧은 루핑 비디오를 제공한다. 호스트 서버(570)는 게임을 사전 큐잉하지 않고 다수의 클라이언트 디바이스로 이 게임을 제시하고, 예를 들어 도 9를 참조하여 상술한 방법(900)을 사용하여 게임 로드 대기 시간을 식별하기 위해 이들 프레젠테이션을 사용한다. 예를 들어, 호스트 서버(570)는 클라이언트 디바이스가 제1 인터렉션 이벤트를 보고할 때의 분배를 결정하고, 제1 인터렉션 이벤트가 분배의 80% 백분위수(2초의 범위)에 있는 시간에 있는 사건의 서브 세트에 대한 게임 디스플레이 상태에 해당하는 스크린 샷을 조사하여,(예를 들어, OCR을 사용하여 호스트 서버(570)에 의해 인식되는) "플레이"로 라벨된 버튼 상의 탭에 대응하는 서브 세트의 인터렉션에 대한 평균 시간을 결정한다. 이 평균 시간은 예상된 게임 로드 대기 시간을 나타내며 큐 포인트로 사용될 수 있다. 이어서, 호스트 서버(570)는 클라이언트 디바이스없이 가상 머신상에서 게임을 실행하고, 예를 들어 도 7을 참조하여 상술한 방법(700)을 사용하여 큐 포인트에서 실행을 일시 중지한다. 호스트 서버(570)는 일시 중지된 인스턴스를 사용하여 후속 클라이언트 요청에 응답하여 게임을 제공한다. 만약 큐 포인트가 게임 시작 약 10초이면, 큐 포인트에서 일시 중지된 인스턴스에서 게임을 제공하면 각 프레젠테이션상에서 10초를 절약할 수 있다. 클라이언트 디바이스 사용자는 바람개비를 보는 10초를 소비하지 않아도 되는 이점이 있다. 만약 프리뷰 세션에 시간 제한이 설정되어 있는 경우(예컨대, 30초), 30초는 게임을 로드하기 위해 1/3을 기다리며 소비하기 보다 게임에 참여하도록 사용될 수 있다.
적어도 하나의 양태에서, 메모리, 네트워크 인터페이스 및 프로세서를 포함하는 클라이언트 시뮬레이션 서버는 기술된 바와 같이 구성될 수 있다. 특히, 일부 구현예에서, 프로세서는 클라이언트 디바이스의 시뮬레이션을 실행하고 큐 포인트까지 클라이언트 디바이스의 시뮬레이션에서 애플리케이션을 실행하도록 구성된다. 프로세서는 큐 포인트에서 애플리케이션의 실행을 일시 중지하고, 큐 포인트에서 일시 중지된, 일시 중지된 실행 상태의 애플리케이션의 표현을 메모리에 저장하도록 구성된다. 클라이언트 시뮬레이션 서버는 또한 네트워크 인터페이스를 통해 클라이언트 디바이스로부터 애플리케이션의 인터렉티브 인스턴스를 제공하라는 요청을 수신하도록 구성된다. 상기 요청에 응답하여, 프로세서는 애플리케이션의 중지된 실행 상태로부터 상기 메모리에 저장된 표현을 사용하여 애플리케이션의 재개된 인스턴스를 실행하고, 애플리케이션의 재개된 인스턴스로부터의 출력을 네트워크 인터페이스를 통해 클라이언트 디바이스로 제공하도록 구성된다.
클라이언트 시뮬레이션 서버의 일부 구현에서, 큐 포인트는 사전 결정된 실행 시간의 길이에 있다. 클라이언트 시뮬레이션 서버의 일부 구현에서, 큐 포인트는 애플리케이션이 사용자 인터렉션 옵션을 제시하는 프리젠테이션 단계이다. 클라이언트 시뮬레이션 서버를 포함하는 시스템의 일부 구현에서, 시스템은 사용자 인터렉션 옵션의 프리젠테이션을 검출하도록 구성된 시뮬레이션 모니터를 더 포함한다. 일부 구현예에서, 시뮬레이션 모니터는 광학 문자 인식을 사용하여 사용자 인터렉션 옵션의 프리젠테이션을 검출하도록 구성된다. 일부 구현예에서, 시뮬레이션 모니터는 기계 학습 컴퓨터 비전을 사용하여 사용자 인터렉션 옵션의 프리젠테이션을 검출하도록 구성된다. 일부 구현예에서, 클라이언트 시뮬레이션 서버의 프로세서는 큐 포인트에서 클라이언트 디바이스의 시뮬레이션의 실행을 일시 중지함으로써 큐 포인트에서 애플리케이션의 실행을 일시 중지하도록 구성된다.
적어도 하나의 양태에서, 클라이언트 시뮬레이션 서버를 포함하고, 클라이언트 시뮬레이션 서버에 의해 각각의 복수의 상이한 클라이언트 디바이스로 제공되는 복수의 샘플링 인스턴스를 모니터링하도록 구성된 모니터를 더 포함하는 시스템이 개시되며, 각각의 샘플링 인스턴스는 초기 로드 상태와 연관된다. 모니터는 복수의 샘플링 인스턴스 각각에 대해, 각각의 초기 로드 상태로부터 각각의 초기 사용자 인터렉션까지의 대응 시간 길이를 식별하여, 식별된 시간 길이에 기초하여 큐 포인트에 대한 실행 시간의 사전 결정된 길이를 결정하도록 구성된다. 일부 구현예에서, 모니터는 명령을 실행하여 복수의 샘플링 인스턴스를 모니터링하고, 시간 길이를 식별하고, 식별된 시간 길이에 기초하여 큐 포인트를 결정하도록 구성된 프로세서를 포함한다. 일부 구현예에서, 시스템은 식별된 시간 길이의 산술 평균을 사용하여 큐 포인트에 대한 사전 결정된 실행 시간의 길이를 결정하도록 구성된다. 일부 구현예에서, 시스템은 식별 시간 길이의 절삭 평균을 사용하여 큐 포인트에 대한 실행 시간의 사전 결정된 길이를 결정하도록 구성된다.
일부 구현예에서, 클라이언트 시뮬레이션 서버의 프로세서는 네트워크 인터페이스를 통해 클라이언트 디바이스로부터 클라이언트 디바이스 특성 기술자(descriptor)를 수신하도록 구성된다. 프로세서는 클라이언트 디바이스 특성 기술자에 부합되는 특성을 갖는 일반화된 클라이언트 디바이스에 대한 클라이언트 시뮬레이션을 선택하여 일반화된 클라이언트 디바이스에 대한 클라이언트 시뮬레이션을 사용하여 클라이언트 디바이스의 시뮬레이션을 실행하도록 구성된다.
적어도 하나의 양태에서, 프로세서를 포함하는 클라이언트 시뮬레이션 시스템에 의해 클라이언트 디바이스의 시뮬레이션을 실행하는 단계와, 상기 클라이언트 시뮬레이션 시스템에 의해 상기 클라이언트 디바이스의 시뮬레이션에서 애플리케이션을 큐 포인트까지 실행하는 단계를 포함하는 방법이 개시된다. 상기 방법은 큐 포인트에서 애플리케이션의 실행을 일시 중지하는 단계 및 클라이언트 시뮬레이션 시스템과 연관된 메모리에 상기 큐 포인트에서 일시 중지된 중단된 실행 상태의 애플리케이션의 표현을 저장하는 단계를 포함한다. 상기 이 방법은 네트워크를 통해 클라이언트 디바이스로부터 상기 애플리케이션의 인터렉티브 인스턴스를 제공하라는 요청을 수신하는 단계를 포함한다. 상기 방법은 상기 클라이언트 시뮬레이션 시스템에 의해 상기 애플리케이션의 일시 중지된 실행 상태로부터, 상기 메모리에 저장된 표현을 사용하여 상기 요청에 응답하여 상기 애플리케이션의 재개된 인스턴스를 실행하는 단계, 및 상기 애플리케이션의 재개된 인스턴스로부터의 출력을 네트워크를 통해 상기 클라이언트 디바이스로 제공하는 단계를 포함한다.
적어도 하나의 양태에서, 메모리, 네트워크 인터페이스 및 프로세서를 포함하는 시뮬레이션 호스트 서버에 대한 시스템이 개시되며, 상기 프로세서는 클라이언트 디바이스의 시뮬레이션상에서 애플리케이션을 실행하도록 구성되며, 상기 애플리케이션의 실행은 시뮬레이션이 애플리케이션 출력 데이터의 미디어 스트림을 생성하게 한다. 상기 프로세서는 생성된 미디어 스트림을 네트워크 인터페이스를 통해 클라이언트 디바이스로 전송하도록 구성된다. 상기 프로세서는 또한 상기 클라이언트 디바이스의 시뮬레이션상에서 실행되는 애플리케이션으로 메시징 인터페이스를 제공하고, 상기 메시징 인터페이스에서 상기 애플리케이션으로부터 수신된 제1 메시지를 네트워크 인터페이스를 통해 상기 클라이언트 디바이스로 전송하도록 구성된다. 프로세서는 네트워크 인터페이스를 통해 클라이언트 디바이스로부터 제2메시지를 수신하고, 상기 클라이언트 디바이스로부터 수신된 제2메시지를 클라이언트 디바이스의 시뮬레이션에 따라 실행되는 애플리케이션에 제공하도록 구성된다. 일부 구현예에서, 클라이언트 디바이스로부터 수신된 제2메시지는 클라이언트 디바이스로 전송된 제1 메시지에 응답한다. 일부 구현예에서, 클라이언트 디바이스로 전송된 제1 메시지는 액세스 요청이다. 일부 구현예에서, 액세스 요청은 클라이언트 디바이스로 하여금 인증 스크린을 디스플레이하고, 인증을 처리하고, 상기 처리된 인증에 응답하여 클라이언트 디바이스로부터 수신된 제2메시지내의 액세스 허용 지시자를 시뮬레이션 호스트 서버로 제공하도록 한다.
일부 구현예에서, 시뮬레이션 호스트 서버는 클라이언트 디바이스의 시뮬레이션을 가상 머신으로서 제공하도록 구성된 가상 머신 호스트를 포함한다. 일부 구현예에서, 클라이언트 디바이스의 시뮬레이션은 애플리케이션에 의해 생성된 이미지 데이터를 위한 그래픽 출력 버퍼를 포함하고, 상기 프로세서는 그래픽 출력 버퍼로부터의 데이터를 사용하여 미디어 스트림을 생성하도록 추가로 구성된다. 일부 구현예에서, 프로세서는 제1메시지를 클라이언트 디바이스에서 실행되는 컨트롤러 애플리케이션으로 전송하고, 클라이언트 디바이스에서 실행되는 컨트롤러 애플리케이션으로부터 제2메시지를 수신하도록 구성된다. 일부 구현예에서, 클라이언트 디바이스로부터 수신된 제2메시지는 클라이언트 디바이스로 전송된 제1 메시지에 응답한다. 일부 구현예에서, 제1 메시지는 클라이언트 디바이스에서 실행되는 컨트롤러 애플리케이션으로 하여금 디바이스-특정 데이터를 시뮬레이션 호스트 서버로 전송하게 한다. 예를 들어, 일부 구현예에서, 제1 메시지는 클라이언트 디바이스가 요청하는 유니폼 리소스 로케이터(URL)를 포함하여, 클라이언트 디바이스로 하여금 디바이스-특정 데이터를 송신하도록 한다.
시스템의 일부 구현예에서, 클라이언트 디바이스로 전송된 제1 메시지는 클라이언트 디바이스상의 시스템 구성 데이터로의 액세스와, 클라이언트 디바이스상의 오디오 센서로의 액세스와, 클라이언트 디바이스상의 이미지 센서로의 액세스와, 클라이언트 디바이스상의 생체인식 센서로의 억세스와, 클라이언트 디바이스상의 발광 다이오드로의 액세스와, 클라이언트 디바이스상의 시청 제한 설정으로의 액세스, 또는 클라이언트 디바이스상의 파일 시스템으로의 억세스 중 하나에 대한 액세스 요청이다. 일부 실시예에서, 상기 액세스 요청은 클라이언트 디바이스로 하여금 인증 스크린을 디스플레이하고, 인증을 처리하고, 처리된 인증에 응답하여, 클라이언트 디바이스로부터 수신된 제2메시지 내의 액세스 허용 지시자를 상기 시뮬레이션 호스트 서버로 제공한다.
도 10은 예시적인 컴퓨팅 시스템(101)의 블록도이다. 예시적인 컴퓨팅 시스템(101)은 예시적인 구현예에 따라 본 명세서에 기술된 컴퓨터화된 컴포넌트를 구현하는데 사용하기에 적합하다. 전반적인 개요에서, 컴퓨팅 시스템(101)은 명령들에 따라 동작들을 수행하기 위한 적어도 하나의 프로세서(107) 및 명령들 및 데이터를 저장하기 위한 하나 이상의 메모리 디바이스(106 또는 109)를 포함한다. 개시된 예시적인 컴퓨팅 시스템(101)은 버스(105)를 통해, 메모리(106), 적어도 하나의 네트워크 인터페이스 컨트롤러(112) 및(예컨대, 네트워크(110)에 억세스하기 위한) 네트워크 디바이스(114)에 접속하기 위한 네트워크 인터페이스(111)와 통신하는 하나 이상의 프로세서(107) 및 다른 컴포넌트(103), 예를 들어 입력/출력(I/O) 컴포넌트(102)를 포함한다. 일반적으로, 프로세서(107)는 메모리(예컨대, 캐시(109) 또는 메모리(106))로부터 수신된 명령을 실행할 것이다. 예를 들어, 도시된 프로세서(107)는 캐시(109)를 통합하거나 캐시(109)에 직접 접속된다. 일부 예에서, 명령들은 메모리(106)로부터 캐시(109)로 판독되고 캐시(109)로부터 프로세서(들)(107)에 의해 실행된다. 일부 구현예에서, 명령들은 미도시된 판독 전용 메모리(ROM)에 인코딩된다.
보다 상세하게, 프로세서(들)(107)은 명령들, 예를 들어 메모리(106) 또는 캐시(109)로부터 페치된 명령들을 처리하는 임의의 논리 회로일 수 있다. 컴퓨팅 시스템(101)은 본 명세서에 설명된 바와 같이 동작할 수 있는 임의의 프로세서 또는 프로세서 세트에 기초할 수 있다. 프로세서(들)(107)은 단일 코어 또는 멀티 코어 프로세서(들)일 수 있다. 프로세서(들)(107)은 다수의 별개의 프로세서일 수 있다. 예를 들어, 일부 구현예에서, 범용 프로세서(107)는 수학 코(Co)-프로세서 또는 그래픽 프로세서와 같은 하나 이상의 특수 목적 프로세서(107)로 보강될 수 있다. 일부 구현예에서, 프로세서(들)(107)은 하나 이상의 "칩"상의 회로로서 구현된다.
메모리(106)는 컴퓨터 판독 가능 데이터를 저장하기에 적합한 임의의 디바이스일 수 있다. 메모리(106)는 고정 저장 장치(fixed storage)를 갖는 디바이스 또는 제거 가능한 저장 미디어를 판독하기 위한 디바이스일 수 있다. 메모리의 예로는 모든 형태의 비 휘발성 메모리, 미디어 및 메모리 디바이스, 반도체 메모리 디바이스(예컨대, EPROM, EEPROM, SDRAM 및 플래시 메모리 디바이스), 자기 디스크, 광 자기 디스크 및 광학 디스크(예컨대, CD ROM, DVD-ROM 또는 BLU-RAY 디스크)를 포함한다. 컴퓨팅 시스템(101)은 임의의 수의 메모리 디바이스(106)를 가질 수 있다.
캐시(109)는 일반적으로 빠른 액세스 시간을 위해 프로세서(107)에 근접하여 배치된 컴퓨터 메모리의 형태이다. 일부 구현예에서, 캐시(109)는 프로세서(107)의 일부 또는 프로세서(107)와 같은 칩 상에 있는 메모리 회로이다. 일부 구현예에서, L2 및 L3 캐시 레이어와 같은 다수 레벨의 캐시(109)가 있다. 일부 구현예에서, 다수의 프로세서(117) 및/또는 프로세서(117)의 다중 코어는 동일한 캐시(109)에 대한 액세스를 공유한다.
네트워크 인터페이스 컨트롤러(112)는 네트워크 인터페이스(111)(때로는 네트워크 인터페이스 포트로 지칭됨)를 통한 데이터 교환을 관리한다. 네트워크 인터페이스 컨트롤러(112)는 네트워크 통신을 위한 OSI(Open Systems Interconnection) 모델의 물리 및 데이터 링크 계층을 처리한다. 일부 구현예에서, 네트워크 인터페이스 컨트롤러의 작업 중 일부는 하나 이상의 프로세서(들)(107)에 의해 처리된다. 일부 구현예에서, 네트워크 인터페이스 컨트롤러(112)는 예를 들어 동일한 칩상의 회로로서 프로세서(107)에 통합된다. 일부 구현예에서, 컴퓨팅 시스템(101)은 단일 컨트롤러(112)에 의해 제어되는 다수의 네트워크 인터페이스(111)를 갖는다. 일부 구현예에서, 컴퓨팅 시스템(101)은 다수의 네트워크 인터페이스 컨트롤러(112)를 갖는다. 일부 구현예에서, 각각의 네트워크 인터페이스(111)는 물리 네트워크 링크(예컨대, cat-5 이더넷 링크)에 대한 접속점이다. 일부 구현예에서, 네트워크 인터페이스 컨트롤러(112)는 무선 네트워크 접속을 지원하고, 인터페이스(111)는(예컨대, IEEE 802.11 프로토콜, 근거리 통신 "NFC", 블루투스, BLE, 지그비, ANT 또는 기타 다른 무선 프로토콜 중 임의의 것에 대한) 무선(예컨대, 라디오) 송/수신기이다. 일부 구현예에서, 네트워크 인터페이스 컨트롤러(112)는 이더넷과 같은 하나 이상의 네트워크 프로토콜을 구현한다. 일반적으로, 컴퓨팅 시스템(101)은 네트워크 인터페이스(111)를 통해 물리 또는 무선 링크를 통해 다른 컴퓨팅 디바이스와 데이터를 교환한다. 네트워크 인터페이스(111)는 컴퓨팅 디바이스(101)를 인터넷과 같은 데이터 네트워크(110)에 연결하는 중계 디바이스, 예를 들어 허브, 브리지, 스위치 또는 라우터와 같은 네트워크 디바이스를 통해 다른 디바이스 또는 다른 디바이스에 직접 연결될 수 있다.
컴퓨팅 시스템(101)은 하나 이상의 입력 또는 출력(I/O) 컴포넌트(102)를 포함하거나 그에 대한 인터페이스를 제공할 수 있다. 입력 디바이스는 키보드, 마이크, 터치 스크린, 풋(foot) 페달, 센서, MIDI(Musical Instrument Digital Interface) 입력 디바이스 및 마우스 또는 트랙볼과 같은 포인팅 디바이스를 포함하며 이에 국한되지 않는다. 출력 디바이스는 비디오 디스플레이, 스피커, 햅틱 피드백 디바이스, 리프레쉬 가능 점자(Braille) 단말기, 표시등, MIDI 신서사이저와 같은 MIDI 출력 디바이스 및 2차원 또는 3차원 프린터를 포함하며 이에 국한되지 않는다.
다른 컴포넌트(103)는 I/O인터페이스, 외부 직렬 디바이스 포트 및 임의의 추가 코-프로세서를 포함할 수 있다. 예를 들어, 컴퓨팅 시스템(101)은 입력 디바이스, 출력 디바이스, 또는 추가 메모리 디바이스(예컨대, 휴대용 플래시 드라이브 또는 외부 미디어 드라이브)를 연결하기 위한 인터페이스(예컨대, 범용 직렬 버스(USB)인터페이스)를 포함할 수 있다. 일부 구현예에서, 컴퓨팅 시스템(101)은 코 프로세서와 같은 추가 디바이스(103)를 포함한다. 예를 들어, 수학 코-프로세서는 높은 정밀도 또는 복잡한 계산으로 프로세서(107)를 보조할 수 있다.
본 명세서에서 기술된 주제 및 동작의 구현은 디지털 전자 회로, 또는 본 명세서에 개시된 구조 및 구조적 등가물 또는 이들 중 하나 이상의 조합을 포함하는, 유형의 매체, 펌웨어 또는 하드웨어 상에 구현 된 컴퓨터 소프트웨어에서 구현될 수 있다. 본 명세서에서 설명된 주제의 구현은 유형의 매체상에 구현된 하나 이상의 컴퓨터 프로그램, 즉(예컨대, 프로세서(107)를 포함하는) 데이터 처리 장치에 의해 실행되거나 또는 그 동작을 제어하기 위해 하나 이상의 컴퓨터 저장 미디어 상에 인코딩된 컴퓨터 프로그램 명령의 하나 이상의 모듈들로 구현될 수 있다. 컴퓨터 저장 매체는 컴퓨터 판독 가능 저장 디바이스, 컴퓨터 판독 가능 저장 기판, 랜덤 또는 직렬 액세스 메모리 어레이 또는 디바이스를 포함하거나 또는 이들 중 하나 이상의 조합일 수 있다. 컴퓨터 저장 매체는 하나 이상의 개별 컴포넌트 또는 미디어(예컨대, 다수의 CD, 디스크 또는 다른 저장 디바이스)일 수 있거나 포함될 수 있다. 컴퓨터 저장 매체는 유형이다. 컴퓨터 저장 매체는 예를 들어, 컴퓨터 실행 가능 명령과 같은 데이터를 비 일시적 형태로 저장한다.
컴퓨터 프로그램(프로그램, 소프트웨어, 소프트웨어 애플리케이션, 스크립트 또는 코드라고도 함)은 컴파일된 언어, 해석된 언어, 선언적 언어 및 절차적 언어를 비롯한 모든 프로그래밍 언어로 작성될 수 있으며, 컴퓨터 프로그램은 독립형(stand-alone) 프로그램 또는 모듈, 컴포넌트, 서브 루틴, 객체 또는 컴퓨팅 환경에서 사용하기에 적합한 다른 유닛을 포함하는 임의의 형태로 배치될 수 있다. 컴퓨터 프로그램은 파일 시스템의 파일에 해당할 수 있지만 반드시 그런 것은 아니다. 프로그램은 다른 프로그램이나 데이터(예컨대, 마크 업 언어 문서에 저장된 하나 이상의 스크립트)를 보유하고 있는 파일의 일부분, 문제의 프로그램 전용 파일 또는 다수의 조정 파일(예컨대, 하나 이상의 모듈, 라이브러리, 서브 프로그램 또는 코드의 일부를 저장하는 파일)에 저장될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터 또는 하나의 사이트에 있거나 여러 사이트에 분산되어 있고 통신 네트워크로 상호 연결된 다수의 컴퓨터에서 실행되도록 배포될 수 있다.
본 명세서에서 설명되는 프로세스 및 논리 흐름은 입력 데이터를 조작하고 출력을 생성함으로써 동작들을 수행하기 위해 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 프로그램 가능 프로세서에 의해 수행될 수 있다. 프로세스 및 논리 흐름은 또한 FPGA(Field Programmable Gate Array) 또는 주문형 집적 회로(ASIC)와 같은 특정 목적의 논리 회로에 의해 수행될 수 있고, 장치는 또한 특수 목적 논리 회로로 구현될 수 있다. 이러한 특수 목적 회로는 범용 프로세서가 아니더라도 컴퓨터 프로세서로 지칭될 수 있다.
사용자는 원격 서버가 사용자에 관한 정보 및/또는 사용자에 의해 운영되는 디바이스를 식별하고 저장하도록 허용하거나 거부할 수 있다. 예를 들어, 사용자는 사용자와의 명백한 관련성에 기초하여 선택된 제3자 콘텐츠를 수신하도록 선택할 수 있다. 일부 구현예에서, 디바이스 식별자는(예컨대, 클라이언트 디바이스(120)상에서 실행되는) 클라이언트 애플리케이션의 특정 인스턴스와 연관된다. 일부 구현예에서, 사용자는 사용자에 대한 개인 식별 정보가 포함되어 있지 않는 랜덤 화된 디바이스 식별자(예컨대, 쿠키, 디바이스 시리얼 번호 등)를 사용하여 나타낼 수 있다. 예를 들어 사용자의 이름, 인구 통계 등과 관련된 정보는 사용자가 그러한 정보를 제공하기로 선택하지 않는 한 원격 서버에 의해 사용될 수 없다. 따라서, 사용자는 원격 서버나 다른 콘텐츠 소스에서 사용자의 정보를 수집하는 방법을 제어할 수 있다. 사용자와 관련된 또는 사용자를 대표하는 익명의 토큰과 관련된 일부 정보는 하나 이상의 쿼리, 하나 이상의 클릭, 브라우저 이력 데이터(예컨대, 방문한 URL, 조회된 URL의 수, URL 방문 지속 시간 등)와 같은 이벤트를 포함할 수 있다.
본 명세서는 많은 특정 구현 세부 사항을 포함하고 있지만, 이들은 발명의 범위 또는 청구될 수 있는 범위에 대한 제한으로 해석되어서는 안되며, 오히려 특정 발명의 특정 실시예에 특정한 특징을 설명하기 위한 것으로 해석되어야 한다. 별도의 구현의 문맥에서 본 명세서에 기술된 특정 특징은 또한 단일 구현으로 조합하여 구현될 수 있다. 반대로, 단일 구현의 맥락에서 기술된 다양한 특징은 또한 다수의 구현예에서 개별적으로 또는 임의의 적합한 하위 조합으로 구현될 수 있다. 게다가, 특징들은 특정 조합으로 작용하고 심지어 그 자체로 초기에 청구된 것으로서 기술되었을지라도, 청구된 조합으로부터의 하나 이상의 특징이 어떤 경우에는 조합으로부터 제거될 수 있으며 청구된 조합은 하위 조합 또는 하위 조합의 변형을 ㄷ대d으로 할 수 있다.
유사하게, 동작들이 특정 순서로 도면에 도시되어 있지만, 이는 바람직한 결과를 달성하기 위해, 그러한 동작들이 도시된 순서 또는 순차적인 순서로 수행되거나, 도시된 모든 동작들이 수행될 것을 요구하는 것으로 이해되어서는 안된다. 특정 상황에서는 멀티 태스킹 및 병렬 처리가 유리할 수 있다. 게다가, 상술한 구현예에서 다양한 시스템 컴포넌트의 분리는 모든 구현예에서 그러한 분리를 필요로 하는 것으로 이해되어서는 안되며, 기술된 프로그램 컴포넌트 및 시스템은 일반적으로 단일 소프트웨어 제품에 함께 통합되거나 여러 소프트웨어 제품으로 패키징될 수 있다. .
"또는"에 대한 언급은 "또는"을 사용하여 기술된 임의의 용어가 기술된 용어들 중 하나, 둘 이상 및 모두를 나타낼 수 있도록 포괄적인 것으로 해석될 수 있다. "제1","제2","제3"등의 라벨은 반드시 순서를 나타내는 것을 의미하지 않으며 일반적으로 단지 유사하거나 유사한 아이템 또는 요소를 구별하기 위해 사용된다.
따라서, 주제의 특정 구현예가 개시되었다. 다른 구현예들은 다음의 청구항들의 범위 내에 있다. 일부 경우, 청구 범위에 인용된 동작들은 다른 순서로 수행될 수 있으며 여전히 바람직한 결과를 얻을 수 있다. 또한, 첨부된 도면에 기술된 프로세스들은 바람직한 결과를 얻기 위해, 도시된 특정 순서 또는 순차적 순서를 반드시 필요로 하는 것은 아니다. 특정 구현에서, 멀티 태스킹 또는 병렬 처리가 사용될 수 있다.
Claims (18)
- 시스템으로서,
메모리, 네트워크 인터페이스 및 프로세서를 포함하는 클라이언트 시뮬레이션 서버를 포함하고, 상기 프로세서는,
클라이언트 디바이스의 시뮬레이션을 실행하고;
상이한 클라이언트 디바이스들로 제공된 복수의 샘플링 인스턴스에 대해, 초기 로드 상태로부터 각각의 초기 사용자 인터렉션까지의 시간 길이에 기초하여 큐 포인트에 대한 사전 결정된 실행 시간 길이를 결정하고;
상기 클라이언트 디바이스의 시뮬레이션에서 애플리케이션을 상기 큐 포인트까지 실행하고, 상기 큐 포인트는 상기 사전 결정된 실행 시간 길이에 있으며;
상기 큐 포인트에서 애플리케이션의 실행을 일시 중지(suspend)하고;
상기 큐 포인트에서 일시 중지된, 중지된 실행 상태의 상기 애플리케이션의 표현(representation)을 상기 메모리에 저장하고;
상기 네트워크 인터페이스를 통해 클라이언트 디바이스로부터 상기 애플리케이션의 인터렉티브 인스턴스를 제공하라는 요청을 수신하고;
상기 애플리케이션의 중지된 실행 상태로부터, 상기 메모리에 저장된 표현을 사용하여 상기 요청에 응답하여 상기 애플리케이션의 재개된 인스턴스를 실행하고; 그리고
상기 네트워크 인터페이스를 통해 클라이언트 디바이스로 상기 애플리케이션의 재개된 인스턴스로부터의 출력을 제공하도록 구성된 것을 특징으로 하는 시스템. - 제1항에 있어서, 상기 사전 결정된 실행 시간 길이를 결정하는 것은,
모니터에 의해, 상기 클라이언트 시뮬레이션 서버에 의해 상기 각각의 복수의 상이한 클라이언트 디바이스들로 제공된 상기 복수의 샘플링 인스턴스를 모니터링하고, 각 샘플링 인스턴스는 초기 로드 상태와 관련되고;
상기 복수의 샘플링 인스턴스 각각에 대해, 각각의 초기 로드 상태로부터 각각의 초기 사용자 인터렉션까지의 대응하는 시간 길이를 식별하고; 그리고
상기 식별된 시간 길이에 기초하여 큐 포인트에 대한 상기 사전 결정된 실행 시간 길이를 결정하는 것을 특징으로 하는 시스템. - 제2항에 있어서, 상기 식별된 시간 길이의 산술 평균을 사용하여 큐 포인트에 대한 상기 사전 결정된 실행 시간 길이를 결정하는 것을 포함하는 특징으로 하는 시스템.
- 제2항에 있어서, 상기 식별된 시간 길이의 절삭 평균(trimmed mean)을 사용하여 큐 포인트에 대한 상기 사전 결정된 실행 시간 길이를 결정하는 것을 포함하는 것을 특징으로 하는 시스템.
- 제1항에 있어서, 상기 큐 포인트는 상기 애플리케이션이 사용자 인터렉션 옵션을 제시하는 프리젠테이션 단계(stage)인 것을 특징으로 하는 시스템.
- 제5항에 있어서, 상기 시스템은 사용자 인터렉션 옵션의 프리젠테이션을 검출하도록 구성된 시뮬레이션 모니터를 더 포함하는 것을 특징으로 하는 시스템.
- 제6항에 있어서, 상기 시뮬레이션 모니터는 광학 문자 인식을 사용하여 사용자 인터렉션 옵션의 표현을 검출하도록 구성되는 것을 특징으로 하는 시스템.
- 제1항에 있어서, 상기 클라이언트 시뮬레이션 서버의 프로세서는
상기 큐 포인트에서 클라이언트 디바이스의 시뮬레이션의 실행을 일시 중지함으로써 큐 포인트에서 애플리케이션의 실행을 중지하도록 구성되는 것을 특징으로 하는 시스템. - 제1항에 있어서, 상기 클라이언트 시뮬레이션 서버의 프로세서는,
상기 네트워크 인터페이스를 통해 클라이언트 디바이스로부터 클라이언트 디바이스 특성 기술자(descriptor)를 수신하고;
상기 클라이언트 디바이스 특성 기술자에 부합(conforming)하는 특성을 갖는 일반화된 클라이언트 디바이스에 대한 클라이언트 시뮬레이션을 선택하고; 그리고
상기 일반화된 클라이언트 디바이스에 대한 클라이언트 시뮬레이션을 사용하여 클라이언트 디바이스의 시뮬레이션을 실행하도록 구성된 것을 특징으로 하는 시스템. - 방법에 있어서,
프로세서를 포함하는 클라이언트 시뮬레이션 시스템에 의해, 클라이언트 디바이스의 시뮬레이션을 실행하는 단계;
상기 클라이언트 시뮬레이션 시스템에 의해 그리고 상이한 클라이언트 디바이스들로 제공된 복수의 샘플링 인스턴스에 대해, 초기 로드 상태로부터 각각의 초기 사용자 상호 작용까지의 시간 길이에 기초하여 큐 포인트에 대한 사전 결정된 실행 시간 길이를 결정하는 단계;
상기 클라이언트 시뮬레이션 시스템에 의해, 상기 클라이언트 디바이스의 시뮬레이션에서 애플리케이션을 상기 큐 포인트까지 실행하는 단계, 상기 큐 포인트는 상기 사전 결정된 실행 시간 길이에 있으며;
상기 큐 포인트에서 애플리케이션의 실행을 일시 중지하는 단계;
상기 클라이언트 시뮬레이션 시스템과 연관된 메모리에, 상기 큐 포인트에서 일시 중지된, 중지된 실행 상태의 상기 애플리케이션의 표현을 저장하는 단계;
네트워크를 통해 클라이언트 디바이스로부터, 상기 애플리케이션의 인터렉티브 인스턴스를 제공하라는 요청을 수신하는 단계;
상기 클라이언트 시뮬레이션 시스템에 의해, 상기 애플리케이션의 중지된 실행 상태로부터, 상기 메모리에 저장된 표현을 사용하여 상기 요청에 응답하는 상기 애플리케이션의 재개된 인스턴스를 실행하는 단계; 및
상기 네트워크를 통해 클라이언트 디바이스로 상기 애플리케이션의 재개된 인스턴스로부터의 출력을 제공하는 단계를 포함하는 것을 특징으로 하는 방법. - 제10항에 있어서, 상기 사전 결정된 실행 시간 길이를 결정하는 단계는,
상기 복수의 샘플링 인스턴스를 각각의 복수의 상이한 클라이언트 디바이스에 제공하는 단계, 각 샘플링 인스턴스는 초기 로드 상태와 연관되고;
상기 복수의 샘플링 인스턴스 각각에 대해, 각 초기로드 상태로부터 각각의 초기 사용자 인터렉션까지의 대응하는 시간 길이를 식별하는 단계; 및
상기 식별된 시간 길이에 기초하여 상기 큐 포인트에 대한 상기 사전 결정된 실행 시간 길이를 결정하는 단계를 포함하는 것을 특징으로 하는 방법. - 제11항에 있어서, 상기 식별된 길이의 산술 평균을 사용하여 상기 큐 포인트에 대한 상기 사전 결정된 실행 시간 길이를 결정하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제11항에 있어서, 상기 식별된 길이의 절삭 평균(trimmed mean)을 사용하여 상기 큐 포인트에 대한 상기 사전 결정된 실행 시간 길이를 결정하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제10항에 있어서, 상기 큐 포인트는
상기 애플리케이션이 사용자 인터렉션 옵션을 제공하는 프리젠테이션 단계(stage)인 것을 특징으로 하는 방법. - 제14항에 있어서, 상기 사용자 인터렉션 옵션의 프리젠테이션을 검출하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제14항에 있어서, 광학 문자 인식을 사용하여 상기 사용자 인터렉션 옵션의 프리젠테이션을 검출하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제10항에 있어서,
상기 클라이언트 디바이스의 시뮬레이션을 실행하는 단계는,
상기 네트워크를 통해 클라이언트 디바이스로부터 클라이언트 디바이스 특성 기술자(descriptor)를 수신하는 단계;
상기 수신된 클라이언트 디바이스 특성 기술자에 부합(conforming)하는 특성을 갖는 일반화된 클라이언트 디바이스에 대한 클라이언트 시뮬레이션을 선택하는 단계; 및
상기 일반화된 클라이언트 디바이스에 대한 클라이언트 시뮬레이션을 사용하여 상기 클라이언트 디바이스의 시뮬레이션을 실행하는 단계를 포함하는 것을 특징으로 하는 방법. - 비-일시적 컴퓨터 판독 가능 기록 매체로서,
명령들을 저장하여, 프로세서가 상기 명령들을 실행할 때, 컴퓨터로 하여금 제10항 내지 제17항 중 어느 한 항에 따른 방법을 실행하도록 한 것을 특징으로 하는 비-일시적 컴퓨터 판독 가능 기록 매체.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2016/061924 WO2018089033A1 (en) | 2016-11-14 | 2016-11-14 | Systems and methods for providing interactive streaming media |
USPCT/US2016/061924 | 2016-11-14 | ||
PCT/US2017/061399 WO2018089940A1 (en) | 2016-11-14 | 2017-11-13 | Systems and methods for providing interactive streaming media |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20180066897A KR20180066897A (ko) | 2018-06-19 |
KR102040786B1 true KR102040786B1 (ko) | 2019-11-06 |
Family
ID=57482507
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020187009569A KR102040786B1 (ko) | 2016-11-14 | 2017-11-13 | 인터렉티브 스트리밍 미디어를 제공하는 시스템 및 방법 |
Country Status (5)
Country | Link |
---|---|
US (2) | US20190079787A1 (ko) |
EP (1) | EP3345091B1 (ko) |
KR (1) | KR102040786B1 (ko) |
CN (1) | CN108337909A (ko) |
WO (2) | WO2018089033A1 (ko) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11165842B2 (en) * | 2013-10-25 | 2021-11-02 | Louis Gurtowski | Selective capture with rapid sharing of user or mixed reality actions and states using interactive virtual streaming |
GB2559123A (en) * | 2017-01-24 | 2018-08-01 | Sony Interactive Entertainment Inc | Interaction apparatus and method |
US11310540B2 (en) * | 2017-11-10 | 2022-04-19 | Qualcomm Incorporated | Interfaces between dash aware application and dash client for service interactivity support |
CN111433743B (zh) * | 2017-12-12 | 2022-05-20 | 荣耀终端有限公司 | 一种app远程控制方法及相关设备 |
CN112867989B (zh) * | 2018-09-04 | 2024-07-02 | 阿韦瓦软件有限责任公司 | 基于流的组成以及监视服务器系统和方法 |
US10708382B2 (en) * | 2018-11-08 | 2020-07-07 | Citrix Systems, Inc. | Systems and methods for latency masking via prefix caching |
US11247130B2 (en) * | 2018-12-14 | 2022-02-15 | Sony Interactive Entertainment LLC | Interactive objects in streaming media and marketplace ledgers |
US20220070238A1 (en) * | 2020-08-28 | 2022-03-03 | Tmrw Foundation Ip S. À R.L. | System and method for the delivery of applications within a virtual environment |
US11947783B2 (en) * | 2021-01-25 | 2024-04-02 | Google Llc | Undoing application operation(s) via user interaction(s) with an automated assistant |
EP4068093A1 (en) * | 2021-03-31 | 2022-10-05 | Vodafone Group Services Limited | Remote computing resource execution |
CN113301393B (zh) * | 2021-04-22 | 2023-06-30 | 深圳市鹰硕智能科技有限公司 | 流媒体数据的播放与互动方法、装置、系统及存储介质 |
US11709691B2 (en) * | 2021-09-01 | 2023-07-25 | Sap Se | Software user assistance through image processing |
EP4413726A1 (en) * | 2021-10-07 | 2024-08-14 | Demostack, Inc. | Dynamic recorder for demonstrations of web-based software applications |
US12019699B2 (en) * | 2021-10-07 | 2024-06-25 | Demostack, Inc. | Visual recorder for demonstrations of web-based software applications |
US11868788B2 (en) * | 2021-11-04 | 2024-01-09 | Here Global B.V. | Method and apparatus for application plug-in management |
CN114077375B (zh) * | 2021-11-25 | 2023-05-05 | 北京字跳网络技术有限公司 | 目标对象的展示方法及装置、电子设备及存储介质 |
US20230281122A1 (en) * | 2022-03-04 | 2023-09-07 | Western Digital Technologies, Inc. | Data Storage Device and Method for Host-Determined Proactive Block Clearance |
CN114836904B (zh) * | 2022-04-26 | 2023-11-03 | 大连华阳新材料科技股份有限公司 | 自动调整成网两边均匀性系统及其调整方法 |
US11909807B2 (en) | 2022-05-18 | 2024-02-20 | Demostack, Inc. | Local recording for demonstration of web-based software applications |
KR102653698B1 (ko) * | 2023-10-25 | 2024-04-02 | 스마일샤크 주식회사 | 점자패드와 어플리케이션의 연동 범용성 확보 시스템 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080109528A1 (en) | 2004-12-06 | 2008-05-08 | Omnifone Limited | Method of Providing Content to a Wireless Computing Device |
JP2010533901A (ja) * | 2007-06-22 | 2010-10-28 | マイ スクリーン モバイル インコーポレイテッド | 携帯機器広告のシステム及び方法 |
US20100325278A1 (en) | 2009-06-22 | 2010-12-23 | Red Hat Israel, Ltd. | Methods for automatically launching a virtual machine associated with a client during startup |
US20120291056A1 (en) | 2011-05-11 | 2012-11-15 | CSC Holdings, LLC | Action enabled automatic content preview system and method |
US20150113471A1 (en) | 2013-10-17 | 2015-04-23 | Blackberry Limited | Method and apparatus for displaying a preview of an application to a user |
US20160055017A1 (en) * | 2014-08-23 | 2016-02-25 | Vmware, Inc. | Application publishing using memory state sharing |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080306818A1 (en) * | 2007-06-08 | 2008-12-11 | Qurio Holdings, Inc. | Multi-client streamer with late binding of ad content |
CN100534172C (zh) * | 2007-06-21 | 2009-08-26 | 腾讯科技(深圳)有限公司 | 一种在网络电视直播节目中插播广告的方法及系统 |
US20090099911A1 (en) * | 2007-10-11 | 2009-04-16 | Sony Corporation | Systems and Methods for Managing Advertising Content Corresponding to Streaming Media Content |
US20120284632A1 (en) | 2011-05-06 | 2012-11-08 | Cisco Technology, Inc. | Integrated Rendering of Streaming Media in Virtualized Desktop Environment |
US10248184B2 (en) * | 2011-11-09 | 2019-04-02 | Qualcomm Incorporated | Sensor API framework for cloud based applications |
CN102968737A (zh) * | 2012-11-27 | 2013-03-13 | 辜进荣 | 基于游戏的广告推送方法 |
US9971616B2 (en) * | 2013-02-26 | 2018-05-15 | Red Hat Israel, Ltd. | Virtual machine suspension |
US20140366024A1 (en) * | 2013-06-07 | 2014-12-11 | American Megatrends, Inc. | Methods, Devices and Computer Readable Storage Devices for Emulating a Light Sensor in a Guest Operating System from a Host Operating System |
US9547607B2 (en) * | 2013-06-27 | 2017-01-17 | Microsoft Technology Licensing, Llc | Brokering application access for peripheral devices |
US9687745B2 (en) * | 2013-08-22 | 2017-06-27 | Riot Games, Inc. | Systems and methods that enable customizable teams for multi-player online games |
WO2015113301A1 (en) * | 2014-01-30 | 2015-08-06 | Microsoft Technology Licensing, Llc | Automatic insights for spreadsheets |
CN104038473B (zh) * | 2014-04-30 | 2018-05-18 | 北京音之邦文化科技有限公司 | 用于插播音频广告的方法、装置、设备和系统 |
US10693946B2 (en) * | 2014-09-16 | 2020-06-23 | Amazon Technologies, Inc. | Instance backed mobile devices |
US20160182954A1 (en) * | 2014-12-18 | 2016-06-23 | Rovi Guides, Inc. | Methods and systems for generating a notification |
US20160266915A1 (en) * | 2015-03-10 | 2016-09-15 | Giovanni Morelli | Systems and Methods for Providing an Emulation of a Computer Product |
WO2017011336A1 (en) * | 2015-07-10 | 2017-01-19 | E.&J. Gallo Winery | System and method for dispensing a beverage |
WO2017058539A1 (en) * | 2015-09-30 | 2017-04-06 | Sony Interactive Entertainment America Llc | Multi-user demo streaming service for cloud gaming |
US10838778B2 (en) * | 2016-02-04 | 2020-11-17 | Mobile Tappestry, LLC | Hybrid application system to utilize native device features of a mobile device |
US20170317948A1 (en) * | 2016-04-28 | 2017-11-02 | Microsoft Technology Licensing, Llc | Hosting apps with native capabilities |
-
2016
- 2016-11-14 WO PCT/US2016/061924 patent/WO2018089033A1/en active Application Filing
- 2016-11-14 US US15/765,179 patent/US20190079787A1/en not_active Abandoned
-
2017
- 2017-11-13 KR KR1020187009569A patent/KR102040786B1/ko active IP Right Grant
- 2017-11-13 CN CN201780003445.7A patent/CN108337909A/zh active Pending
- 2017-11-13 EP EP17801583.0A patent/EP3345091B1/en active Active
- 2017-11-13 WO PCT/US2017/061399 patent/WO2018089940A1/en unknown
-
2020
- 2020-03-13 US US16/818,340 patent/US11068290B2/en active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080109528A1 (en) | 2004-12-06 | 2008-05-08 | Omnifone Limited | Method of Providing Content to a Wireless Computing Device |
JP2010533901A (ja) * | 2007-06-22 | 2010-10-28 | マイ スクリーン モバイル インコーポレイテッド | 携帯機器広告のシステム及び方法 |
US20100325278A1 (en) | 2009-06-22 | 2010-12-23 | Red Hat Israel, Ltd. | Methods for automatically launching a virtual machine associated with a client during startup |
US20120291056A1 (en) | 2011-05-11 | 2012-11-15 | CSC Holdings, LLC | Action enabled automatic content preview system and method |
US20150113471A1 (en) | 2013-10-17 | 2015-04-23 | Blackberry Limited | Method and apparatus for displaying a preview of an application to a user |
US20160055017A1 (en) * | 2014-08-23 | 2016-02-25 | Vmware, Inc. | Application publishing using memory state sharing |
Also Published As
Publication number | Publication date |
---|---|
US20190079787A1 (en) | 2019-03-14 |
WO2018089033A1 (en) | 2018-05-17 |
WO2018089940A1 (en) | 2018-05-17 |
EP3345091B1 (en) | 2020-08-19 |
US11068290B2 (en) | 2021-07-20 |
US20200218554A1 (en) | 2020-07-09 |
KR20180066897A (ko) | 2018-06-19 |
CN108337909A (zh) | 2018-07-27 |
EP3345091A1 (en) | 2018-07-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102040786B1 (ko) | 인터렉티브 스트리밍 미디어를 제공하는 시스템 및 방법 | |
US11064267B2 (en) | Systems and methods for providing interactive streaming media | |
US11763343B2 (en) | Systems and methods for validating interaction with third-party interactive media | |
US9451043B2 (en) | Remote virtualization of mobile apps | |
US11403124B2 (en) | Remotely emulating computing devices | |
JP6538776B2 (ja) | クラウドベースのゲームスライス生成および即時再生との無摩擦ソーシャルシェアリング | |
US20150082239A1 (en) | Remote Virtualization of Mobile Apps with Transformed Ad Target Preview | |
US10673916B1 (en) | Executing applications in remotely emulated computing devices | |
CN107045508B (zh) | 应用程序的处理方法和装置 | |
CA2843152C (en) | Remotely preconfiguring a computing device | |
WO2022057722A1 (zh) | 程序试用方法、系统、装置、设备及介质 | |
US9392047B1 (en) | Facilitating application compatibility across devices | |
US8972479B2 (en) | Methods and apparatus for online program application execution between servers | |
US20240370358A1 (en) | Selective testing of pre-compiled extended reality operating systems | |
KR20240069171A (ko) | 게임 어플리케이션에서 광고를 제공하는 장치 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |