Amazon GameLift 스트림 문제 해결 - Amazon GameLift Streams

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon GameLift 스트림 문제 해결

연결 문제

Amazon GameLift Streams 백엔드 서비스를 설정할 때 다음을 확인하세요.

  • 최종 사용자에게 AWS 리전 가장 가까운를 선택합니다. 클라이언트에서 스트림을 호스팅하는 리전까지의 지연 시간이 길면 스트림 품질에 영향을 미칠 수 있습니다. 리전에서 AWS 콘솔 엔드포인트를 ping하여 대략적인 지연 시간 측정값을 얻을 수 있습니다.

  • 스트림 그룹에 새 스트림에 대한 용량이 있는지 확인합니다.

  • ConnectionTimeoutSeconds가 적절하게 설정되었는지 확인합니다. 시간 초과 전에 고객이 연결할 수 있도록 시간을 늘리세요.

고객에게 다음을 확인하도록 조언합니다.

  • UDP 포트 33435-33465을 열어 Amazon GameLift Streams에서 스트리밍을 허용합니다. Amazon GameLift Streams가 이러한 포트에 연결할 수 없는 경우 검은색 또는 회색 화면과 같은 스트리밍 문제가 발생할 수 있습니다.

  • 인터넷 연결이 1080p 스트림에 대해 10Mbps 이상의 연결 속도를 유지할 수 있는지 확인합니다. Amazon GameLift Streams에서 재생하는 동안 네트워크 문제를 감지하면 인터넷 속도가 변동하고 최소 10Mbps를 일관되게 얻지 못할 수 있습니다. 인터넷 속도 테스트를 실행하고 문제 해결 단계를 계속 진행합니다.

  • 가능하면 유선 네트워크를 사용합니다. Wi-Fi를 사용할 때는 신호 강도를 높이기 위해 디바이스를 라우터 가까이로 이동합니다.

  • 2.4GHz 및 5GHz 대역 모두에서 Wi-Fi 라우터를 사용하는 경우 다른 대역에 연결해 보세요. 라우터를 다른 밴드로 전환하는 방법을 잘 모르는 경우 Wi-Fi 라우터의 제조업체 또는 공급자의 지원 페이지를 방문하세요. 고객 서비스에 문의할 수도 있습니다.

  • 동일한 네트워크(특히 홈 Wi-Fi)의 다른 사용자가 비디오 스트리밍, 다운로드, 온라인 게임 또는 백업과 같은 고대역폭 애플리케이션을 실행 중인지 확인합니다.

  • 디바이스에서 대역폭을 차지하는 다른 애플리케이션을 닫습니다.

  • 스트리밍 중에는 VPN 또는 프록시를 사용하지 마십시오. 지연 시간이 길어지고 게임 플레이가 차단될 수 있습니다.

  • iPad 또는 iPhone에서 재생할 때 셀룰러 네트워크 대신 Wi-Fi를 사용하고 있는지 확인합니다. 셀룰러 네트워크를 사용하면 연결 문제가 발생할 수 있습니다.

  • MacOS 사용자는 위치 서비스를 비활성화해야 합니다. 그러면 Wi-Fi가 때때로 일시 중지되어 스트리밍 환경이 저하됩니다.

성능 문제

이 섹션에서는 게임 스트리밍 성능 저하의 잠재적 원인을 식별하고 Amazon GameLift Streams를 사용하여 스트림을 최적화하기 위한 제안을 제공합니다.

Amazon GameLift Streams에서 스트리밍할 때 게임 성능이 저하됩니다.

자체 시스템에서 게임이 잘 실행되지만 Amazon GameLift Streams에서 스트리밍할 때 성능 문제가 발생하는 경우 다음을 고려하세요.

  • 시스템에 Amazon GameLift Streams보다 강력한 하드웨어가 있을 수 있습니다. Amazon GameLift Streams가 사용하는 하드웨어와 비슷한 성능의 시스템에서 애플리케이션을 테스트해야 합니다. gen4n 스트림 클래스의 경우 이는 NVIDIA RTX 2060 GPU가 있는 컴퓨터와 비슷합니다. gen5n 스트림 클래스의 경우 이는 NVIDIA RTX 3080 GPU가 있는 컴퓨터와 비슷합니다.

  • 문제는 네트워크 연결 또는 Amazon GameLift Streams의 설정 때문일 수 있습니다. 연결 문제 섹션의 문제 해결 팁을 시도해 보세요.

