부분적으로 사용 중단됨. 이 문서에 설명된 프레임 상관 기법은
XGameStreamingGetAssociatedFrame 및 XGameStreamingGetLastFrameDisplayed에 의존하며, 2604 GDK 릴리스 기준으로 사용 중단되었고 향후 릴리스에서 제거될 예정입니다. 일반 지연 시간 측정 API인 XGameStreamingGetStreamAddedLatency는 계속 사용할 수 있습니다. 프레임 상관에 의존하지 않는 지연 시간 인식 기술에 대해서는 게임 스트리밍 지연 시간 측정을 참조하세요.지연 시간 보정
그림 1에 표시된 예시와 같은 지연 시간을 보정하기 위해 게임은 이전 상태에 대한 기록을 가지고 있습니다. 사용자가 점프 버튼을 누르면 게임은 사용자가 자신의 관점에서 적절한 시점에 버튼을 눌렀는지 확인하기 위해 게임에서 해당 지점을 검색합니다. 올바른 지연 시간 보정의 핵심은 과거의 얼마나 먼 시점을 검색해야 하는지 파악하는 것입니다. XBOX Game Streaming API는 이를 위한 여러 옵션을 제공합니다.평균 지연 시간
일부 시나리오에서 가장 간단하지만 가장 정확도가 떨어지는 접근법은 평균 지연 시간을 사용하는 것입니다. XGameStreamingGetStreamAddedLatency API는 스트리밍에 의해 추가된 지연 시간의 최근 평균을 반환합니다. 이 평균은 입력 지연 시간과 출력 지연 시간으로 분할됩니다. 입력 지연 시간은 사용자 입력이 서버에서 수신되는 데 걸리는 시간이고, 출력 지연 시간은 게임에서 렌더링된 비디오 프레임이 클라이언트 디바이스에서 수신되어 처리되는 데 걸리는 시간입니다. 시간 기반 액션의 경우, 게임은 이 평균을 액션이 언제 발생했는지 추정하는 데 사용할 수 있습니다. 하지만 네트워크 지연은 프레임마다도 변할 수 있으므로 이 접근법은 부정확합니다. 또한 스트림 추가 지연 시간 측정에는 게임이 시뮬레이션 및 렌더링을 실행하는 데 걸리는 시간과 같은 비스트리밍 지연 시간 부분이 포함되지 않습니다.입력이 있는 프레임 토큰
XGameStreamingGetAssociatedFrame API는 사용자가 버튼을 누르거나 다른 입력을 변경했을 때 본 게임 상태에 대한 정확한 정보를 제공하여 이 문제를 해결하는 데 도움이 됩니다. 프레임이 시작되면 Microsoft Game Development Kit(GDK)을 사용하는 게임은ID3D12Device::WaitFrameEventX를 호출하고 D3D12XBOX_FRAME_PIPELINE_TOKEN을 받습니다. D3D12XBOX_FRAME_PIPELINE_TOKEN을 해시 맵과 같이 원하는 데이터 구조에서 나중에 현재 상태를 저장하는 키로 사용할 수 있습니다. 프레임이 완료되면 게임은 토큰과 함께 PresentX를 호출합니다.
PresentX는 토큰이 일치하는 비디오 프레임과 함께 자동으로 게임 스트리밍 클라이언트로 전송되도록 보장합니다.
서버로 전송되는 입력에는 현재 클라이언트에 표시된 프레임의 토큰이 함께 제공됩니다. 게임이 IGameInputReading을 받으면 XGameStreamingGetAssociatedFrame API에 전달하여 토큰을 다시 얻을 수 있습니다. 이를 사용하여 이전 상태를 조회하고 저장된 상태를 기반으로 입력을 처리할 수 있습니다.
사용자가 컨트롤러를 만지지 않거나 그저 버튼을 누르고 있어서 입력이 변경되지 않은 경우, 새 토큰은 생성되지 않습니다.
입력이 없는 프레임 토큰
경우에 따라 입력이 변경되지 않았더라도 사용자가 가장 최근에 본 것이 무엇인지 알아야 할 수 있습니다. 그림 1의 예로 돌아가면, 캐릭터가 컨베이어 벨트 끝에 도달할 때 떨어집니다. 게임의 도전 과제와 공정성의 일부는 이러한 시간 창 내에서 반응하는 것입니다. 이상적으로 스트리밍 사용자는 비스트리밍 사용자와 정확히 같은 시간 동안 반응할 수 있어야 합니다. 지연 시간 때문에 창의 종료 시간을 이동시켜 창 끝에서 수신된 입력이 수락되도록 해야 합니다. 이를 위해 게임은 버튼을 누르지 않은 지연 시간 토큰을 사용할 수 있습니다. 액션 없이 입력 판독값이 창 끝에서의 상태와 일치하면, 사용자는 반응에 실패한 것이므로 게임은 이에 대해 공정하게 페널티를 부여할 수 있습니다. XGameStreamingGetLastFrameDisplayed API는 스트리밍 클라이언트가 가장 최근에 표시한 프레임에 대한D3D12XBOX_FRAME_PIPELINE_TOKEN을 반환합니다. 지속적으로 업데이트되므로 언제든지 호출하여 사용자가 애니메이션의 끝을 봤는지 확인할 수 있습니다.
XGameStreamingGetLastFrameDisplayed를 XGameStreamingGetAssociatedFrame과 동일한 방식으로 사용할 수 있습니다. 입력을 처리할 때는 해당 입력이 발생했을 때 화면에 있던 토큰을 반환하므로 XGameStreamingGetAssociatedFrame을 사용하는 것이 좋습니다. 시간이 더 경과했다면 XGameStreamingGetLastFrameDisplayed가 더 최근 프레임의 토큰을 반환할 수 있습니다.