apple/Docs, iOS, Swift

[WWDC24] AVFoundation의 미디어 성능 지표 살펴보기

lgvv 2024. 7. 28. 18:34

[WWDC24] AVFoundation의 미디어 성능 지표 살펴보기

Introduce

- What are events?

- Subscribing to events?

 

iOS18에서는 미디어 성능 지표가 이벤트로 표시되고, 앱에서 구독하는 방법에 대해서 알아볼 예정

 

미디어에서 발생하는 일반적인 문제 

1. 처음에 시작하기까지 너무 오랜 시간이 걸리는 점.

2. 재생이 중간에 멈추는 점.

 

iOS 18에서는 클라이언트에서 측정할 수 있는 더 많은 정보를 제공해 줌.

1. 처음에 시작하기까지 너무 오랜 시간이 걸리는 점.

 

AVPlayer는 Video, Audio, Subtitle을 Segment의 목록 형태로 가져오고 충분히 버퍼링 되면 재생.

 

 

얼마의 시간이 걸렸는지 가정해보자.

 

위 사진을 보면 세그먼트보다 Content Key를 요청하는데 오랜 시간이 걸렸음.

이런 경우에는 키 서버 성능을 개선하거나, 재생하기 전 Content Key를 미리 로드된 키를 확인.

 

=> 이런 과정을 통해 영상 재생 시작 시간을 개선하는데 더 도움이 된다.

 

 

2. 재생이 중간에 멈추는 점. (Playback stall)

 

영상이 중단되었을 때 stall event가 발생하며, 그 시점을 분석해보자.

 

정확하게 Video 세그먼트를 가져오지 못했고 HTTP 404에러가 발생.

 

20Mbps -> 15Mbps로 변환

변형 전환 후에도 새 미디어 세그먼트가 404 Error 발생 Video Segment에 HTTP 404에러가 발생함.

 

=> 이 시점에서 AVPlayer가 버퍼가 부족해서 해당 문제가 발생 하는 것처럼 보임

 

미디어 세그먼트 이벤트에 접근하면, NSURLSessionTask metrics로 부터 reference를 얻을 수 있음.

이를 통해 네트워크 트랙잭션 정보 등 요청이 실패한 부분에 대한 세부 정보를 얻을 수 있음.

 

Playback summary

대규모 세션 모니터링 하는 경우 AVPlayer는 summary event를 생성함.

summary event는 정지횟수, 스위칭 횟수 등 다양한 핵심 성능 지표를 제공.

해당 KPI를 분석하여 미디어 재생 상태를 추적 가능.

 

이벤트 종류

 

AVMetricEvents - Playback

AVMetricEvents에서 제공되는 이벤트 목록

 

playlist event: 재생 목록 이벤트

Media segment event: 미디어 세그먼트에서 나오는 이벤트

Content Key event: 컨텐트 키에 대한 이벤트

Stall event: 영상 정지에 대한 이벤트

Variant switch event: 네트워크 상태 및 기기 성능에 따라 전환 수행할 때

   - Variant: 240p, 360p, 720p 등 해상도 등

Summary event: 마지막에 KPI가 포함된 요약 이벤트

Rate change event: AVPlayerItem은 재생 속도가 변경될 때마다 속도 변경 이벤트

Seek event, Seek didcomplete event: 사용자의 seeking이벤트

Error event: 오류 발생시 오류 이벤트 등

 

AVMetricEvent

<Unfined metrics interface>

- iOS18 에서는  AVMetric이라는 새로운 AVFoundation API를 도입하여 다양한 AVFoundation 인터패이스에서 Metric을 수집하는 통합된 방법을 제공

 

<Event timeline>
- 미디어 타임라인에서 특정 활동이 끝날때 부분적으로 받을 수 있는 이벤트 생성 원하는 것만 받을 수 있음.

- publisher와 subscriber로 구성

   - publisher는 AVMetriceEventStraemPublisher 프로토콜 준수

 

Publusher 이렇게 만들기 가능

 

 

예제

코드 예제 - objc도 지원

 

연속적으로 방출되는 값들을 summaryMetrics와 논리적으로 묶어서 서버에 전송함.