로컬에서 실행할 때도 게임 속도가 느리면 성능을 최적화해야 합니다. 최상의 최적화 방법은 사용 중인 특정 엔진 또는 프레임워크에 따라 달라집니다.

Windows 애플리케이션에서 로드 시간이 느리거나 문제가 발생함

게임에서 로드 시간이 길거나 동작이 끊기는 경우 다음과 같은 조치를 취하는 것이 좋습니다.

  1. 콘텐츠 및 셰이더 성능 최적화에 대한 엔진 공급업체의 지침을 사용하여 애플리케이션이 로드 성능에 맞게 패키징되고 최적화되었는지 확인합니다.

  2. 애플리케이션이 스트림 그룹의 기본 애플리케이션으로 설정되어 있는지 확인합니다.

  3. 애플리케이션 패키징의 일부로 셰이더를 캐싱하여 서비스에서 애플리케이션 최초 시작을 최적화합니다.

셰이더 캐싱을 활성화하는 방법에는 두 가지가 있습니다.

  • 드라이버 기반 캐싱 -이 접근 방식은 런타임 환경 GPU 및 드라이버 버전에 따라 다릅니다. 이 옵션은 모든 애플리케이션에 적용할 수 있으므로 기본 권장 접근 방식입니다. 이 접근 방식의 단계는 모든 GPU/드라이버 조합에 대해 복제해야 합니다.

  • 엔진 기반 캐싱 -이 접근 방식은 가능한 경우 게임 엔진을 통한 셰이더 캐싱을 활성화합니다. 개발자가 사전 베이킹된 파이프라인 상태 객체(PSO) 캐시를 생성해야 하는 부담이 있습니다. 또한 엔진이 동일한 GPU 하드웨어의 여러 드라이버에 대한 캐시 지원을 처리할 수 있다고 가정합니다.

주어진 엔진에 대해 PSO 캐싱이 구현되는 방식을 깊이 이해할 필요가 없으므로 드라이버 기반 캐싱을 먼저 구현하는 것이 좋습니다.

이러한 구현을 통해 셰이더 파일을 애플리케이션과 함께 내보내고 패키징할 수 있으므로 새 스트림이 시작될 때마다 파일을 생성할 필요가 없습니다.

Windows 런타임 애플리케이션에 대한 드라이버 기반 캐싱 수정 사항을 구현하려면
  1. 기본 애플리케이션 스트리밍을 시작하고 광범위하게 재생하여 애플리케이션용 셰이더를 생성합니다.

    중요

    환경의 모든 영역 또는 수준을 방문하여 가능한 한 많은 셰이더를 생성해야 합니다.

  2. 스트림을 닫기 전에 활성 스트림 세션에서 내보내기 기능을 활성화합니다. 자세한 내용은 스트림 세션 파일 내보내기을 참조하세요.

  3. 이전 단계에서 지정한 Amazon S3 버킷에서 스트림 세션 내보내기 .zip 파일을 다운로드합니다. 세션 페이지의 Amazon GameLift Streams 콘솔에서 다운로드 링크를 찾을 수 있습니다.

  4. 스트림 세션 내보내기 내에서 셰이더 폴더를 찾습니다. 일반적으로이 위치인에 저장됩니다AppData\Local\NVIDIA\DXCache. 생성된 셰이더 파일(*.nvph)을 애플리케이션의 Amazon S3 버킷에 업로드합니다.

  5. 런타임 시 셰이더 .bat 파일을 NVIDIA 캐싱 폴더에 복사하는 파일을 생성합니다. 이 폴더는 일반적으로에 있습니다C:\Users\Administrator\AppData\Local\NVIDIA\DXCache. Amazon S3 애플리케이션 버킷에 .bat 파일을 업로드합니다.

  6. .bat 파일을 실행 가능한 경로로 사용하여 새 Amazon GameLift Streams 애플리케이션을 생성합니다.

애플리케이션이 스트리밍을 시작하면 .bat 파일이 애플리케이션을 시작하기 전에 미리 생성된 셰이더를 셰이더 캐시에 복사하여 스트림 로드 성능을 개선합니다.

참고

애플리케이션을 업데이트하거나 Amazon GameLift Streams 애플리케이션을 새 스트림 그룹에 연결할 때마다이 단계를 반복해야 할 수 있습니다. 최신 스트림 그룹에는 서비스의 업데이트된 GPU 드라이버가 포함될 수 있습니다.

다음 예제 .bat 파일은 셰이더 파일이 Amazon S3 버킷 접두사에 저장되어 있다고 가정합니다Shaders\. 다른 폴더 구조를 사용할 수 있습니다.

