AvPlayer
SceAvPlayer는 FFmpeg로 영상 컨테이너를 디코딩해 타이틀 소유의 NV12 프레임과 48 kHz 스테레오 PCM을 만듭니다. 타이틀이 스트림 하나를 끝내 읽지 않더라도 원본 길이가 지나면 재생이 끝납니다.
2026년 10월 10일까지의 저장소 노트
타이틀이 소유하는 버퍼
플레이어는 타이틀의 할당 콜백과 파일 콜백을 사용합니다. FFmpeg가 컨테이너를 탐색하고, 비디오는 원본 해상도 NV12로, 오디오는 48 kHz 인터리브 부호 있는 16비트 스테레오로 디코딩합니다. 비디오와 오디오는 잠금과 디코더 프로세스가 따로 있습니다. 타임스탬프는 단조 증가 시계 하나를 공유합니다.
일시 정지, 탐색, 반복, 스트림 끝 상태를 유지합니다. 소프트웨어 디코더 ABI는 정렬된 피치, 할당 높이, 보이는 자르기 영역을 보고합니다. 확장 스트림 정보 호출과 레거시 호출이 모두 있습니다. 현재 시각, 정상 속도 트릭 모드, 스트림 비활성화, 범위가 정해진 미디어 시계가 아스테릭스에 들어 있는 Unity 미들웨어를 지원합니다.
절반만 읽힌 영상 끝내기
타이틀은 그림만 가져가고 소리는 직접 믹스하거나, 그 반대로 할 수 있습니다. 모든 스트림이 읽힐 때까지 기다리면 그 플레이어가 프로세스가 끝날 때까지 살아 있게 됩니다. Jurassic Park Classic Games Collection이 인트로에서 멈춰 있던 이유가 이것입니다. 읽지 않은 오디오 스트림이 끝나지 않아, 3초짜리 클립인데 시계가 90초를 넘어가 있었습니다.
길이는 원본에서 가져옵니다. 시계가 그 길이를 지나면 무시된 스트림이 있어도 재생이 끝납니다. 스트림이 아직 전달 중인 동안 보고되는 위치는 실제로 넘겨준 프레임 범위 안에 머물므로, 느린 컴퓨터에서 일찍 잘리지 않습니다. 스트림이 정말로 끝나면 시계가 길이까지 진행할 수 있습니다. 반복되는 원본과 길이를 모르는 원본은 건드리지 않습니다.
화면 출력
관찰된 인트로 영상은 ReleaseFast 빌드에서 대략 본래 프레임 속도로 재생됩니다. Unity가 클립을 바꾸는 동안 지워진 디코더 표면을 단색으로 표시하지 않고 마지막 유효 이미지를 유지합니다. 1920×1080 원본은 타이틀이 등록한 스캔아웃 타깃에 맞춰 크기를 조정할 수 있습니다.
햅틱 트랙은 시간만 맞추고 무음입니다. AvPlayer는 컨트롤러를 구동하지 않습니다. 픽셀은 플레이어 안의 두 번째 합성기가 아니라 타이틀의 셰이더나 VideoOut을 거쳐 화면에 도달합니다.
구현된 것
- 타이틀 소유 버퍼에 NV12 비디오와 48 kHz 스테레오 PCM으로 FFmpeg 디코딩.
- 확장·레거시 스트림 정보, 일시 정지, 탐색, 반복, 공유 미디어 시계.
- 타이틀이 스트림을 읽지 않고 두었을 때 원본 길이에서 재생 종료.
- 클립이 바뀌는 동안 마지막 유효 프레임 유지.
아직 빠진 것
- 햅틱은 무음입니다. 컨트롤러 진동은 에뮬레이션하지 않습니다.
- 반복되는 원본과 길이를 모르는 원본은 길이 규칙으로 잘리지 않습니다.
- 파일 콜백이 없거나 FFmpeg가 탐색할 수 없는 컨테이너는 해당 에셋이 실패합니다.
관련 메커니즘
이 페이지들에 대하여