이 글은 AVFoundation Document에 있는 글을 번역 및 제 생각을 추가하여 작성한 글입니다.
Loading media data asynchronously
❊ 중요
iOS 16, tvOS 16, MacCatalyst 16, macOS 13 이후부터는 AVFoundation에서 제공하는 AVAsset, AVAssetTrack, AVMetadataItem 의 동기적 속성들은 폐기(deprecate)됩니다.
AVFoundation은 미디어 자료를 모델링하기 위해 AVAsset 클래스를 사용합니다.
Asset을 생성하는 것은 가벼운 작업입니다. 왜냐하면 데이터를 요구하기 전까지 media를 사용하는 것을 연기하기 때문입니다.
Asset을 로드하는 것은 데이터의 속성, media의 사이즈, 사용기기의 호환성, 네트워크 상태에 영향을 받습니다.
쓰레드가 멈추는 것을 피하기 위해 media 데이터를 불러오는 것은 비동기로 처리하여야합니다.
(Asset의 데이터를 사용하는 것은 시간이 많이 걸리는 작업이기 때문에, iOS 16 이후로 미디어를 불러오는 속성은 폐기가 되고 비동기적으로 속성을 가져오게 되었습니다.)
public func load<T>(_ property: AVAsyncProperty<Self, T>) async throws -> T
위와 같은 함수를 비동기 context로부터 호출하고 'await' 키워드를 사용하여 데이터를 로드가 끝날 때까지 실행을 중지할 수 있다는 것을 나타냅니다.
사용방법
// A CMTime value.
let duration = try await asset.load(.duration)
// An array of AVMetadataItem for the asset.
let metadata = try await asset.load(.metadata)
(위와 같이 코드를 실제로 사용하려면 Task { } 중괄호 안에 사용하여야 했습니다.)
Task {
// A CMTime value.
let duration = try await asset.load(.duration)
// An array of AVMetadataItem for the asset.
let metadata = try await asset.load(.metadata)
}
iOS 16 이전 사용하던 코드
asset.preferredTransform 과 같은 코드가 더 이상 유효하지 않고
비동기적인 함수 load를 통해 불러와야합니다.
'iOS > 강의, 고찰' 카테고리의 다른 글
[Objective-C, iOS] Objective-C 헤더와 m 파일에 대한 이해 (0) | 2023.03.20 |
---|---|
[iOS, Swift] 메인 쓰레드 글로벌 쓰레드 생각 (0) | 2022.11.16 |
[iOS, Swift] 동시성 프로그래밍 작성 시 생길 수 있는 문제 (0) | 2022.11.01 |
[iOS, Swift] GCD 사용 시 주의점 (0) | 2022.11.01 |
[iOS, Swift] DispatchQueue 서비스품질 (QoS) (0) | 2022.11.01 |