@echo off set CURRENT_PATH=%cd% set DXCACHE_DIR=%CURRENT_PATH%\Shaders set NVIDIA_DXCACHE_DIR=C:\Users\Administrator\AppData\Local\NVIDIA\DXCache if not exist "%NVIDIA_DXCACHE_DIR%" ( mkdir "%NVIDIA_DXCACHE_DIR%" ) xcopy /s /f "%DXCACHE_DIR%" "%NVIDIA_DXCACHE_DIR%" start %CURRENT_PATH%\app.exe
Unreal Engine을 사용하여 애플리케이션에 대한 엔진 기반 캐싱 수정을 구현하려면

이 접근 방식에서는 Unreal Engine 기능을 사용하여 Amazon GameLift Streams 애플리케이션에 대한 파이프라인 상태 객체(PSO) 캐시를 생성할 수 있습니다. PSO 캐시를 사용하면 런타임 컴파일 시간이 줄어 사전 컴파일된 그래픽 파이프라인 상태를 제공할 수 있으므로 로드 및 렌더링 중에 히치를 줄일 수 있습니다. 이를 위해서는 Unreal Engine에 대한 고급 지식이 필요하므로 여기에서 모든 엔진별 세부 정보를 다루지는 않습니다. 추가 지침은 번들 PSO 캐시 생성, "컬렉션 흐름" 섹션의 Unreal Engine의 지침을 참조하세요.

  1. PSO 로깅이 활성화된 애플리케이션의 셰이더를 생성합니다.

    1. PSO 지원 애플리케이션과 함께 패키지 빌드를 사용하여 새 Amazon GameLift Streams 애플리케이션을 생성합니다.

    2. PSO 로깅 앱에서 -logPSO 명령으로 스트림을 시작합니다. Amazon GameLift Streams 콘솔의 스트림 구성 테스트 페이지에서 명령줄 인수 옵션을 사용할 수 있습니다.

      중요

      환경의 모든 영역 또는 수준을 방문하여 가능한 한 많은 셰이더를 생성해야 합니다.

    3. 스트림을 닫기 전에 활성 스트림 세션에서 내보내기 기능을 활성화합니다. 자세한 내용은 스트림 세션 파일 내보내기을 참조하세요.

    4. 메뉴에서 또는 Unreal 종료 명령을 사용하여 애플리케이션을 종료합니다. 스트림을 직접 닫으면 Unreal 셰이더 파이프라인 파일이 생성되지 않습니다.

    5. 내보내기 단계에서 지정한 Amazon S3 버킷에서 스트림 세션 내보내기 .zip 파일을 다운로드합니다. 세션 페이지의 Amazon GameLift Streams 콘솔에서 다운로드 링크를 찾을 수 있습니다.

  2. Unreal 셰이더 파이프라인 파일을 Amazon GameLift Streams 애플리케이션에 패키징합니다.

    1. 의 스트림 세션 내보내기에서 기록된 PSO 파일(rec.pipelinecache)을 찾습니다Saved/CollectedPSOs. Unreal 명령을 사용하여 PSO 파일의 압축을 풉니다.

    2. 압축 해제에서 생성된 출력으로 새 Unreal 빌드를 패키징합니다. Unreal 지침의 PSO 캐시 변환애플리케이션에 PSO 캐시 포함 섹션을 따릅니다.

      중요

      "PSO 캐시 변환" 섹션에서 Unreal 명령을 실행할 때는 동일한 드라이버의 버전 입력 파일을 사용해야 합니다. 예: DX12의 경우 SM6 파일만 입력으로 사용합니다. 그렇지 않으면 새 애플리케이션을 패키징할 때 오류가 발생합니다.

    3. PSO 파일을 사용하여 새 패키지 빌드에 대한 새 Amazon GameLift Streams 애플리케이션을 생성합니다.

    4. 스트림을 시작하고 테스트할 때 PSO 캐시가 로드되고 있는지 확인합니다. 게임 로그에서 다음 줄을 확인합니다.

      Opened FPipelineCacheFile: ../../...
참고

애플리케이션을 업데이트하거나 Amazon GameLift Streams 애플리케이션을 새 스트림 그룹에 연결할 때마다이 단계를 반복해야 할 수 있습니다. 최신 스트림 그룹에는 서비스의 업데이트된 GPU 드라이버가 포함될 수 있습니다.

애플리케이션 문제

