KR20240036644A - 스트리밍 애플리케이션을 위한 다중 시도 인코딩 오퍼레이션 - Google Patents
스트리밍 애플리케이션을 위한 다중 시도 인코딩 오퍼레이션 Download PDFInfo
- Publication number
- KR20240036644A KR20240036644A KR1020247005803A KR20247005803A KR20240036644A KR 20240036644 A KR20240036644 A KR 20240036644A KR 1020247005803 A KR1020247005803 A KR 1020247005803A KR 20247005803 A KR20247005803 A KR 20247005803A KR 20240036644 A KR20240036644 A KR 20240036644A
- Authority
- KR
- South Korea
- Prior art keywords
- frame
- encoded
- quantization parameter
- complexity
- encoding
- Prior art date
Links
- 238000013139 quantization Methods 0.000 claims abstract description 111
- 238000000034 method Methods 0.000 claims description 104
- 230000004044 response Effects 0.000 claims description 18
- 230000005540 biological transmission Effects 0.000 claims description 12
- 230000008569 process Effects 0.000 description 10
- 230000008901 benefit Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 8
- 238000012545 processing Methods 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 6
- 238000009877 rendering Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000006835 compression Effects 0.000 description 3
- 238000007906 compression Methods 0.000 description 3
- 238000009795 derivation Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000033001 locomotion Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 230000002730 additional effect Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000012905 input function Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/124—Quantisation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/134—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
- H04N19/136—Incoming video signal characteristics or properties
- H04N19/14—Coding unit complexity, e.g. amount of activity or edge presence estimation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/134—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
- H04N19/146—Data rate or code amount at the encoder output
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
- H04N19/17—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
- H04N19/172—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a picture, frame or field
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/189—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding
- H04N19/192—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding the adaptation method, adaptation tool or adaptation type being iterative or recursive
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/189—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding
- H04N19/196—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding being specially adapted for the computation of encoding parameters, e.g. by averaging previously computed encoding parameters
- H04N19/197—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding being specially adapted for the computation of encoding parameters, e.g. by averaging previously computed encoding parameters including determination of the initial value of an encoding parameter
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Computing Systems (AREA)
- Theoretical Computer Science (AREA)
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
Abstract
하나 이상의 게임 프레임(250)을 게임 스트림(108)으로 인코딩하기 위해 다중 시도 인코딩 오퍼레이션(300)이 구현된다. 다중 시도 인코딩 오퍼레이션(300)은 현재 프레임(305)에 대한 초기 양자화 파라미터(226)를 결정하는 것을 포함한다. 결정된 초기 양자화 파라미터(226)로부터, 하나 이상의 대체 양자화 파라미터(228)가 도출된다. 그러면 다중 인코더(206)는 각각 초기 양자화 파라미터(226) 및 대체 양자화 파라미터(228)에 기초하여 현재 프레임에 대해 다중 인코딩(325)을 수행하여 복수의 인코딩된 프레임을 생성한다. 적용 가능한 인코딩된 프레임(335)은 스트리밍 애플리케이션에 따라 복수의 인코딩된 프레임으로부터 선택된다. 적용 가능한 인코딩된 프레임(335)은 게임 스트림(108)의 일부로서 클라이언트 시스템(112)에 전송된다.
Description
클라우드 기반 게임 플랫폼에는 로컬 클라이언트 장치에서 비디오 게임 애플리케이션을 쉽게 플레이할 수 있도록 원격 서버에서 비디오 게임 애플리케이션의 일부 또는 전체를 실행하는 것이 포함된다. 원격 서버는 비디오 게임 애플리케이션 실행에서 렌더링된 오디오 및 비디오를 네트워크를 통해 로컬 클라이언트 장치로 스트리밍하는 오디오 및 비디오로 제공한다. 이러한 오디오 및 비디오 스트림을 제공할 때 원격 서버는 다양한 인코더 오퍼레이션을 사용하여 게임 프레임과 오디오를 스트리밍하기 전에 실시간으로 압축한다. 지연 시간이 짧은 클라우드 게임 애플리케이션의 경우 인코더 오퍼레이션이 게임 프레임을 여러 비트로 압축하여 스트림에 사용 가능한 네트워크에서 허용하는 것보다 더 많은 대역폭이 필요하지 않도록 하는 것이 바람직하다.
약간의 지연이 허용되는 일반 비디오 스트리밍 애플리케이션과 달리 클라우드 기반 게임에서는 실시간 상호 작용이 유지되어야 한다. 이 문제를 해결하기 위해, 일부 클라우드 기반 게임 플랫폼에서는 모든 프레임을 현재 사용 가능한 네트워크 대역폭과 일치하는 목표 프레임 크기에 매우 가깝게 인코딩하도록 요구한다. 목표 프레임 크기가 아닌 다른 크기로 프레임을 인코딩하면 언더슈팅(허용된 것보다 적은 비트가 발생함) 또는 오버슈팅(허용된 것보다 더 많은 비트가 발생함)이 발생할 수 있으며, 오버슈팅은 잠재적으로 게임 경험을 저하시키는 패킷 손실 및 지연으로 이어질 수 있다.
예시적인 실시예에 따르면, 컴퓨터로 구현되는 방법은 프레임 세트의 제1 프레임과 연관된 초기 양자화 파라미터를 결정하는 단계를 포함할 수 있다. 추가적으로, 방법은 초기 양자화 파라미터에 기초하여 제1 프레임에 대한 대체 양자화 파라미터를 도출하는 단계를 포함할 수 있다. 따라서, 대체 양자화를 결정하기 위한 시작 값으로서 초기 양자화 파라미터를 사용하여 제1 프레임에 대한 대체 양자화 파라미터가 도출될 수 있다. 이는 예를 들어, 하나 이상의 대체 양자화 파라미터를 결정하기 위해 제1 프레임에 대한 초기 양자화 파라미터에 추가되거나 감산될 하나 이상의 델타(델타 값)를 결정하는 것을 포함할 수 있다. 방법은 또한 제1 인코딩된 프레임을 생성하기 위해 초기 양자화 파라미터에 기초하여 제1 프레임의 제1 인코딩과 제2 인코딩된 프레임을 생성하기 위해 대체 양자화 파라미터에 기초하여 제1 프레임의 제2 인코딩 모두를 수행하는 단계를 포함할 수 있다. 따라서 제1 및 제2 인코딩 모두는 인코딩 오퍼레이션에서 초기 양자화 파라미터 또는 대체 양자화 파라미터를 각각 사용함으로써 수행될 수 있다. 방법은 제1 인코딩된 프레임과 제2 인코딩된 프레임을 목표 프레임 크기로 비교한 것에 응답하여 인코딩된 게임 스트림의 일부로서 전송하기 위해 제1 인코딩된 프레임과 제2 인코딩된 프레임 사이를 선택하는 단계를 추가로 포함할 수 있다. 또한, 방법은 인코딩된 게임 스트림을 전송하는 단계를 포함할 수 있다. 개시된 솔루션에 기초하여, 결과적인 게임 스트림에 포함시키기 위해 복수의 인코딩된 프레임으로부터 적용 가능한 인코딩된 프레임을 선택하는 것을 포함하는 다중 시도 인코딩 프로세스가 제안될 수 있다.
방법에서, 초기 양자화 파라미터를 결정하는 단계는 제1 패스 인코딩된 프레임을 생성하기 위해 제1 프레임에 대해 제1 패스 인코딩을 수행하는 단계 및 제1 패스 인코딩된 프레임을 사용하여 초기 양자화 파라미터를 결정하는 단계를 포함할 수 있다. 또한, 방법은 제1 패스 인코딩된 프레임의 통계에 기초하여 제1 프레임에 대한 추정된 복잡도를 결정하는 단계 및 추정된 복잡도에 기초하여 초기 양자화 파라미터를 결정하는 단계를 포함할 수 있다. 따라서, 방법은 프레임과 연관된 하나 이상의 참조 프레임과는 다른 프레임 내의 정보의 양 또는 값(예: 프레임을 인코딩하는 데 사용됨)을 나타내는 제1 패스 인코딩된 프레임의 결정된 통계 중 하나의 파라미터에 의해 제1 프레임에 대한 추정된 복잡도를 결정하는 단계를 포함할 수 있다. 제1 패스 인코딩된 프레임의 결정된 통계는 예를 들어, 제1 패스 인코딩된 프레임의 비트 크기, 제1 패스 인코딩된 프레임의 에너지, 제1 패스 인코딩된 프레임의 신호 대 잡음비, 또는 이들의 임의의 조합을 포함할 수 있다. 그러면 초기 양자화 파라미터는 추정된 복잡도에 따라 달라진다.
또한, 방법에서, 대체 양자화 파라미터를 도출하는 것은 프레임 세트의 적어도 하나의 다른 프레임과 연관된 이력 복잡도를 결정하고 이력 복잡도를 제1 프레임의 추정된 복잡도와 비교하는 것을 포함할 수 있다. 이력 복잡도는 예를 들어 프레임 세트 중 이전에 인코딩된 적어도 하나의 프레임(따라서 제1 프레임에 선행하는 적어도 하나의 인코딩된 프레임)의 복잡도에 의해 결정될 수 있다. 예시적인 실시예에서, 결정된 이력 복잡도는 프레임 세트의 이전에 인코딩된 프레임들의 하나 이상의 이력 복잡도에 대한 평균으로서 계산되고 이 평균을 현재 인코딩될 제1 프레임의 추정된 복잡도와 비교할 수 있다.
또한, 방법은 제1 프레임의 추정된 복잡도에 대한 이력 복잡도의 비교에 응답하여 제1 후보 대체 양자화 파라미터와 제2 후보 대체 양자화 파라미터 사이에서 대체 양자화 파라미터를 선택하는 단계를 포함할 수 있다. 예로서, 제1 후보 대체 양자화 파라미터는 초기 양자화 파라미터보다 클 수 있고, 제2 후보 대체 양자화 파라미터는 초기 양자화 파라미터보다 작을 수 있다. 또한, 방법은 이력 복잡도가 제1 프레임의 추정된 복잡도보다 크다는 것에 응답하여 제2 대체 양자화 파라미터를 선택하는 단계를 포함할 수 있다. 추가적으로, 방법은 이력 복잡도가 제1 프레임의 추정된 복잡도보다 작다는 것에 응답하여 제1 대체 양자화 파라미터를 선택하는 단계를 포함할 수 있다.
다른 예시적인 실시예에서, 컴퓨터로 구현되는 방법은 스트리밍 애플리케이션에 대한 프레임 세트 중 제1 프레임에 대해 제1 패스 인코딩을 수행하는 단계 및 제1 패스 인코딩에 기초하여, 즉 제1 패스 인코딩의 결과를 사용하여 초기 양자화 파라미터를 결정하는 단계를 포함할 수 있다. 방법은 또한 프레임 세트 중 적어도 하나의 다른 프레임에 기초하여 제1 프레임에 대한 대체 양자화 파라미터를 도출하는 단계를 포함할 수 있다. 예를 들어, 프레임 세트 중 적어도 하나의 다른 프레임의 인코딩 결과를 고려하여 대체 양자화를 결정하기 위한 시작 값으로서 초기 양자화 파라미터를 사용하여 제1 프레임에 대한 대체 양자화 파라미터가 도출될 수 있다. 이는 예를 들어, 제1 프레임의 하나 이상의 차이를 프레임 세트 중 적어도 하나의 이전에 인코딩된 프레임에 대해 결정하고, 결정된 하나 이상의 차이(예: 복잡도의 차이)에 따라 초기 양자화 파라미터보다 높거나 낮은 대체 양자화 파라미터를 계산하는 것을 포함할 수 있다. 추가적으로, 방법은 제1 인코딩된 프레임을 생성하기 위해 초기 양자화 파라미터를 사용하여 제1 프레임의 제1 인코딩을 수행하는 단계 및 제2 인코딩된 프레임을 생성하기 위해 대체 양자화 파라미터에 기초하여 제1 프레임의 제2 인코딩을 수행하는 단계를 포함할 수 있다. 또한, 방법은 스트리밍 애플리케이션에 기초하여 인코딩된 게임 스트림의 일부로서 전송하기 위해 제1 인코딩된 프레임과 제2 인코딩된 프레임 중에서 선택하는 단계를 포함할 수 있다. 또한, 방법은 인코딩된 게임 스트림을 전송하는 단계를 포함할 수 있다.
방법에서, 제1 패스 인코딩에 기초하여 초기 양자화 파라미터를 결정하는 것은 제1 패스 인코딩에 기초하여 제1 프레임에 대한 추정된 복잡도를 결정하는 것을 포함할 수 있다. 추가적으로, 방법은 적어도 하나의 다른 프레임과 연관된 이력 복잡도를 결정하고 추정된 복잡도를 이력 복잡도와 비교하는 단계를 포함할 수 있다. 이력 복잡도는 예를 들어 프레임 세트 중 이전에 인코딩된 적어도 하나의 프레임(따라서 제1 프레임에 선행하는 적어도 하나의 인코딩된 프레임)의 복잡도에 의해 결정될 수 있다. 예시적인 실시예에서, 결정된 이력 복잡도는 프레임 세트의 이전에 인코딩된 프레임들의 하나 이상의 이력 복잡도에 대한 평균으로서 계산되고 이 평균을 현재 인코딩될 제1 프레임의 추정된 복잡도와 비교할 수 있다.
또한, 방법은 추정된 복잡도보다 큰 이력 복잡도에 응답하여 초기 양자화 파라미터보다 작은 대체 양자화 파라미터에 대한 값을 결정하는 단계를 포함할 수 있다. 또한, 방법은 이력 복잡도가 추정된 복잡도보다 작다는 것에 응답하여 초기 양자화 파라미터보다 큰 대체 양자화 파라미터에 대한 값을 결정하는 단계를 포함할 수 있다.
방법에서, 스트리밍 애플리케이션은 목표(프레임) 크기(예를 들어, 비트 단위), 목표 효율성, 목표 신뢰성 또는 목표 대기 시간 중 적어도 하나를 포함할 수 있다. 스트리밍 애플리케이션의 경우 하나 이상의 요구 사항, 설정 또는 기본 설정은 인코딩된 프레임에 대한 목표 품질, 인코딩된 프레임에 대한 목표 효율성, 인코딩된 게임 스트림에 대한 목표 신뢰성, 또는 인코딩된 게임 스트림에 대한 목표 대기 시간과 같이 미리 결정될 수 있다. 예를 들어 결과적으로 인코딩된 게임 스트림이 스트리밍 애플리케이션의 이러한 하나 이상의 요구 사항, 설정 또는 기본 설정을 충족하는지 확인하는 데 도움이 되고, 각 프레임은 전송률 제어 방식에 따라 인코딩되어 각 인코딩된 프레임이 미리 결정된 목표 비트 크기에 가까운 크기로 압축될 수 있다. 예시적인 실시예에서, 이는 목표 프레임 크기와 허용오차 사이의 크기를 갖는 제1 및 제2 프레임에 대해 결정된 프레임 크기에 따라 제1 인코딩된 프레임과 제2 인코딩된 프레임 사이에서 선택하게 될 수 있다. 예를 들어, 방법에서, 스트리밍 애플리케이션에 기초하여 인코딩된 스트림으로 전송하기 위해 제1 인코딩된 프레임과 제2 인코딩된 프레임 사이를 선택하는 것은 스트리밍 애플리케이션에 기초하여 목표 프레임 크기를 결정하고 제1 및 제2 인코딩된 프레임 각각을 목표 프레임 크기와 비교하는 단계를 포함한다. 인코딩된 스트림으로 전송을 위해 제1 인코딩된 프레임과 제2 인코딩된 프레임 사이를 선택하는 것은 또한 이용 가능한 대역폭에 기초하여 허용된 비트 수를 초과하지 않는 인코딩된 프레임을 선택하는 것을 포함할 수 있다.
방법에서, 대체 양자화 파라미터는 복수의 대체 양자화 파라미터 중 하나일 수 있다. 이에 따라, 제1 프레임을 인코딩하기 위한 초기 양자화 파라미터에 기초하여 복수의 대체 양자화 파라미터가 도출될 수 있다. 또한, 방법은 프레임 세트에 따라 복수의 대체 양자화 파라미터를 도출하는 단계를 포함할 수 있다. 예시적인 실시예에서, 프레임 세트의 서로 다른 이전에 인코딩된 프레임에 기초하여 서로 다른, 특히 2개 이상의 대체 양자화 파라미터가 계산될 수 있다.
추가적으로, 인코딩된 게임 스트림은 목표 비트레이트에 기초하여 인코딩될 수 있다. 방법은 추가적으로 제1 및 제2 인코딩된 프레임 각각을 목표 비트레이트와 비교하는 단계, 그리고 제1 및 제2 인코딩된 프레임 각각의 목표 비트레이트와의 비교에 응답하여 제1 인코딩된 프레임과 제2 인코딩된 프레임 중에서 선택하는 단계를 추가로 포함할 수 있다.
일반적으로 인코딩된 게임 스트림은 게임 세션과 연결될 수 있다. 또한, 제1 프레임은 게임 세션과 연관된 가상 환경의 적어도 일부를 나타낼 수 있다. 추가적으로, 인코딩된 게임 스트림은 게임 세션과 연관된 클라이언트 장치로 전송될 수 있다.
본 명세서의 방법은 인코딩된 게임 스트림을 디코딩하여 디코딩된 게임 스트림을 생성하는 단계와 디코딩된 게임 스트림을 표시하는 단계를 더 포함할 수 있다. 일반적으로, 제1 인코딩과 제2 인코딩은 모두 일정 시간(미리결졍된 기간) 내에 수행될 수 있다. 또한, 제1 인코딩과 제2 인코딩이 동시에 수행될 수도 있다. 또한, 본 명세서의 방법은 선택된 인코딩된 프레임의 복잡도를 결정하는 단계 및 복잡도의 표현을 메모리 버퍼에 저장하는 단계를 포함할 수 있다. 또한, 본 명세서의 방법은 저장된 복잡도의 표현을 사용하여 프레임 세트의 제2 프레임에 대해 제2(다중 시도) 인코딩 오퍼레이션을 수행하는 단계를 포함할 수 있다. 본 명세서의 방법은 선택된 인코딩된 프레임의 적용 가능한 양자화 파라미터를 결정하는 단계와 적용 가능한 양자화 파라미터를 메모리 버퍼에 저장하는 단계를 더 포함할 수 있다. 본 명세서의 방법은 또한 저장된 적용 가능한 양자화 파라미터를 사용하여 프레임 세트의 제2 프레임에 대해 제2(다중 시도) 인코딩 오퍼레이션을 수행하는 단계를 포함할 수 있다. 실시예에 따르면, 선택된(적용 가능한) 인코딩된 프레임에 대한 복잡도의 표현은 게임 프레임 세트의 후속 프레임의 인코딩에서 이력 복잡도로 사용하기 위해 결정되어 메모리 버퍼에 저장될 수 있다. 마찬가지로, 실시예에서, 선택된 인코딩된 프레임과 연관된 선택된 양자화 파라미터(즉, 선택된 인코딩된 프레임을 인코딩하는 데 사용되는 양자화 파라미터)는 게임 프레임 세트의 후속 프레임을 인코딩할 때 과거 양자화 파라미터로 사용하기 위해 메모리 버퍼에 저장된다.
예시적인 실시예에 따르면, 시스템은 하나 이상의 프로세서 및 하나 이상의 프로세서에 연결된 메모리를 포함할 수 있다. 메모리는 본 문서에 개시된 방법을 수행하기 위해 하나 이상의 프로세서를 조작하도록 구성된 실행 가능한 명령어를 저장할 수 있다.
추가적인 예시적 실시예에서, 시스템은 네트워크에 결합 가능한 네트워크 인터페이스 및 네트워크 인터페이스에 결합된 인코더를 포함할 수 있다. 시스템은 본 문서에 개시된 방법을 수행하도록 구성될 수 있다.
본 개시 내용은 첨부된 도면을 참조함으로써 당업자에게 더 잘 이해될 수 있으며, 그 수많은 특징 및 장점이 명백해진다. 서로 다른 도면에서 동일한 참조 기호를 사용하는 것은 유사하거나 동일한 항목을 나타낸다.
도 1은 일부 실시예에 따른 다중 시도 인코딩 기술을 사용하는 클라우드 기반 게임 시스템의 블록도이다.
도 2는 일부 실시예에 따라 클라우드 기반 게임 시스템 내에서 프레임을 인코딩하고 스트리밍하도록 구성된 컴퓨팅 장치의 블록도이다.
도 3은 일부 실시예에 따른 프레임 세트의 프레임의 다중 시도 인코딩 방법을 도시하는 흐름도이다.
도 4는 일부 실시예에 따른 다중 시도 인코딩을 위한 초기 양자화 파라미터의 예시적인 결정을 도시하는 흐름도이다.
도 5는 일부 실시예에 따른 다중 시도 인코딩을 위해 적용 가능한 인코딩된 프레임의 예시적인 선택을 나타내는 흐름도이다.
도 6은 일부 실시예에 따른 다중 시도 인코딩 프로세스의 예를 도시하는 흐름도이다.
도 1은 일부 실시예에 따른 다중 시도 인코딩 기술을 사용하는 클라우드 기반 게임 시스템의 블록도이다.
도 2는 일부 실시예에 따라 클라우드 기반 게임 시스템 내에서 프레임을 인코딩하고 스트리밍하도록 구성된 컴퓨팅 장치의 블록도이다.
도 3은 일부 실시예에 따른 프레임 세트의 프레임의 다중 시도 인코딩 방법을 도시하는 흐름도이다.
도 4는 일부 실시예에 따른 다중 시도 인코딩을 위한 초기 양자화 파라미터의 예시적인 결정을 도시하는 흐름도이다.
도 5는 일부 실시예에 따른 다중 시도 인코딩을 위해 적용 가능한 인코딩된 프레임의 예시적인 선택을 나타내는 흐름도이다.
도 6은 일부 실시예에 따른 다중 시도 인코딩 프로세스의 예를 도시하는 흐름도이다.
여기에 설명된 기술과 시스템은 스트리밍 애플리케이션의 요구 사항(requirements), 설정(settings) 및 기본설정(preferences)을 유지하면서 하나 이상의 서버에서 클라이언트 시스템으로 비디오 스트림을 제공해야 하는 요구 사항을 해결한다. 특히, 여기에 설명된 이러한 기술 및 시스템은 스트리밍 애플리케이션에 기초하여 프레임 세트의 각 프레임에 대해 적용 가능한 양자화 파라미터를 결정하기 위해 다중 시도 인코딩 오퍼레이션(multi-try encoding operation)을 사용하여 서버에서 프레임 세트를 인코딩하는 것을 허용한다. 결과 비디오 스트림이 스트리밍 애플리케이션의 요구 사항, 설정 및 기본 설정을 더 잘 충족하는지 확인하기 위해, 각 프레임의 초기 양자화 파라미터는 제1 패스 인코딩 중에 결정된 예상 복잡도(complexity)를 기반으로 결정된다. 초기 양자화 파라미터로부터, 프레임 세트로부터 이전에 인코딩된 프레임의 인코딩 이력(encoding history)을 기반으로 각 프레임에 대해 추가적인 대체 양자화 파라미터가 도출(derived)된다. 그런 다음 인코더는 각각의 초기 및 대체 양자화 파라미터에 따라 각 프레임의 다중 인코딩을 수행하여 다중 인코딩된 프레임을 생성한다. 그런 다음 스트리밍 애플리케이션에 따라 이러한 인코딩된 프레임 중에서 적용 가능한 인코딩된 프레임이 선택된다. 이러한 방식으로 각 프레임에는 스트리밍 애플리케이션의 요구 사항, 설정 및 기본 설정을 더 잘 충족하는 비디오 스트림을 생성하는 데 필요한 비트 수가 더 정확하게 할당된다.
이해를 돕기 위해, 본 개시의 기술은 클라우드 게임 시스템의 예시적인 컨텍스트에서 설명된다. 클라우드 기반 또는 다른 원격 서버는 해당 서버 또는 관련 서버에서 실행되는 비디오 게임 인스턴스의 시각적 콘텐츠를 나타내는 비디오 프레임 스트림을 렌더링한 다음 하나 이상의 네트워크를 통해 하나 이상의 클라이언트 장치로 전송하기 위해 인코딩된 렌더링된 게임 프레임의 스트림을 나타내는 비트스트림을 생성하기 위해 여기에 설명된 다중 시도 인코딩 프로세스를 사용하여 각 프레임을 인코딩한다. 그러나, 여기에 설명된 시스템 및 기술은 이 예시적인 컨텍스트에 제한되지 않고, 대신 여기에 제공된 가이드라인을 사용하여 다양한 비디오 스트림 인코딩/디코딩 시스템 중 하나로 구현될 수 있다는 것이 이해될 것이다.
도 1은 일부 실시예에 따른 싱글 플레이어 또는 멀티 플레이어(대규모 멀티 플레이어 포함) 게임을 위한 클라우드 기반 게임 시스템(100)을 도시한다. 클라우드 기반 게임 시스템(100)은 하나 이상의 서버(102)를 포함하며, 각 서버(102)는 적어도 하나의 네트워크(110)에 의해 하나 이상의 클라이언트 시스템(112)에 통신 가능하게 결합된다. 네트워크(110)는 임의의 서버(102)와 클라이언트 시스템(112) 사이에서 데이터의 전송 및 수신을 허용하도록 구성되며, 예를 들어 이더넷, 인터넷, 와이파이(Wi-Fi) 또는 이들의 임의의 조합과 같은 유선 및 무선 네트워크를 포함한다. 실시예에서, 각각의 서버(102)는 고대역폭, 저지연 서버간 메시징 버스를 통해 통신적으로 상호연결된다. 서버(102)는 일반적으로 물리적 근접성을 통한 전송 대기 시간을 줄이기 위해 지리적 영역에 걸쳐 하나 이상의 데이터 센터에 분산된다. 도시된 실시예에서는 4개의 클라이언트 시스템(112-1, 112-2, 112-3, 112-4)을 지원하는 3개의 서버(102-1, 102-2, 102-3)가 제시되어 있지만, 다른 실시예에서는 임의의 수의 서버는 원하는 수의 클라이언트 장치를 지원하도록 구현될 수 있다. 전형적인 실제 구현에서, 서버(102)의 수와 클라이언트 시스템(112)의 수는 일반적으로 도 1의 예에 제시된 것보다 상당히 높을 것이라는 점을 이해할 것이다.
도시된 실시예에서, 각 서버(102)는 예를 들어 클라우드 서버, 가상 서버, 또는 하나 이상의 클라이언트 시스템(112)에서 실행되는 하나 이상의 클라이언트 게임 세션을 지원하도록 구성된 이들의 임의의 조합과 같은 컴퓨팅 장치를 포함한다. 본 명세서에서 사용되는 "클라이언트 게임 세션"은 클라이언트 시스템(112)에서 플레이되거나 부분적으로 시뮬레이션되거나 완전히 시뮬레이션되는 게임 애플리케이션을 포함한다. 각 서버(102)는 클라이언트 시스템(112)에서 플레이되거나, 부분적으로 시뮬레이션되거나, 완전히 시뮬레이션되는 게임 애플리케이션의 적어도 일부의 실행을 용이하게 하는 해당 게임 플랫폼 인스턴스(104)를 실행함으로써 이 클라이언트 게임 세션을 지원하도록 구성된다. 이러한 용이성(facilitation)에는 예를 들어 게임 애플리케이션과 관련된 하나 이상의 프레임을 렌더링하는 것과 같이, 게임 애플리케이션과 연관된 하나 이상의 오퍼레이션을 수행하고, 게임 애플리케이션과 연관된 계산(예: 조명 계산, 인공 지능 계산, 물리 계산, 음영 계산, 입력 계산 등)을 수행하고, 파일에 대한 액세스를 제공하고, 또는 이들의 조합 등이 포함될 수 있다. 게임 플랫폼 인스턴스(104)는 이러한 용이성을 달성하기 위해 통신/네트워크 관리, 리소스 관리, 미디어 렌더링 인코딩 등과 같은 다양한 소프트웨어 및 하드웨어 리소스를 제공한다. 이런 방식으로, 게임 플랫폼 인스턴스(104)는 마치 해당 게임 애플리케이션이 개인용 컴퓨터("PC"), 게임 콘솔, 스마트폰, 태블릿 컴퓨터, 자동차 엔터테인먼트 시스템 등과 같은 로컬 게임 장치에서 플레이되고 있는 것처럼 해당 플레이어에 대한 게임 애플리케이션의 하나 이상의 오퍼레이션 실행을 시뮬레이션한다.
각 클라이언트 시스템(112)은 적어도 하나의 플레이어에 대한 하나 이상의 입력/출력 장치의 조작을 통해 플레이어 입력을 수신하고, 뿐만 아니라 적어도 한 명의 플레이어에 대한 게임플레이의 시각적 및 청각적 콘텐츠를 각각 나타내는 비디오 및 오디오 콘텐츠를 제공하는 데 사용되는 하드웨어 및 소프트웨어 리소스를 나타낸다. 클라이언트 시스템(112)의 예로는 하나 이상의 데스크톱 컴퓨터, 노트북 컴퓨터, 태블릿 컴퓨터, 가상 현실 시스템, 증강 현실 시스템, 컴퓨팅 지원 휴대폰(예: "스마트폰"), 컴퓨팅 지원 TV(예: "스마트 TV") 또는 이들의 조합을 포함할 수 있다. 클라이언트 시스템(112-1)을 참조하여 예시된 바와 같이, 각각의 클라이언트 시스템(112)은 하나 이상의 클라이언트 장치(116)를 포함한다. 도시된 실시예에서, 클라이언트 시스템(112-1)은 디스플레이(118), 적어도 하나의 입력 장치(120) (예: 게임패드, 조이스틱, 키보드, 마우스, 터치스크린), 클라이언트 시스템(112)을 대응하는 서버(102)에 연결하는 네트워크에 연결되도록 구성된 하나 이상의 네트워크 인터페이스, 하나 이상의 프로세서, 메모리, 스토리지, 스피커 및 가상 환경의 장면을 렌더링, 프로세싱 및 표시(디스플레이)하는 기타 컴퓨팅 리소스에 통신 가능하게 결합되거나 그렇지 않으면 연관되는 제1 클라이언트 장치(116-1)를 포함한다. 클라이언트 시스템(112-1)을 참조하여 예시된 바와 같이, 각각의 클라이언트 시스템(112)은 가상 환경과 연관된 하나 이상의 프레임을 디코딩하도록 구성된 디코더(114)를 포함할 수 있다. 디코더(114)는 디코딩된 프레임 세트 또는 디코딩된 스트림을 생성하기 위해 서버(102)로부터 수신된 하나 이상의 인코딩 스트림(예를 들어, 게임 스트림(108))을 디코딩하도록 구성된 하드웨어 및 소프트웨어를 포함할 수 있다. 각각의 디코더(114)는 본 명세서에 개시된 임의의 방법 또는 프로세스에 의해 인코딩된 임의의 인코딩된 프레임을 디코딩하도록 구성된다. 실시예에서, 클라이언트 시스템(112-1)은 스마트폰 클라이언트 장치(116-2)와 웨어러블 가상 현실 클라이언트 장치(116-3)를 더 포함하며, 이들 각각은 클라이언트 시스템(112-1)과 관련하여 위에서 언급한 것과 유사한 입력 기능, 출력 기능, 디스플레이 기능 및 통신 기능을 갖춘 통합 모바일 컴퓨팅 장치로 작동할 수 있다. 특정 실시예에서, 클라이언트 시스템(112-1, 112-2, 112-3)은 클라이언트 장치의 움직임을 나타내는 동작 데이터를 획득하는 데 사용되는 가속도계, GPS(Global Positioning System) 장치 등, 뿐만 아니라 그러한 움직임의 속도나 가속도와 같은 하나 이상의 기능을 포함할 수 있다.
여기에 설명된 특정 양태는 클라우드 게임 시나리오를 구체적으로 참조하여 설명되지만, 특정 실시예에서 설명된 기술은 예를 들어, 서버(102) 및 클라이언트 시스템(112) 중 하나 이상이 다른 유형의 정보, 교육, 레크리에이션 및/또는 예술 콘텐츠를 렌더링, 프로세싱 및 표시하도록 작동하는 경우와 같이 다양한 비게임 시나리오에서 활용될 수 있다는 것이 이해될 것이다. 따라서 클라우드 게임 및 게임 콘텐츠와 연관된 특정 예를 활용할 수 있는 콘텐츠의 렌더링과 관련하여 기술이 본 명세서에서 설명되지만, 그러한 설명 및 기술은 그러한 비게임 시나리오에 적용될 수 있다는 것이 추가로 이해될 것이다. 여기에 제공된 예는 그러한 콘텐츠와 연관된 특정 대역폭 및 네트워크 지연 문제로 인해 게임 콘텐츠의 렌더링, 프로세싱 및 표시와 연관된 시나리오를 나타낼 수 있으며, 설명된 기술이 해당 시나리오에 제한된다는 것을 나타내는 것으로 해석되어서는 안 된다.
오퍼레이션 중에, 각 서버(102)는 하나 이상의 클라이언트 게임 세션에 대해 게임 플랫폼 인스턴스(104)를 실행한다. 게임 플랫폼 인스턴스(104)를 실행하는 것은 하나 이상의 각각의 클라이언트 시스템(112)에서 실행되는 게임 애플리케이션과 연관된 하나 이상의 게임 프레임을 포함하는 프레임 세트를 렌더링하는 것을 포함한다. 각각의 렌더링된 게임 프레임은 클라이언트 시스템(112)에서 실행되는 게임 애플리케이션에 사용되는 가상 환경의 적어도 일부를 묘사한다. 예를 들어, 각각의 렌더링된 게임 프레임은 클라이언트 게임 세션 동안 클라이언트 시스템(112)의 디스플레이(118)에 표시되는 가상 환경의 적어도 일부를 묘사할 수 있다.
각각의 서버(102)는 각각의 인코딩된 프레임 세트(본 명세서에서는 "게임 스트림"(108)으로도 지칭됨)을 생성하기 위해 인코더(106)를 통해 각각의 렌더링된 게임 프레임을 인코딩하도록 구성된다. 각 서버(102)는 예를 들어 게임 플랫폼 인스턴스(104)에 의해 렌더링된 각 프레임의 압축, 재구성 및 조작(manipulation)을 통해 게임 스트림(108)을 인코딩하도록 구성된다. 실시예에서, 서버(102)의 각각의 인코더(106)는 하나 이상의 코덱에 따라 하나 이상의 렌더링된 프레임을 인코딩하기 위해 하나 이상의 코덱을 구현한다. 이러한 코덱에는 H.264, H.265, VP9, AV1 또는 이들의 조합이 포함될 수 있다. 실시예에 따르면, 각 서버(102)는 프레임에 대해 다중 인코딩을 수행하고 현재 스트리밍 애플리케이션에 따라 이러한 다중 인코딩 중에서 선택하는 것을 포함하는 다중 시도 인코딩 프로세스를 사용하여 게임 플랫폼 인스턴스(104)에 의해 렌더링된 각 프레임을 인코딩하도록 구성된다. 아래에서 도 3을 참조하여 자세히 설명되는 바와 같이, 다중 시도 인코딩 프로세스는 현재 프레임에 대한 초기 양자화 파라미터 및 대체 양자화 파라미터를 결정하고, 결정된 초기 양자화 파라미터 및 대체 양자화 파라미터에 따라 현재 프레임의 다중 인코딩을 수행하여 다중 인코딩된 프레임을 생성하는 것을 포함한다. 다중 시도 인코딩 프로세스는 결과적인 게임 스트림(108)에 포함시키기 위해 다중 인코딩된 프레임으로부터 적용 가능한 인코딩된 프레임을 선택하는 것을 추가로 포함한다. 각각의 결과적인 게임 스트림(108)은 하나 이상의 클라이언트 시스템(112)에서 실행되는 게임 애플리케이션에 대응하고 네트워크(110)를 통해 이들 대응 클라이언트 시스템(112)에 제공된다. 해당 클라이언트 시스템(112)은 각각 디코더(114)를 통해 수신된 게임 스트림(108)을 디코딩하고 결과적으로 디코딩된 프레임 세트(122)를 예를 들어 디스플레이(118)에 표시(디스플레이)하도록 구성된다. 각각의 클라이언트 시스템(112)은 무손실 코덱과 손실 코덱을 포함하는 하나 이상의 다양한 비디오 코덱에 따라 인코딩된 스트림 내의 프레임을 압축, 재구성 및 조작함으로써 각각의 게임 스트림(108)을 디코딩하도록 구성된다. 실시예에 따르면, 각각의 클라이언트 시스템(112)은 하나 이상의 코덱에 따라 수신된 게임 스트림(108)을 디코딩하기 위해 하나 이상의 코덱을 구현하는 디코더를 포함한다. 이러한 코덱에는 H.264, H.265, VP9, AV1 또는 이들의 조합이 포함될 수 있다. 도시된 실시예에서는 3개의 게임 스트림(108-1, 108-2, 108-3)이 도시되어 있지만, 다른 실시예에서 서버(102)는 각각 하나 이상의 클라이언트 게임 세션에 대응하는 임의 수의 게임 스트림(108)을 생성할 수 있다.
도 2를 참조하면, 클라우드 기반 게임 시스템 내에서 프레임을 인코딩하고 스트리밍하도록 구성된 컴퓨팅 장치(200)가 도시되어 있다. 실시예에서, 컴퓨팅 장치(200)는 도 1에 설명된 클라우드 기반 게임 시스템(100)의 양태를 구현한다. 예를 들어, 컴퓨팅 장치(200)는 도 1에 설명된 서버(102)와 유사하거나 동일할 수 있다. 컴퓨팅 장치(200)는 게임 스트림(108)을 생성하기 위해 게임 프레임(250) 세트를 인코딩하기 위한 컴포넌트를 포함하여 양방향 통신을 위한 하나 이상의 소프트웨어 및 하드웨어 컴포넌트를 포함한다. 일부 실시예에서, 컴퓨팅 장치(200)는 예를 들어 데스크톱 컴퓨터, 노트북 컴퓨터, 태블릿, 서버 또는 게임 콘솔을 포함하는 세트 게임 프레임(250)의 인코딩을 지원하는 전자 장치의 일부이다. 실시예에서, 컴퓨팅 장치(200)는 프로세서(236), 모뎀(238) 및 메모리(240)를 포함한다. 메모리(240)는 예를 들어 솔리드 스테이트 드라이브, 하드 디스크 드라이브, 랜덤 액세스 메모리("RAM"), 읽기 전용 메모리("ROM"), 전자적으로 지울 수 있는 프로그래밍 가능 ROM("EEPROM"), 광학 저장 장치 또는 이들의 조합과 같은 전자 저장 장치를 포함한다. 메모리(240)는 예를 들어 코덱, 기준 프레임, 게임 엔진, 게임 애플리케이션, 상수 등과 같은 게임 플랫폼 인스턴스(204), 인코더(206) 및 레이트 제어 장치(224)의 동작과 연관된 명령어 및 데이터를 포함한다. 모뎀(238)은 네트워크(110)를 통해 하나 이상의 클라이언트 시스템(112)에 통신 가능하게 연결되도록 구성되고, 게임 스트림(108)을 하나 이상의 클라이언트 시스템(112)에 전송하도록 추가로 구성된다. 실시예에 따르면, 프로세서(236), 모뎀(238) 및 메모리(240)는 하나 이상의 인터페이스(예를 들어, 버스(242))를 통해 내부적으로 전자 통신 상태에 있다.
실시예에 따르면, 프로세서(236)는 하나 이상의 제어 처리(프로세싱) 장치("CPU"), 마이크로프로세서, 현장 프로그래밍 가능 게이트 어레이("FPGA"), 그래픽 처리(프로세싱) 장치("GPU"), 주문형 집적 회로(ASIC), 또는 이들의 임의의 조합을 포함하고, 클라우드 기반 게임 시스템(100)의 클라이언트 게임 세션에서 사용하기 위해 게임 프레임을 렌더링하고 인코딩하도록 구성된다. 프로세서(236)는 현재 클라이언트 게임 세션과 연관되고, 하나 이상의 클라이언트 시스템(112)에서 실행되는 게임 애플리케이션을 지원하도록 구성된 게임 플랫폼 인스턴스(104)와 동일하거나 유사한 게임 플랫폼 인스턴스(204)를 실행하도록 작동한다. 게임 플랫폼 인스턴스(204)는 하나 이상의 클라이언트 장치에서 실행되는 게임 애플리케이션의 환경과 연관된 게임 프레임 세트(250)를 렌더링하기 위한 그래픽 하드웨어 및 소프트웨어(명확성을 위해 도시되지 않음)를 포함한다. 이러한 그래픽 하드웨어 및 소프트웨어에는 예를 들어 그래픽 코어, 처리(프로세싱) 코어, 픽셀 셰이더, 비디오 랜덤 액세스 메모리("VRAM"), GPU, 물리 엔진, 조명 엔진, 테셀레이션 엔진 등이 포함된다. 게임 프레임(250) 세트의 각각의 렌더링된 게임 프레임은 클라이언트 장치에서 실행되는 게임 애플리케이션과 연관된 가상 환경의 적어도 일부를 나타낸다. 예를 들어, 게임 애플리케이션이 레이싱 게임인 경우, 게임 프레임 세트(250)의 각 게임 프레임은 경마장, 자동차 또는 주변 지역의 적어도 일부를 나타낸다.
게임 프레임 세트(250)의 각 렌더링된 게임 프레임은 게임 스트림(108)으로 인코딩하기 위해 인코더(206)에 제공된다. 인코더(206)는 예를 들어 인터프레임 및 인트라프레임 기술에 따라 게임 스트림(108)을 인코딩하도록 구성된 하나 이상의 소프트웨어 및/또는 하드웨어 인코더(예를 들어 인코더 325-1 내지 325-N)를 포함한다. 예시된 실시예에서는 3개의 인코더(206-1, 206-2, 206-N)가 제시되어 있지만, 다른 실시예에서는 임의의 수의 인코더가 구현될 수 있다. 컴퓨팅 장치(200)와 하나 이상의 클라이언트 시스템(112) 사이에서 게임 스트림(108)을 전송하는 데 필요한 대역폭을 줄이기 위해, 인코더(206)는 게임 프레임 세트(250)의 하나 이상의 게임 프레임을 압축함으로써 게임 스트림(108)을 인코딩한다. 게임 프레임을 압축하는 것은 게임 프레임을 메모리 버퍼(230)에 저장된 하나 이상의 참조 프레임과 비교하고 게임 프레임과 하나 이상의 참조 프레임 간의 차이 중 하나 이상을 게임 스트림(108)으로 인코딩하는 것을 포함한다. 인코더(206)는 게임 스트림(108)에 사용되는 참조 프레임을 인코딩하도록 추가로 구성된다. 실시예에서, 인코더(206)는 하나 이상의 스트리밍 애플리케이션에 기초하여 게임 스트림(108)을 인코딩하도록 구성된다. 본 명세서에서 사용되는 "스트리밍 애플리케이션"은 현재 클라이언트 게임 세션과 연관된 결과 게임 스트림(108)에 대한 하나 이상의 요구 사항(requirements), 설정(settings), 기본 설정(preferences) 또는 이들의 조합을 포함한다. 이러한 하나 이상의 요구 사항, 설정, 기본 설정은 예를 들어, 클라이언트 게임 세션, 하드웨어 기능, 인코더(206)에 의해 구현되는 코덱, 또는 이들의 임의의 조합과 연관된 게임 애플리케이션에 기초하고, 예를 들어 게임 스트림(108)의 인코딩된 프레임에 대한 목표 품질, 게임 스트림(108)의 인코딩된 프레임에 대한 목표 효율성, 게임 스트림(108)의 목표 신뢰성(target reliability), 또는 게임 스트림(108)에 대한 목표 대기 시간(target latency)을 포함한다. 결과적인 게임 스트림(108)이 스트리밍 애플리케이션의 하나 이상의 요구 사항, 설정 또는 기본 설정를 충족하는지 확인하는 데 도움을 주기 위해, 인코더(206)는 각 인코딩된 프레임이 미리 결정된 목표 비트 크기에 가까운 크기로 압축되도록 레이트 제어 방식에 따라 각 프레임을 인코딩하도록 구성된다. 레이트 제어 방식은 하나 이상의 프로세서, 하드 코딩된 논리, 프로그래밍 가능한 논리 또는 이들의 임의의 조합을 포함하는 레이트 제어 장치(224)에 의해 구현되고, 게임 프레임 세트(250)의 현재 프레임을 인코딩하는 비트율 및 개별 비트의 수(즉, 압축 정도)를 제어하거나 조정하도록 구성된다. 레이트 제어 유닛(224)은 현재 프레임에 대해 적용 가능한 양자화 파라미터("QP")를 결정함으로써 비트 전송률(비트레이트) 및 각 비트의 수를 제어하거나 조정한다.
실시예에서, 레이트 제어 유닛(rate control unit)(224)은 인코더(206)에 의해 수행되는 다중 시도 인코딩 오퍼레이션에 기초하여 현재 프레임에 적용 가능한 QP를 결정한다. 다중 시도 인코딩 오퍼레이션은 다중 인코딩된 프레임을 생성하기 위해 현재 프레임에 다중 인코딩을 수행하는 인코더(206)를 포함한다. 인코더(206) 각각은 다중 인코딩된 프레임(즉, 복수의 인코딩된 프레임)을 생성하기 위해 각각의 QP에 따라 현재 프레임에 대한 인코딩을 수행하며, 하나의 인코더는 초기 QP를 사용하고 하나 이상의 다른 인코더는 대체 QP를 사용한다. 예를 들어, 제1 인코더(206-1)는 초기 QP를 사용하여 현재 프레임에 대한 인코딩을 수행하고, 제2 인코더(206-2)는 대체 QP를 사용하여 현재 프레임에 대한 인코딩을 수행한다. 그 다음, 레이트 제어 유닛(224)은 스트리밍 애플리케이션에 기초하여 결과적인 인코딩된 프레임들로부터 적용 가능한 인코딩된 프레임을 선택하며, 적용 가능한 인코딩된 프레임은 적용 가능한 QP(즉, 해당 인코딩된 프레임을 인코딩하는 데 사용되는 QP)를 나타낸다. 레이트 제어 유닛(224)이 스트리밍 애플리케이션 애플리케이션의 하나 이상의 요구사항, 설정 또는 기본 설정를 가장 잘 충족시키는 인코딩된 프레임을 최종 인코딩 프레임으로부터 선택하는 것이 중요하다. 예를 들어, 레이트 제어 유닛(224)은 이용 가능한 대역폭에 기초하여 허용된 비트 수를 초과하지 않는 결과적인 인코딩된 프레임을 선택한다.
레이트 제어 유닛(224)은 현재 프레임의 복잡도(complexity)에 기초하여 현재 프레임에 대한 초기 QP를 결정한다. 본 명세서에서 사용되는 "복잡도"는 프레임과 연관된 하나 이상의 참조 프레임(예를 들어, 프레임을 인코딩하는 데 사용됨)과 다른 프레임 내 정보의 양 또는 값을 의미한다. 이러한 방식으로, 프레임의 복잡도가 높을수록, 인코더(206)가 인코딩할 프레임 내 정보가 더 많이 존재한다. 실시예에서, 레이트 제어 유닛(224)은 수학식 1에 따라 현재 프레임에 대한 초기 QP를 결정한다.
여기서, t는 인코딩된 프레임에 대해 미리 결정된 원하는 프레임 크기 또는 압축 정도를 나타내고, a1 및 a2는 과거 인코딩된 프레임의 데이터에서 파생된 미리 결정된 상수를 나타내고, c는 현재 프레임의 복잡도 또는 왜곡(distortion)을 나타낸다. 실시예에서, 레이트 제어 유닛(224)은 인코더(206)에 의한 현재 프레임의 제1 패스 인코딩에 기초하여 현재 프레임에 대한 추정된 복잡도를 결정하도록 구성된다. 일부 실시예에서, 인코더(206)는 제1 패스 인코딩 전에 현재 프레임을 먼저 다운샘플링하는 것과 같이 더 낮은 해상도에서 제1 패스 인코딩을 수행한다. 제1 패스 인코딩은 예를 들어, 제1 패스 인코딩된 프레임의 비트 크기, 제1 패스 인코딩된 프레임의 에너지, 제1 패스 인코딩된 프레임의 신호 대 잡음비, 또는 이들의 임의의 조합과 같은 하나 이상의 통계를 포함하는 제1 패스 인코딩된 프레임을 생성한다. 실시예에 따르면, 레이트 제어 유닛(224)은 제1 패스 인코딩된 프레임의 통계에 기초하여 현재 프레임에 대한 추정된 복잡도를 결정하도록 구성된다. 예를 들어, 레이트 제어 유닛(224)은 제1 패스 인코딩된 프레임의 비트 크기에 기초하여 현재 프레임에 대한 추정된 복잡도를 결정한다. 추정된 복잡도로부터, 레이트 제어 유닛(224)은 현재 프레임에 대한 초기 QP를 결정한다. 예를 들어, 레이트 제어 유닛(224)은 추정된 복잡도를 복잡도 c로 사용하여 수학식 1에 제시된 방정식에 따라 현재 프레임에 대한 초기 QP를 결정한다.
초기 QP로부터, 레이트 제어 유닛(224)은 현재 프레임에 대한 하나 이상의 대체 QP를 도출한다. 레이트 제어 유닛(224)은 게임 프레임 세트(250)로부터 하나 이상의 이전에 인코딩된 프레임의 복잡도(여기서는 "이력 복잡도(historical complexities)(234)"이라고도 함), 게임 프레임 세트(250)로부터의 하나 이상의 이전에 인코딩된 프레임의 적용 가능한 QP(여기서는 "이력 QP(232)"라고도 함) 및 인코더(206)에 의해 구현되는 하나 이상의 코덱, 또는 이들의 임의의 조합에 기초하여 하나 이상의 대체 QP를 도출한다. 예를 들어, 레이트 제어 유닛(224)은 프레임의 추정된 복잡도를 하나 이상의 이력 복잡도(234)와 비교함으로써 현재 프레임에 대한 하나 이상의 대체 QP를 도출한다. 실시예에서, 대체 QP를 도출하는 것은 대체 QP가 현재 프레임의 초기 QP보다 크거나 작아야 하는지 여부를 결정하는 레이트 제어 유닛(224)을 포함한다. 예를 들어, 이력 복잡도가 현재 프레임의 추정된 복잡도보다 작다는 것에 응답하여, 레이트 제어 유닛(224)은 초기 QP보다 더 큰 대체 QP가 도출되어야 한다고 결정한다. 그러한 결정은 일반적으로 홀수(odd number)의 대체 QP가 도출될 때 필요하다. 대체 QP를 도출하는 것은 또한 초기 QP에 대한 하나 이상의 차이, 즉 델타를 결정하는 것을 포함한다. 실시예에서, 이러한 차이 또는 델타는 인코더(206), 하드웨어 스펙(specifications), 또는 둘 모두에 의해 구현되는 하나 이상의 코덱을 기반으로 한다. 레이트 제어 유닛(224)은 하나 이상의 대체 QP에 대한 값을 결정하기 위해 초기 QP에 델타를 적용한다. 즉, 레이트 제어 유닛(224)은 결정된 델타에 따라 초기 QP에 대한 대체 QP에 대한 값을 결정한다.
그러면 다중 인코더(206)는 각각 초기 QP 및 대체 QP에 따라 현재 프레임에 대해 다중 인코딩을 수행하여 복수의 인코딩된 프레임을 생성한다. 실시예에서, 다중 인코딩을 수행하는 인코더(206)는 각각 미리 결정된 시간 프레임 내에 그들 각각의 인코딩을 완료하도록 구성된다. 즉, 인코더(206)는 미리 정해진 시간 프레임 내에 다중 인코딩을 모두 완료한다. 실시예에 따르면, 인코더(206)는 다중 인코딩 중 하나 이상을 동시에 수행하도록 구성된다. 그런 다음, 레이트 제어 유닛(224)은 스트리밍 애플리케이션의 하나 이상의 요구 사항, 설정 또는 기본 설정를 가장 잘 충족시키는 복수의 인코딩된 프레임으로부터 적용 가능한 인코딩된 프레임을 선택한다. 실시예에서, 레이트 제어 유닛(224)은 인코딩된 프레임 각각을 스트리밍 애플리케이션의 하나 이상의 요구사항, 설정 또는 기본 설정를 나타내는 목표 비트레이트와 비교함으로써 복수의 인코딩된 프레임으로부터 적용 가능한 인코딩된 프레임을 선택한다. 즉, 인코더(206)가 스트리밍 애플리케이션의 하나 이상의 요구 사항, 설정 또는 기본 설정를 충족하는 게임 스트림(108)을 생성하는 데 도움이 되는 목표 비트 전송률(비트레이트)이다. 실시예에 따르면, 레이트 제어 유닛(224)은 인코딩된 프레임 각각을 목표 비트레이트 및 오버슈트 인자로부터 도출된 범위와 비교한다. 본 명세서에 사용된 "오버슈트 인자(overshoot factor)"는 오버슈트(즉, 게임 스트림(108)의 적어도 일부가 허용된 것보다 더 많은 대역폭을 요구하는 경우)에 대한 클라우드 기반 게임 시스템(100) 내의 허용 오차를 나타낸다.
실시예에서, 적용 가능한 인코딩된 프레임은 하나 이상의 클라이언트 시스템(112)으로의 전송을 위해 게임 스트림(108)에 포함된다. 실시예에 따르면, 적용 가능한 인코딩된 프레임에 대한 복잡도의 표현은 게임 프레임 세트(250)의 후속 프레임의 인코딩에서 이력 복잡도(234)로서 사용하기 위해 결정되어 메모리 버퍼(230)에 저장된다. 마찬가지로, 실시예에서, 적용 가능한 인코딩된 프레임과 연관된 적용 가능한 QP(즉, 적용 가능한 인코딩된 프레임을 인코딩하는 데 사용된 QP)는 게임 프레임 세트(250)의 후속 프레임 인코딩에서 이력(historical) QP(232)로서 사용하기 위해 메모리 버퍼(230)에 저장된다.
도 3을 참조하면, 다중 시도 인코딩 오퍼레이션(300)에 대한 흐름도가 예시된다. 설명의 편의를 위해, 다중 시도 인코딩 오퍼레이션(300)은 도 2의 컴퓨팅 장치(200)를 참조하여 설명된다. 도 2는 도 1의 클라우드 기반 게임 시스템(100)의 서버(102)로서 구현된다. 동작 300에서, 게임 플랫폼 인스턴스(204)는 하나 이상의 클라이언트 시스템(112)에서 실행되는 게임 애플리케이션과 연관된 클라이언트 게임 세션에 대한 프레임 세트(305)를 렌더링한다. 프레임 세트(305)의 각 프레임은 게임 애플리케이션과 연관된 가상 환경의 적어도 일부를 나타낸다. 게임 애플리케이션을 실행하는 클라이언트 시스템으로의 프레임 세트(305)의 전송을 용이하게 하기 위해, 인코더(206)는 다중 시도 인코딩 오퍼레이션(300)을 사용하여 프레임 세트(305)의 각 프레임을 인코딩한다. 그렇게 함으로써 결과적인 게임 스트림(108)은 스트리밍 애플리케이션의 하나 이상의 요구 사항, 설정 또는 기본 설정를 더 잘 충족할 수 있다. 예를 들어, 결과적인 게임 스트림(108)의 대역폭은 실제 사용 가능한 대역폭과 더 밀접하게 일치될 수 있다.
프레임 세트(305)의 현재 프레임(본 명세서에서는 "제1 프레임"이라고도 함)(310)에 대해, 레이트 제어 유닛(224)은 현재 프레임(310)에 대한 초기 양자화 파라미터의 결정(315)을 수행한다. 실시예에서, 레이트 제어 유닛(224)은 현재 프레임(즉, 제1 프레임)(310)의 제1 패스 인코딩(pass encoding)에 기초하여 현재 프레임(310)에 대한 초기 양자화 파라미터의 결정(315)을 수행한다. 예를 들어, 도 4를 참조하면, 초기 양자화 파라미터의 예시적인 결정(400)의 흐름도가 도시된다. 현재 프레임(310) 및 프레임 세트(305)와 각각 유사하거나 동일한 프레임 세트(405)의 현재 프레임(본 명세서에서는 "제1 프레임"이라고도 함)(410)에 대해, 인코더(206)는 레이트 제어(rate control)(420)에 기초하여 제1 패스 인코딩(415)을 수행한다. 레이트 제어(420)는 프레임 세트(405)를 인코딩하기 위해 하나 이상의 인코더(206)에 대한 초기 QP를 결정하는 레이트 제어 유닛(224)을 포함한다. 현재 프레임(즉, 제1 프레임)(410)에 대해, 레이트 제어 유닛(224)은 먼저 인코더(206), 목표 비트율(비트레이트)(425), 또는 둘 다에 의해 구현되는 하나 이상의 코덱에 기초하여 제1 패스 QP를 결정한다. 목표 비트레이트(425)는 게임 스트림(108)이 스트리밍 애플리케이션의 하나 이상의 요구 사항, 설정 또는 기본 설정를 충족하도록 돕는 결과적인 게임 스트림(108)에 대한 비트레이트를 나타낸다. 일부 실시예에 따르면, 제1 패스 QP는 인코더(206)에 의해 구현되는 코덱으로부터 결정되는 상수 값이다. 레이트 제어 유닛(224)이 제1 패스 QP를 결정한 후, 인코더(206)는 제1 패스 QP에 따라 현재 프레임(410)에 대해 제1 패스 인코딩(415)을 수행하여 제1 패스 인코딩된 프레임(430)을 생성한다. 제1 패스 인코딩된 프레임(430)은 예를 들어, 제1 패스 인코딩된 프레임의 비트 크기, 제1 패스 인코딩된 프레임의 에너지, 제1 패스 인코딩된 프레임의 신호 대 잡음비, 또는 이들의 임의의 조합과 같은 하나 이상의 통계를 포함한다. 제1 패스 인코딩된 프레임(430)의 통계 및 목표 비트 레이트에 기초하여, 레이트 제어 유닛(224)은 현재 프레임(410)에 대한 초기 QP를 결정함으로써 레이트 제어(rate control)(420)를 조정한다. 즉, 레이트 제어 유닛(224)은 제1 패스 인코딩된 프레임(430)의 통계 및 목표 비트 레이트에 기초하여 현재 프레임(410)에 대한 초기 QP를 결정한다. 실시예에 따르면, 초기 QP를 결정하는 것은 레이트 제어 유닛(224)이 제1 패스 인코딩된 프레임(430)의 통계에 따라 현재 프레임(410)의 추정된 복잡도를 결정하는 것을 포함한다. 예를 들어, 레이트 제어 유닛(224)은 제1 패스 인코딩된 프레임(430)의 비트 크기에 기초하여 현재 프레임(410)에 대한 추정된 복잡도를 결정한다. 실시예에서, 레이트 제어 유닛(224)은 추정된 복잡도 및 목표 비트레이트(425)로부터 초기 QP를 결정한다.
도 3에 도시된 바와 같이, 현재 프레임(310)에 대한 초기 QP가 결정된 후, 레이트 제어 유닛(224)은 현재 프레임(310)에 대한 하나 이상의 대체 QP의 도출(320)을 수행한다. 실시예에 따르면, 레이트 제어 유닛(224)은 결정(315)으로부터 생성된 초기 QP에 기초하여 하나 이상의 대체 QP의 도출(320)을 수행한다. 실시예에서, 레이트 제어 유닛(224)은 생성할 대체 QP의 수를 먼저 결정함으로써 하나 이상의 대체 QP의 도출(320)을 수행한다. 즉, 레이트 제어 유닛(224)은 초기 QP로부터 얼마나 많은 대체 QP가 도출될 것인지를 결정한다. 일부 실시예에서, 대체 QP의 수는 미리 결정된 값이다. 실시예에 따르면, 레이트 제어 유닛(224)은 도출될 대체(alternative) QP 중 하나 이상이 초기 QP보다 클지 또는 초기 QP보다 작을지를 결정한다. 예를 들어, 도출될 대체 QP의 수가 1일 때, 레이트 제어 유닛(224)은 대체 QP가 초기 QP보다 클지 또는 작을지를 결정한다. 즉, 예를 들어, 레이트 제어 유닛(224)은 초기 QP보다 큰 후보 대체 QP와 초기 QP보다 작은 후보 대체 QP 중에서 선택한다. 레이트 제어 유닛(224)은 프레임 세트(305)와 연관된 하나 이상의 이력 복잡도(historical complexities)(234)를 현재 프레임(310)의 추정된 복잡도와 비교하고, 프레임 세트(305)와 연관된 하나 이상의 이력(historical) QP(232)를 현재 프레임(310)의 초기 QP와 비교하거나 둘 다와 비교함으로써 대체 QP 중 하나 이상이 초기 QP보다 클지 또는 초기 QP보다 작을지를 결정한다. 실시예에서, 이 비교에는 예를 들어 이력 복잡도(234) 및 이력 QP(232)에서 하나 이상의 트렌드(trends), 평균, 모드, 중앙값(medians) 또는 이들의 조합을 결정하고, 이러한 트렌드, 평균, 모드, 중앙값 또는 이들의 임의의 조합을 현재 프레임(310)의 추정된 복잡도 또는 초기 QP와 비교하는 것이 포함된다. 예를 들어, 프레임 세트(305)와 연관된 하나 이상의 이력 복잡도(234)를 현재 프레임(310)의 추정된 복잡도와 비교하는 것은 하나 이상의 이력 복잡도(234)에 대한 평균을 결정하고, 그 평균을 현재 프레임(310)의 추정된 복잡도와 비교하는 것을 포함한다. 프레임 세트(305)와 연관된 하나 이상의 이력 QP(234)와 현재 프레임(310)의 추정된 복잡도, 또는 프레임 세트(305)와 연관된 하나 이상의 이력 QP(232)와 현재 프레임(310)의 초기 QP의 비교에 기초하여, 레이트 제어 유닛(224)은 대체 QP 중 하나 이상이 초기 QP보다 클지 또는 초기 QP보다 작을지를 결정한다(예를 들어, 초기 QP보다 큰 제1 후보 대체 QP와 초기 QP보다 작은 제2 후보 대체 QP 중에서 선택). 예를 들어, 현재 프레임(310)이 프레임 세트(305)로부터 이전에 인코딩된 프레임보다 더 높은 복잡도를 갖는다는 것을 나타내는 비교에 응답하여, 레이트 제어 유닛(224)은 예를 들어 복잡도의 증가를 보상하기 위해 대체 QP 중 하나 이상이 초기 QP보다 클 것이라고 결정한다. 마찬가지로, 예를 들어, 현재 프레임(310)이 프레임 세트(305)로부터 이전에 인코딩된 프레임보다 낮은 복잡도를 갖는다는 것을 나타내는 비교에 응답하여, 레이트 제어 유닛(224)은 대체 QP 중 하나 이상이 초기 QP보다 작을 것이라고 결정한다. 다른 예로서, 현재 프레임(310)의 초기 QP가 하나 이상의 이력 QP(232)보다 작다는 것에 응답하여, 레이트 제어 유닛(224)은 예를 들어 결과적인 게임 스트림(108)에서 오버슈트를 방지하는 데 도움을 주기 위해 대체 QP 중 하나 이상이 초기 QP보다 클 것이라고 결정한다.
실시예에서, 레이트 제어 유닛(224)은 초기 QP에 대한 하나 이상의 차이 또는 델타를 결정함으로써 대체 QP를 더 도출한다. 실시예에서, 이러한 차이 또는 델타는 인코더(206), 하드웨어 또는 둘 모두에 의해 구현되는 하나 이상의 코덱을 기반으로 한다. 이들 델타에 기초하여, 레이트 제어 유닛(224)은 하나 이상의 대체 QP에 대한 값을 결정한다. 즉, 레이트 제어 유닛(224)은 결정된 델타에 따라 초기 QP에 대한 대체 QP에 대한 값을 결정한다.
레이트 제어 유닛(224)이 현재 프레임(310)에 대한 하나 이상의 대체 QP를 결정한 후, 인코더(206)는 초기 QP 및 대체 QP에 따라 현재 프레임에 대해 다중 인코딩(325-1 내지 325-N)을 수행하여 복수의 인코딩된 프레임을 생성한다. 실시예에 따르면, 인코더(206)의 각각의 인코더는 초기 QP 또는 각각의 대체 QP에 따라 인코딩(325)을 수행한다. 예를 들어, 인코더(206-1)는 초기 QP에 따라 현재 프레임(310)에 대해 인코딩(325)을 수행하고, 인코더(206-2)는 대체 QP에 따라 현재 프레임(310)에 대해 인코딩(325)을 수행한다. 실시예에서, 인코더(206)는 미리 결정된 시간 프레임 또는 시간량 내에 모든 인코딩(325-1 내지 325-N)을 수행하도록 구성된다. 또한, 일부 실시예에서, 인코더(206)는 인코딩(325) 중 하나 이상을 동시에 수행하도록 구성된다.
다중 인코딩(325)에 의해 생성된 결과 인코딩된 프레임으로부터, 레이트 제어 유닛(224)은 스트리밍 애플리케이션에 따라 적용 가능한 인코딩된 프레임의 선택(330)을 수행한다. 예를 들어, 레이트 제어 유닛(224)은 결과적인 게임 스트림(108)이 스트리밍 애플리케이션의 하나 이상의 요구 사항, 설정 또는 기본 설정를 충족시키는 데 가장 도움이 되는 인코딩된 프레임을 선택한다. 실시예에서, 레이트 제어 유닛(224)은 클라우드 기반 게임 시스템(100)과 연관된 목표 비트레이트 및 허용오차(tolerance)에 기초하여 적용 가능한 인코딩된 프레임을 선택한다. 예를 들어, 도 5를 참조하면, 적용 가능한 인코딩의 예시적인 선택(500)이 제시된다. 블록(505)에서, 레이트 제어 유닛(224)은 다중 인코딩(325)으로부터 생성된 복수의 인코딩된 프레임을 수신한다. 블록(510)에서, 레이트 제어 유닛은 복수의 인코딩된 프레임 중 임의의 인코딩된 프레임이 목표 프레임 크기와 허용 오차 사이의 크기를 갖는지 여부를 결정한다. 즉, 레이트 제어 유닛(224)은 각각 목표 프레임 크기와 허용오차 사이의 크기를 갖는 복수의 인코딩된 프레임 내에 인코딩된 프레임 그룹이 있는지 여부를 결정한다. 일부 실시예에서, 레이트 제어 유닛(224)은 사용 가능한 대역폭을 초과하지 않고 인코딩된 프레임이 허용되는 비트 수를 나타내는 목표 프레임 크기를 갖는 목표 비트레이트에 기초하여 목표 프레임 크기를 결정한다. 허용오차는 클라우드 기반 게임 시스템(100)이 오버슈트 인자에 따라 허용할 수 있는 비트 수를 나타낸다. 실시예에서, 레이트 제어 유닛(224)은 다음 수학식 2에 따라 허용오차(tolerance)를 결정한다.
여기서, f는 클라우드 기반 게임 시스템(100)에 대한 오버슈트 인자를 나타내고, T는 목표 프레임 크기를 나타낸다. 복수의 인코딩된 프레임 중 임의의 인코딩된 프레임이 목표 프레임 크기와 허용오차 사이(예를 들어, [T, Tolerance] 사이)의 크기를 갖는 경우, 레이트 제어 유닛(224)은 블록(515)으로 이동한다. 블록(515)에서, 목표 프레임 크기와 허용오차 사이의 크기를 갖는 인코딩된 프레임들의 그룹으로부터, 레이트 제어 유닛(224)은 적용 가능한 인코딩된 프레임(335)을 생성하기 위해 목표 프레임 크기에 가장 가까운 크기의 인코딩된 프레임을 선택한다. 복수의 인코딩된 프레임으로부터 인코딩된 프레임 중 어느 것도 목표 프레임 크기와 허용오차 비율(tolerance rate) 사이의 크기를 갖지 않는 경우, 레이트 제어 유닛(224)은 블록(520)으로 이동한다.
블록(520)에서, 레이트 제어 유닛(224)은 인코딩된 프레임들 중 임의의 크기가 0과 목표 크기 사이(예를 들어, [0, T] 사이)인지 여부를 결정한다. 즉, 레이트 제어 유닛(224)은 각각 0과 목표 프레임 크기 사이의 크기를 갖는 복수의 인코딩된 프레임 내에 인코딩된 프레임 그룹이 있는지 여부를 결정한다. 복수의 인코딩된 프레임 중 임의의 인코딩된 프레임이 0과 목표 프레임 크기 사이의 크기를 갖는 경우, 레이트 제어 장치(224)는 블록(525)으로 이동한다. 블록(525)에서, 0과 목표 크기 사이의 크기를 갖는 인코딩된 프레임 그룹으로부터, 레이트 제어 유닛(224)은 적용 가능한 인코딩된 프레임(335)을 생성하기 위해 목표 프레임 크기에 가장 가까운 크기를 갖는 인코딩된 프레임을 선택한다. 복수의 인코딩된 프레임으로부터 인코딩된 프레임 중 어느 것도 0과 목표 프레임 크기 사이의 크기를 갖지 않으면, 레이트 제어 유닛(224)은 블록(530)으로 이동한다. 블록(530)에서, 복수의 인코딩된 프레임(즉, 다중 인코딩 동안 생성된 모든 인코딩된 프레임) 중에서, 레이트 제어 유닛(224)은 적용 가능한 인코딩된 프레임(335)을 생성하기 위해 목표 비트레이트에 가장 가까운 크기를 갖는 인코딩된 프레임을 선택한다.
도 3을 참조하면, 실시예에서 적용 가능한 인코딩된 프레임(335)은 결과적인 게임 스트림(108)의 일부로서 하나 이상의 클라이언트 시스템(112)으로 전송된다. 실시예에 따르면, 레이트 제어 유닛(224)은 프레임 세트(305)로부터 후속 프레임을 인코딩하기 위한 이력 QP(232)로서 사용하기 위해 적용 가능한 인코딩된 프레임(335)의 적용 가능한 QP(즉, 적용 가능한 인코딩된 프레임(335)을 인코딩하는 데 사용되는 QP)를 메모리 버퍼(230)에 저장한다. 실시예에서, 레이트 제어 유닛(224)은 적용 가능한 QP, 적용 가능한 인코딩된 프레임(335)을 인코딩하는 데 사용된 참조 프레임, 또는 둘 다에 기초하여 적용 가능한 인코딩된 프레임(335)에 대한 복잡도를 결정한다. 레이트 제어 유닛(224)은 이력 복잡도(234)로서 사용하기 의해 적용 가능한 인코딩된 프레임(335)에 대해 결정된 복잡도를 메모리 버퍼(230)에 저장하여 프레임 세트(305)로부터 후속 프레임을 인코딩한다.
도 6을 참조하면, 예시적인 다중 시도 인코딩 방법(600)을 나타내는 흐름도가 제시된다. 설명의 편의를 위해, 방법(600)은 도 1의 시스템(100)의 서버(102)로서 구현된 도 2의 컴퓨팅 장치(200)를 참조하여 설명된다. 블록(605)에서, 인코더(206)와 동일하거나 유사한 인코더는 현재 프레임(즉, 제1 프레임)을 수신한다. 현재 프레임은 클라이언트 게임 세션과 연관된 가상 환경의 적어도 일부를 나타낸다. 블록(610)에서, 레이트 제어 유닛(224)과 유사하거나 동일한 레이트 제어 유닛은 현재 프레임에 대한 초기 QP를 결정한다. 실시예에서, 레이트 제어 유닛은 현재 프레임의 추정된 복잡도 및 목표 비트레이트에 기초하여 초기 QP를 결정한다. 목표 비트레이트는 결과적인 게임 스트림(108)이 스트리밍 애플리케이션의 하나 이상의 요구사항, 설정 또는 기본 설정를 충족하는 데 도움이 되는 비트레이트를 나타낸다. 실시예에 따르면, 레이트 제어 유닛은 인코더에 의해 수행된 현재 프레임의 제1 패스 인코딩에 기초하여 현재 프레임의 추정된 복잡도를 결정한다. 제1 패스 인코딩으로부터, 인코더는 예를 들어, 제1 패스 인코딩된 프레임의 비트 크기, 에너지, 신호 대 잡음비, 또는 이들의 임의의 조합과 같은 하나 이상의 통계를 포함하는 제1 패스 인코딩된 프레임을 생성한다. 제1 패스 인코딩된 프레임의 통계에 기초하여, 레이트 제어 유닛은 현재 프레임에 대한 추정된 복잡도를 결정한 다음 현재 프레임에 대한 초기 QP를 결정하는 데 사용된다.
블록(615)에서, 현재 프레임에 대한 초기 QP를 결정한 후, 레이트 제어 유닛(224)은 초기 QP에 기초하여 현재 프레임에 대한 하나 이상의 대체 QP를 도출한다. 실시예에서, 레이트 제어 유닛은 하나 이상의 대체 QP가 현재 프레임에 대한 초기 QP보다 크거나 작을지 여부를 결정한다. 예를 들어, 레이트 제어 유닛은 초기 QP보다 큰 제1 후보 대체 QP와 초기 QP보다 작은 제2 후보 대체 QP 중에서 선택한다. 당업자는 예를 들어 단 하나의 대체 QP가 도출되는 경우와 같이 홀수(odd number)의 대체 QP가 도출되는 경우 그러한 결정이 필요하다는 것을 인식할 것이다. 실시예에 따르면, 레이트 제어 유닛은 현재 프레임의 추정된 복잡도와 하나 이상의 이력 복잡도(234)의 비교와, 현재 프레임에 대한 초기 QP와 하나 이상의 이력 QP(232)의 비교, 또는 둘 다의 비교에 기초하여 하나 이상의 대체 QP가 초기 QP보다 크거나 작을지 여부를 결정한다. 예를 들어, 현재 프레임에 대한 초기 QP가 하나 이상의 이력 QP(232)보다 작다는 것에 응답하여, 레이트 제어 유닛(224)은 예를 들어 결과적인 게임 스트림(108)에서 오버슈트를 방지하는 데 도움을 주기 위해 대체 QP가 초기 QP보다 클 것이라고 결정한다. 실시예에 따르면, 레이트 제어 유닛은 또한 초기 QP에 대해 하나 이상의 차이, 즉 델타를 결정한다. 실시예에서, 이러한 차이 또는 델타는 인코더, 하드웨어 스펙 또는 둘 다에 의해 구현되는 하나 이상의 코덱을 기반으로 한다. 이들 델타에 기초하여, 레이트 제어 유닛은 초기 QP에 상대적인 하나 이상의 대체 QP에 대한 값을 결정한다.
블록(620)에서, 인코더는 초기 QP 및 대체 QP에 따라 현재 프레임에 대해 다중의 개별 인코딩을 수행하여 복수의 인코딩된 프레임을 생성한다. 실시예에서, 다중 인코딩은 초기 QP 및 하나 이상의 각각의 대체 QP에 따라 현재 프레임을 인코딩하는 하나 이상의 각각의 인코더를 포함한다. 실시예에 따르면, 인코더는 미리 결정된 시간 내에 다중 인코딩을 모두 수행한다. 또한, 실시예에서, 하나 이상의 인코더는 각각의 인코딩을 동시에 수행한다. 블록(625)에서, 레이트 제어 유닛은 스트리밍 애플리케이션에 따라 복수의 인코딩된 프레임으로부터 인코딩된 프레임을 선택하여 적용 가능한 인코딩된 프레임을 생성한다. 즉, 레이트 제어 유닛은 게임 스트림(108)이 스트리밍 애플리케이션의 하나 이상의 요구 사항, 설정 또는 기본 설정를 충족하는 데 가장 도움이 되는 적용 가능한 인코딩된 프레임을 선택한다. 실시예에서, 적용 가능한 인코딩된 프레임을 선택하는 것은 레이트 제어 유닛이 복수의 인코딩된 프레임 중 하나 이상의 인코딩된 프레임의 크기가 목표 비트레이트로부터 결정된 목표 프레임 크기 및 허용오차에 기초한 범위 내에 있는지 여부를 결정하는 것을 포함한다. 즉, 레이트 제어 유닛은 복수의 인코딩된 프레임으로부터 인코딩된 프레임의 임의의 하위 그룹이 이러한 범위 내에 있는지 여부를 결정한다. 예를 들어, 레이트 제어 유닛은 복수의 인코딩된 프레임 중 임의의 인코딩된 프레임의 크기가 목표 프레임 크기와 허용오차 사이에 있는지 또는 0과 목표 프레임 크기 사이에 있는지를 결정한다.
블록(630)에서, 레이트 제어 유닛은 목표 비트레이트, 적용 가능한 인코딩된 프레임을 인코딩하는 데 사용되는 기준 프레임, 또는 둘 다에 기초하여 적용 가능한 인코딩된 프레임에 대한 복잡도를 결정한다. 그 다음, 복잡도는 프레임 세트로부터 후속 프레임을 인코딩하기 위한 이력 복잡도로서 사용하기 위해, 메모리 버퍼(230)와 유사하거나 동일한 메모리 버퍼에 저장된다(예: 메모리 버퍼에 복잡도의 표현을 저장함으로써). 마찬가지로, 레이트 제어 유닛은 프레임 세트로부터 후속 프레임을 인코딩하기 위한 이력 QP로서 사용하기 위해 적용 가능한 인코딩된 프레임의 적용 가능한 QP(즉, 해당 인코딩된 프레임을 인코딩하는 데 사용되는 QP)를 메모리 버퍼에 저장한다. 컴퓨팅 장치(200)와 동일하거나 유사한 컴퓨터 장치는 적용 가능한 인코딩된 프레임을 게임 스트림(108)의 일부로서 하나 이상의 클라이언트 시스템(112)에 전송한다.
일부 실시예에서, 위에 설명된 기술의 특정 양태는 소프트웨어를 실행하는 처리 시스템의 하나 이상의 프로세서에 의해 구현될 수 있다. 소프트웨어는 비일시적 컴퓨터 판독 가능 저장 매체에 저장되거나 그렇지 않으면 유형으로 구현되는 하나 이상의 실행 가능한 명령 세트를 포함한다. 소프트웨어는 하나 이상의 프로세서에 의해 실행될 때 위에서 설명된 기술의 하나 이상의 양태를 수행하기 위해 하나 이상의 프로세서를 조작하는 명령어 및 특정 데이터를 포함할 수 있다. 비일시적 컴퓨터 판독 가능 저장 매체는, 예를 들어, 자기 또는 광 디스크 저장 장치, 플래시 메모리, 캐시, RAM(Random Access Memory), 기타 비휘발성 메모리 장치 또는 장치 등과 같은 고체 상태 저장 장치를 포함할 수 있다. 비일시적 컴퓨터 판독 가능 저장 매체에 저장된 실행 가능한 명령어는 소스 코드, 어셈블리 언어 코드, 목적 코드, 또는 하나 이상의 프로세서에 의해 해석되거나 실행 가능한 다른 명령어 형식일 수 있다.
컴퓨터 판독 가능 저장 매체에는 컴퓨터 시스템에 명령어 및/또는 데이터를 제공하기 위해 사용 중에 컴퓨터 시스템에 의해 액세스 가능한 임의의 저장 매체 또는 저장 매체의 조합이 포함될 수 있다. 이러한 저장 매체에는 광학 매체(예: 컴팩트 디스크(CD), 디지털 다용도 디스크(DVD), 블루레이 디스크), 자기 미디어(예: 플로피 디스크, 자기 테이프 또는 자기 하드 드라이브), 휘발성 메모리(예: RAM(Random Access Memory) 또는 캐시), 비휘발성 메모리(예: 읽기 전용 메모리(ROM) 또는 플래시 메모리) 또는 미세 전자 기계 시스템(MEMS) 기반 저장 매체가 포함될 수 있다. 컴퓨터 판독 가능 저장 매체는 컴퓨팅 시스템(예: 시스템 RAM 또는 ROM)에 내장될 수 있으며, 컴퓨팅 시스템(예: 자기 하드 드라이브)에 고정적으로 부착될 수 있으며, 컴퓨팅 시스템(예: 광 디스크 또는 USB(범용 직렬 버스) 기반 플래시 메모리)에 제거 가능하게 부착되거나, 유선 또는 무선 네트워크(예: NAS(Network Accessible Storage))를 통해 컴퓨터 시스템에 연결될 수 있다.
위의 일반 설명에 설명된 모든 액티비티나 요소가 필요한 것은 아니며 특정 액티비티나 장치의 일부가 필요하지 않을 수도 있다. 설명된 것 외에 하나 이상의 추가 액티비티가 수행되거나 요소가 포함될 수 있다. 또한 액티비티가 나열되는 순서가 반드시 수행되는 순서와 일치하지는 않는다. 또한, 구체적인 실시예를 참조하여 개념을 설명하였다. 그러나, 당업자는 아래 청구범위에 기재된 본 개시의 범위를 벗어나지 않고 다양한 수정 및 변경이 이루어질 수 있음을 인식한다. 따라서, 명세서 및 도면은 제한적인 의미가 아닌 예시적인 의미로 간주되어야 하며, 이러한 모든 변형은 본 개시의 범위 내에 포함되도록 의도된다.
이점, 다른 이점 및 문제에 대한 해결책은 특정 실시예와 관련하여 위에서 설명되었다. 하지만, 문제에 대한 이점, 장점, 해결 방법 및 이점, 장점 또는 해결 방법이 발생하거나 더욱 두드러지게 될 수 있는 모든 기능은 일부 또는 모든 청구의 핵심, 필수 또는 필수 기능으로 해석되어서는 안 된다. 더욱이, 위에 개시된 특정 실시예는 단지 예시일 뿐이며, 개시된 요지는 본 명세서의 교시의 이점을 갖는 당업자에게 명백하지만 상이하지만 동등한 방식으로 수정되고 실시될 수 있다. 아래 청구범위에 설명된 것 외에 여기에 표시된 구성 또는 설계의 세부 사항에는 제한이 없다. 따라서 위에 개시된 특정 실시예는 변경되거나 수정될 수 있으며 이러한 모든 변형은 개시된 요지의 범위 내에서 고려된다는 것이 명백한다. 따라서, 여기서 추구하는 보호는 아래 청구범위에 기술된 바와 같다.
Claims (30)
- 컴퓨터로 구현되는 방법으로서,
프레임 세트 중 제1 프레임과 연관된 초기 양자화 파라미터를 결정하는 단계;
상기 초기 양자화 파라미터에 기초하여 상기 제1 프레임에 대한 대체 양자화 파라미터를 도출하는 단계;
제1 인코딩된 프레임을 생성하기 위해 상기 초기 양자화 파라미터를 사용하여 상기 제1 프레임의 제1 인코딩과 상기 제2 인코딩된 프레임을 생성하기 위해 상기 대체 양자화 파라미터를 사용하여 상기 제1 프레임의 제2 인코딩을 모두 수행하는 단계;
목표 프레임 크기에 대한 상기 제1 인코딩된 프레임과 상기 제2 인코딩된 프레임의 비교에 응답하여 인코딩된 게임 스트림의 일부로서 전송하기 위해 상기 제1 인코딩된 프레임과 상기 제2 인코딩된 프레임 중에서 선택하는 단계; 그리고
상기 인코딩된 게임 스트림을 전송하는 단계를 포함하는, 컴퓨터로 구현되는 방법. - 제1항에 있어서, 상기 초기 양자화 파라미터를 결정하는 단계는,
제1 패스 인코딩된 프레임을 생성하기 위해 상기 제1 프레임에 대해 제1 패스 인코딩을 수행하는 단계; 그리고
상기 제1 패스 인코딩된 프레임에 기초하여 상기 초기 양자화 파라미터를 결정하는 단계를 포함하는, 컴퓨터로 구현되는 방법. - 제2항에 있어서, 상기 초기 양자화 파라미터를 결정하는 단계는,
상기 제1 패스 인코딩된 프레임의 통계에 기초하여 상기 제1 프레임에 대한 추정된 복잡도를 결정하는 단계; 그리고
상기 추정된 복잡도에 기초하여 상기 초기 양자화 파라미터를 결정하는 단계를 더 포함하는, 컴퓨터로 구현되는 방법. - 제3항에 있어서, 상기 대체 양자화 파라미터를 도출하는 단계는,
상기 프레임 세트 중 적어도 하나의 다른 프레임과 연관된 이력 복잡도(historical complexity)를 결정하는 단계; 그리고
상기 이력 복잡도를 상기 제1 프레임의 추정된 복잡도와 비교하는 단계를 포함하는, 컴퓨터로 구현되는 방법. - 제4항에 있어서, 상기 대체 양자화 파라미터를 도출하는 단계는,
상기 제1 프레임의 추정된 복잡도에 대한 이력 복잡도의 비교에 응답하여 제1 후보 대체 양자화 파라미터와 제2 후보 대체 양자화 파라미터 사이에서 상기 대체 양자화 파라미터를 선택하는 단계를 더 포함하며,
상기 제1 후보 대체 양자화 파라미터는 상기 초기 양자화 파라미터보다 크고, 상기 제2 후보 대체 양자화 파라미터는 상기 초기 양자화 파라미터보다 작은, 컴퓨터로 구현되는 방법. - 제5항에 있어서, 상기 대체 양자화 파라미터를 도출하는 단계는,
상기 이력 복잡도가 상기 제1 프레임의 추정된 복잡도보다 크다는 것에 응답하여, 상기 제2 대체 양자화 파라미터를 선택하는 단계를 더 포함하는, 컴퓨터로 구현되는 방법. - 제5항에 있어서, 상기 대체 양자화 파라미터를 도출하는 단계는,
상기 이력 복잡도가 상기 제1 프레임의 추정된 복잡도보다 작다는 것에 응답하여, 상기 제1 대체 양자화 파라미터를 선택하는 단계를 더 포함하는, 컴퓨터로 구현되는 방법. - 제5항 내지 제7항 중 어느 한 항에 있어서, 상기 프레임 세트 중 적어도 하나의 다른 프레임과 연관된 이력 복잡도를 결정하는 단계는,
상기 프레임 세트의 이전에 인코딩된 프레임의 하나 이상의 이력 복잡도에 대한 평균을 계산하고 그리고 상기 평균을 현재 인코딩될 상기 제1 프레임의 추정된 복잡도와 비교하는 단계를 포함하는, 컴퓨터로 구현되는 방법. - 컴퓨터로 구현되는 방법으로서,
스트리밍 애플리케이션에 대한 프레임 세트 중 제1 프레임에 대해 제1 패스 인코딩을 수행하는 단계;
상기 제1 패스 인코딩에 기초하여 초기 양자화 파라미터를 결정하는 단계;
상기 프레임 세트 중 적어도 하나의 다른 프레임에 기초하여 상기 제1 프레임에 대한 대체 양자화 파라미터를 도출하는 단계;
제1 인코딩된 프레임을 생성하기 위해 상기 초기 양자화 파라미터를 사용하여 제1 프레임의 제1 인코딩을 수행하고, 제2 인코딩된 프레임을 생성하기 위해 상기 대체 양자화 파라미터를 사용하여 상기 제1 프레임의 제2 인코딩을 수행하는 단계;
상기 스트리밍 애플리케이션에 기초하여 인코딩된 게임 스트림의 일부로서 전송하기 위해 상기 제1 인코딩된 프레임과 상기 제2 인코딩된 프레임 중에서 선택하는 단계; 그리고
상기 인코딩된 게임 스트림을 전송하는 단계를 포함하는, 컴퓨터로 구현되는 방법. - 제9항에 있어서, 상기 제1 패스 인코딩에 기초하여 초기 양자화 파라미터를 결정하는 단계는,
상기 제1 패스 인코딩에 기초하여 상기 제1 프레임에 대한 추정된 복잡도를 결정하는 단계를 포함하는, 컴퓨터로 구현되는 방법. - 제10항에 있어서, 상기 프레임 세트 중 적어도 하나의 다른 프레임에 기초하여 상기 제1 프레임에 대한 대체 양자화 파라미터를 도출하는 단계는,
상기 적어도 하나의 다른 프레임과 연관된 이력 복잡도를 결정하는 단계; 그리고
상기 추정된 복잡도를 상기 이력 복잡도와 비교하는 단계를 포함하는, 컴퓨터로 구현되는 방법. - 제11항에 있어서,
상기 프레임 세트 중 적어도 하나의 다른 프레임에 기초하여 상기 제1 프레임에 대한 대체 양자화 파라미터를 도출하는 단계는,
상기 이력 복잡도가 상기 추정된 복잡도보다 크다는 것에 응답하여, 상기 초기 양자화 파라미터보다 작은 상기 대체 양자화 파라미터의 값을 결정하는 단계; 그리고
상기 이력 복잡도가 상기 추정된 복잡도보다 작다는 것에 응답하여, 상기 초기 양자화 파라미터보다 큰 상기 대체 양자화 파라미터의 값을 결정하는 단계를 더 포함하는, 컴퓨터로 구현되는 방법. - 제9항 내지 제12항 중 어느 한 항에 있어서, 상기 스트리밍 애플리케이션은 목표 크기, 목표 효율성, 목표 신뢰성 또는 목표 대기 시간 중 적어도 하나를 포함하는, 컴퓨터로 구현되는 방법.
- 제9항 내지 제13항 중 어느 한 항에 있어서, 상기 스트리밍 애플리케이션에 기초하여 인코딩된 스트림으로 전송하기 위해 상기 제1 인코딩된 프레임과 상기 제2 인코딩된 프레임 중에서 선택하는 단계는,
상기 스트리밍 애플리케이션에 기초하여 목표 프레임 크기를 결정하는 단계; 그리고
상기 제1 및 제2 인코딩된 프레임 각각을 상기 목표 프레임 크기와 비교하는 단계를 더 포함하는, 컴퓨터로 구현되는 방법. - 제1항 내지 제14항 중 어느 한 항에 있어서, 상기 대체 양자화 파라미터는 복수의 대체 양자화 파라미터 중 하나인, 컴퓨터로 구현되는 방법.
- 제15항에 있어서, 상기 방법은,
상기 프레임 세트에 따라 상기 복수의 대체 양자화 파라미터를 도출하는 단계를 더 포함하는, 컴퓨터로 구현되는 방법. - 제1항 내지 제16항 중 어느 한 항에 있어서, 상기 인코딩된 게임 스트림은 목표 비트레이트에 대해 인코딩되는, 컴퓨터로 구현되는 방법.
- 제17항에 있어서, 상기 방법은,
상기 제1 및 제2 인코딩된 프레임 각각을 상기 목표 비트레이트와 비교하는 단계; 그리고
상기 제1 및 제2 인코딩된 프레임 각각과 상기 목표 비트레이트의 비교에 더 응답하여 상기 제1 인코딩된 프레임과 상기 제2 인코딩된 프레임 중에서 선택하는 단계를 더 포함하는, 컴퓨터로 구현되는 방법. - 제1항 내지 제18항 중 어느 한 항에 있어서, 상기 인코딩된 게임 스트림은 게임 세션과 연관되는, 컴퓨터로 구현되는 방법.
- 제19항에 있어서, 상기 제1 프레임은 상기 게임 세션과 연관된 가상 환경의 적어도 일부를 나타내는, 컴퓨터로 구현되는 방법.
- 제19항에 있어서, 상기 인코딩된 게임 스트림은 상기 게임 세션과 연관된 클라이언트 장치로 전송되는, 컴퓨터로 구현되는 방법.
- 제1항 내지 제21항 중 어느 한 항에 있어서, 상기 방법은,
디코딩된 게임 스트림을 생성하기 위해 상기 인코딩된 게임 스트림을 디코딩하는 단계; 그리고
상기 디코딩된 게임 스트림을 표시하는 단계를 더 포함하는, 컴퓨터로 구현되는 방법. - 제1항 내지 제22항 중 어느 한 항에 있어서, 상기 제1 인코딩과 상기 제2 인코딩은 모두 미리결정된 기간 내에 수행되는, 컴퓨터로 구현되는 방법.
- 제1항 내지 제23항 중 어느 한 항에 있어서, 상기 제1 인코딩과 상기 제2 인코딩은 동시에 수행되는, 컴퓨터로 구현되는 방법.
- 제1항 내지 제24항 중 어느 한 항에 있어서, 상기 방법은,
상기 선택된 인코딩된 프레임의 복잡도를 결정하는 단계; 그리고
메모리 버퍼에 상기 복잡도의 표현을 저장하는 단계를 더 포함하는, 컴퓨터로 구현되는 방법. - 제25항에 있어서, 상기 방법은,
상기 복잡도의 저장된 표현에 기초하여 상기 프레임 세트의 제2 프레임의 제2 인코딩을 수행하는 단계를 더 포함하는, 컴퓨터로 구현되는 방법. - 제1항 내지 제26항 중 어느 한 항에 있어서, 상기 방법은,
상기 선택된 인코딩된 프레임의 적용 가능한 양자화 파라미터를 결정하는 단계; 그리고
상기 적용 가능한 양자화 파라미터를 메모리 버퍼에 저장하는 단계를 더 포함하는, 컴퓨터로 구현되는 방법. - 제27항에 있어서, 상기 방법은,
상기 저장된 적용 가능한 양자화 파라미터를 사용하여 상기 프레임 세트 중 제2 프레임의 제2 인코딩을 수행하는 단계를 더 포함하는, 컴퓨터로 구현되는 방법. - 시스템으로서,
하나 이상의 프로세서; 그리고
상기 하나 이상의 프로세서에 연결되고, 제1항 내지 제28항 중 어느 한 항의 방법을 수행하기 위해 상기 하나 이상의 프로세서를 조작하도록 구성된 실행 가능한 명령어를 저장하는 메모리를 포함하는, 시스템. - 시스템으로서,
네트워크에 연결 가능한 네트워크 인터페이스; 그리고
상기 네트워크 인터페이스에 연결되는 인코더를 포함하며, 상기 시스템은 제1항 내지 제28항 중 어느 한 항의 방법을 수행하도록 구성되는, 시스템.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2021/048997 WO2023033833A1 (en) | 2021-09-03 | 2021-09-03 | A multi-try encoding operation for streaming applications |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20240036644A true KR20240036644A (ko) | 2024-03-20 |
Family
ID=78032521
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020247005803A KR20240036644A (ko) | 2021-09-03 | 2021-09-03 | 스트리밍 애플리케이션을 위한 다중 시도 인코딩 오퍼레이션 |
Country Status (4)
Country | Link |
---|---|
EP (1) | EP4397038A1 (ko) |
KR (1) | KR20240036644A (ko) |
CN (1) | CN117837141A (ko) |
WO (1) | WO2023033833A1 (ko) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10356405B2 (en) * | 2013-11-04 | 2019-07-16 | Integrated Device Technology, Inc. | Methods and apparatuses for multi-pass adaptive quantization |
US11997275B2 (en) * | 2018-08-27 | 2024-05-28 | AT Technologies ULC | Benefit-based bitrate distribution for video encoding |
US11368692B2 (en) * | 2018-10-31 | 2022-06-21 | Ati Technologies Ulc | Content adaptive quantization strength and bitrate modeling |
US10924739B2 (en) * | 2018-10-31 | 2021-02-16 | Ati Technologies Ulc | Efficient quantization parameter prediction method for low latency video coding |
-
2021
- 2021-09-03 CN CN202180101757.8A patent/CN117837141A/zh active Pending
- 2021-09-03 EP EP21783643.6A patent/EP4397038A1/en active Pending
- 2021-09-03 KR KR1020247005803A patent/KR20240036644A/ko unknown
- 2021-09-03 WO PCT/US2021/048997 patent/WO2023033833A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
EP4397038A1 (en) | 2024-07-10 |
WO2023033833A1 (en) | 2023-03-09 |
CN117837141A (zh) | 2024-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10594901B2 (en) | Game engine application direct to video encoder rendering | |
US11565178B2 (en) | User interface rendering and post processing during video game streaming | |
JP7436644B2 (ja) | レイテンシとビデオ品質の間のトレードオフをクラウドゲーミングアプリケーションにおいて改善するためのエンコーダ調整 | |
US9264749B2 (en) | Server GPU assistance for mobile GPU applications | |
JP2019216404A (ja) | ビデオを記録および再生するシステムおよび方法 | |
TW201501761A (zh) | 以遊戲者之注意區域爲基礎改善視訊串流的速率控制位元分配 | |
US20190373040A1 (en) | Systems and methods game streaming | |
CN113747160A (zh) | 视频编码配置方法、装置、设备及计算机可读存储介质 | |
KR20200037015A (ko) | 컨텐츠 인지 신경망을 이용하여 실시간으로 적응형 비디오를 전송하는 방법 및 장치 | |
US20230318980A1 (en) | Congestion control for low-latency interactive video streaming | |
KR20240036644A (ko) | 스트리밍 애플리케이션을 위한 다중 시도 인코딩 오퍼레이션 | |
Mohammadi et al. | An object-based framework for cloud gaming using player's visual attention | |
EP4232171B1 (en) | Low-delay multi-pass frame-level rate control using a shared reference frame | |
US11902547B2 (en) | Low-delay two-pass frame-level rate control using an adjusted complexity | |
US20240009556A1 (en) | Cloud-based gaming system for supporting legacy gaming applications with high frame rate streams | |
US20240129468A1 (en) | Parameterized noise synthesis for graphical artifact removal | |
CN110798715A (zh) | 基于图像串的视频播放方法及系统 | |
WO2021044974A1 (ja) | 送信装置、受信装置、送信方法、受信方法及びプログラム | |
EP4388746A1 (en) | Bandwidth-efficient layered video coding | |
JP6127154B2 (ja) | 画像配信装置、画像配信プログラム及び画像配信方法 | |
JP2024075512A (ja) | 短待ち時間の双方向体験のための場面変更におけるビデオ圧縮 | |
CN116965037A (zh) | 实时预编码内容自适应gpu图像抖动 |