예비 검사

  • 다른 시스템에서 애플리케이션을 실행하여 올바르게 패키징되었는지 확인합니다. 이렇게 하면 애플리케이션 콘텐츠에 하드코딩된 경로, 누락된 자산, 라이브러리 또는 다른 디바이스에서 작동하지 않을 수 있는 바이너리가 포함되지 않습니다.

  • (선택 사항) Amazon GameLift Streams 스트림 클래스와 유사한 GPU를 사용하여 시스템에서 애플리케이션을 실행합니다. 이렇게 하면 애플리케이션의 렌더링 설정이 GPU와 호환되고 성능이 사용자의 기대치를 충족하는지 확인할 수 있습니다.

  • UDP 포트 33435-33465을 열어 Amazon GameLift Streams에서 스트리밍을 허용합니다. Amazon GameLift Streams가 이러한 포트에 연결할 수 없는 경우 검은색 또는 회색 화면과 같은 스트리밍 문제가 발생할 수 있습니다.

애플리케이션이 Proton의 Amazon GameLift Streams에서 작동하지 않음

화면 해상도로 인한 애플리케이션 문제

1920x1080이 아닌 전체 화면 해상도를 사용하려고 하면 애플리케이션이 동결되거나 충돌하거나 잘못 렌더링될 수 있습니다. 경계 없는 전체 화면 창을 사용하여 애플리케이션을 실행하고 해상도 변경을 시도하지 않는 것이 좋습니다.

MacOS 클라이언트에서 키 입력이 멈춘 것처럼 보임

MacOS 클라이언트에서 명령 한정자 키와 다른 키를 동시에 누르면 키가 갑자기 멈춰서 키 이벤트를 반복하는 것처럼 보일 수 있습니다. 예를 들어 명령 키도 누르면 화살표 키가 멈출 수 있습니다. 게임에서 화살표 키를 사용하여 카메라를 회전하면 카메라가 무한히 회전합니다.

  • 문제: MacOS의 명령 키는 Microsoft Windows의 Windows 키에 매핑되는 Meta 키 이벤트에 매핑됩니다. 이 문제는 명령과 다른 키를 동시에 눌렀을 때 MacOS 브라우저에 영향을 미치는 버그입니다. 여기서 Meta 키는 해제되면 재설정되지만 브라우저가 화살표 키에 대한 키업 이벤트를 캡처하지 않았기 때문에 화살표 키는 재설정되지 않으므로 Web SDK 클라이언트가 서버에 키업 이벤트를 보내지 않고 스트리밍 애플리케이션은 여전히 키가 눌리고 있다고 생각할 것입니다.

  • 해결 방법: 명령 키를 사용하지 않는 경우 웹 SDK의 InputConfiguration 인터페이스에 있는 웹 SDK 키보드 필터 메커니즘(keyboardFilter)을 사용하여 필터링할 수 있습니다.

마우스 움직임은 Amazon GameLift Streams에서 다르게 동작합니다.

Amazon GameLift Streams로 스트리밍할 때 예상보다 더 빠르게 이동하는 등 마우스 움직임이 다르게 동작하는 경우 애플리케이션에서 마우스 처리 및 커서 관리 로직을 조정해야 할 수 있습니다.

  • 문제: Amazon GameLift Streams는 휴리스틱을 사용하여 마우스 이벤트를 “상대적” 또는 “절대적” 모드로 전송할지 여부를 선택합니다. 상대 모드에서 새 마우스 업데이트는 이전 업데이트와 작은 증분 차이로 제공됩니다. 절대 모드에서 마우스 커서는 클라이언트와 동기화된 화면 위치로 계속 강제됩니다. 스트리밍된 콘텐츠 위에 운영 체제 커서가 표시되면 휴리스틱은 항상 절대 좌표를 선택합니다. 이로 인해 애플리케이션이 작고 상대적인 업데이트를 기대하는 경우 예기치 않게 큰 이동 델타가 발생할 수 있습니다.

  • 해결 방법: 애플리케이션에서 상대적 마우스 모션(예: FPS 스타일 카메라 제어 또는 드래그 기반 상호 작용)이 필요한 경우 마우스 상호 작용 중에 운영 체제 커서를 숨깁니다. 예를 들어 마우스 아래로 커서를 숨기고 마우스 위로 다시 표시합니다. 이렇게 하면 끌기 모션이 상대 좌표를 사용하고 절대 위치는 버튼을 놓을 때만 동기화됩니다.

Amazon GameLift Streams의 마우스 움직임에 대한 자세한 내용은 섹션을 참조하세요마우스 이동 처리.

Unreal Engine 애플리케이션이 충돌하거나 추가 종속성이 필요함

Unreal Engine 애플리케이션이 충돌하거나 중단되거나 Microsoft Visual C++ 런타임과 같은 추가 종속성을 설치해야 하는 경우 다음을 시도하세요.

  • 올바른 실행 파일을 사용합니다. 애플리케이션이 Amazon GameLift Streams에서 올바르게 작동하려면 애플리케이션 경로를 Binaries/Win64/ 하위 폴더에 있는 전체 실행 파일 등으로 설정합니다. Unreal Engine은 폴더 루트에 작은 실행 파일( 바로 가기)과 Binaries/Win64/ 하위 폴더에 전체 실행 파일이라는 두 개의 실행 파일을 생성합니다. 전체 실행 파일이 누락된 경우 애플리케이션이 올바르게 빌드되지 않았을 수 있습니다. 예를 들어 샘플 Unreal 애플리케이션에 대한 다음 폴더 구조를 참조하세요.

    BuildApp |-> MyUnrealApp.exe |-> MyUnrealApp |-> Binaries |-> Win64 |-> MyUnrealApp.exe
  • Unreal Engine Asserts를 끕니다. 매크로 확인, 확인 및 확인을 비활성화합니다. 이렇게 하면 애플리케이션이 충돌 덤프를 생성하지 못하게 되어 Amazon GameLift Streams에서 애플리케이션이 중지됩니다. 어설트가 활성화된 경우 지연이 예상됩니다. 자세한 내용은 Unreal Engine 설명서의 어설트를 참조하세요.

    • 매크로 확인 및 확인을 비활성화USE_CHECKS_IN_SHIPPING=0하도록 설정합니다.

    • Ensure 매크로를 비활성화handleensurepercent=0하도록 설정합니다.

시작 시 Windows 애플리케이션 종료

시작 시 Windows 애플리케이션이 종료되면 애플리케이션에 필수 DLLs. 애플리케이션이 디버그 빌드인 경우 특히 Visual C++ 라이브러리 DLLs의 디버그 버전이 필요합니다.

이 문제를 해결하려면 빌드와 DLLs side-by-side 패키징하는 것이 좋습니다. 지침은 Microsoft에서 디버그 실행 파일을 실행하기 위한 테스트 머신 준비를 참조하세요.

패키지 빌드 및 DLLs을 사용하여 Amazon EC2 인스턴스와 같은 클린 머신에서 애플리케이션을 테스트합니다. Amazon GameLift Streams에서 사용해 볼 준비가 되면이 패키지를 사용하여 새 애플리케이션을 생성합니다. 포함된 DLLs.

일반적으로 Amazon GameLift Streams를 사용하기 전에 먼저 클린 머신에서 빌드를 테스트하는 것이 좋습니다. Amazon EC2 인스턴스 테스트에 대한 지침은 섹션을 참조하세요원격 시스템 설정.

Amazon GameLift Streams 서비스에 요청할 때 액세스가 거부됨

Amazon GameLift Streams 작업을 수행하거나 리소스를 사용하려고 할 때 "액세스 거부" 예외가 발생하면 AWS Identity and Access Management (IAM) 역할에 권한이 충분하지 않을 수 있습니다. 이는 StartStreamSession 호출과 같은 Amazon GameLift Streams 서비스에 대한 요청으로 인해 발생합니다.

영향을 받는 IAM 역할의 정책에 Amazon GameLift Streams에 대한 적절한 권한이 있는지 확인합니다. 다음을 확인하세요.

  • IAM 역할에 명시적 "모두 거부" 정책이 있는 경우 NotAction 요소에 "gameliftstreams:*"를 추가하여 Amazon GameLift Streams를 해당 정책에 대한 예외로 명시적으로 나열해야 합니다. 예:

    { "Sid": "DenyAllExceptListedIfNoMFA", "Effect": "Deny", "NotAction": [ "iam:CreateVirtualMFADevice", "iam:EnableMFADevice", "iam:GetUser", "iam:ListMFADevices", "iam:ListVirtualMFADevices", "iam:ResyncMFADevice", "sts:GetSessionToken", "gameliftstreams:*" // Add this ], "Resource": "*", "Condition": { "BoolIfExists": {"aws:MultiFactorAuthPresent": "false"} } }
  • 추가 문제 해결은 IAM 사용 설명서액세스 거부 오류 메시지 문제 해결을 참조하세요.