일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Python3
- 스위프트
- 토플
- 파이썬중급
- rxswift
- 인프런파이썬
- 파이썬웹크롤링
- 인프런강의
- 프로그래머스
- 카카오톡채팅봇
- 인프런
- 파이썬
- 우리를위한프로그래밍
- 인프런오리지널
- swift
- 토플공부수기
- nodeJS
- SwiftUI
- 노드JS
- 리프2기
- JS
- uikit
- 파이썬중급강의
- 자바스크립트
- 교환학생토플
- IOS프로그래밍
- IOS
- 웹크롤링
- 인프런파이썬강의
- 유학토플
- Today
- Total
먹고 기도하고 코딩하라
AVAssetDownloadTask와 AVAggregateAssetDownloadTask 차이점 본문
요즘 회사에서 다운로드 작업을 하고 있다. 까다로운데, 또 까다로운만큼 해결할 때의 쾌감이 장난 아닌 작업이다.
정처기 공부할 때 DRM 봤을 때는 이게 나랑 연관 있는 얘기 될 줄 몰랐지.. 팔자에도 없는 줄 알았더니 -_-
아무튼 이 태스크 때문에 이슈가 조금 있어서, 왜 iOS 버전에 따라 태스크를 달리 써야 하는지, 또 이 태스크가 근본적으로 무슨 차이가 있는지 좀 알아봤다.
사실 AVAssetDownloadTask는 iOS 9+, AVAggregateAssetDownloadTask는 iOS 11+ 이상을 지원해서 11 이상을 지원하는 우리 앱에서는 사실 일괄적으로 Aggregate 써도 상관없긴 한데, 또 이게 으른의 사정과 내부적인 이슈가 있어서 버전별로 태스크를 나눠 쓰고 있다.
Swift로 통신하는 제일 기본적인 방법은 URLSessionTask를 사용하는 것이다.
그 중에서도 HTTP Live Streaming(이하 HLS) 다운로드에 쓰이는 태스크가 따로 있다. HLS란 말하자면 인터넷으로 시청각 미디어를 청크 단위로 나눠 전송하는 것이다. 라이브 방송이나 녹화된 콘텐츠 등을 받는 작업이 바로 이것이다.
HLS 스트림을 다운로드하려면 URLSessionTask를 생성해야 하는데, AVAssetDownloadURLSession은 일반 AVAssetDownloadTask와 AVAggregateAssetDownloadTask, 2가지 타입의 DownloadTask를 제공한다. 이 2가지 모두 URLSessionTask를 상속받고 있다.
차이점이 뭔가?
AVAssetDownloadTask는 HLS 스트림을 타입별로 단일 미디어 selections(오디오 트랙, 자막 등)만 다운로드받을 수 있고, AVAggregateDownloadTask는 여러 미디어 selections를 다운로드받을 수 있다.
(selections를 정확히 뭐라고 해석해야 할지.. 옵션 같은 거라고 생각하면 될 것 같다)
In essence, the difference is between the two comes down to AVAssetDownloadTask only allowing you to download the HLS stream with a single media selections per type (such as audio tracks and subtitles), where AVAggregateAssetDownloadTask allows you to include multiple media selections.
두 downloadtask 모두 생성하는 데에 AVURLAsset이 필요하고, String 타입의 title이 필요하다.
여기에 덧붙여 AVAggregateAssetDownloadTask를 생성할 때는 적어도 하나 이상의 AVMediaSelection이 필요하다.
HLS 스트림은 대체 가능한 audible(듣는) 트랙이나 자막 트랙 등 여러 재생 트랙을 포함할 수 있다.
AVAssetDownloadTask를 사용해 HLS 스트림을 다운로드할 때는 기본 default 재생 트랙만 포함한다.
AVAssetDownloadTask에 media selections를 포함시키려면 추가 옵션을 붙여야 한다.
public let AVAssetDownloadTaskMediaSelectionKey: String
그런데 이 때 기본 재생 트랙 외에 대체로 쓸 수 있는 media selection은 딱 1개만 추가할 수 있다. 요게 단점이 될 수 있을 듯.
AVAssetDownloadTask를 이용해서 여러 재생 트랙을 다운로드하려면, 다운로드 태스크를 연속적으로 실행해서 하나하나 받아야 한다.
반면 AVAggregateAssetDownloadTask는 [AVMediaSelection]을 넘겨서 다수 개의 media selections를 한 태스크로 다운로드하는 것을 지원한다.
AVURLAsset은 다음의 2가지 옵션을 제공하고 있다.
// The media selection preferred by the stream
let preferredMediaSelections: AVMediaSelection = asset.preferredMediaSelection
// All available media selections
let allMediaSelections: [AVMediaSelection] = asset.allMediaSelections
AVAssetDownloadTask
- HTTP 라이브 스트리밍 (이하 HLS) assets을 다운로드받는 데 쓰이는 세션
- URLSessionTask을 상속받는 서브 클래스.
- 다운로드 세션의 makeAssetDownloadTask(downloadConfiguration:) 호출해서 객체 생성 가능
- urlAsset: AVURLAsset
- AVAssetDownloadTask가 다운로드받는 asset
- loadedTimeRanges: [NSValue]
- 다운받아서 재생 준비된 미디어의 시간 범위
- options: [String: Any]?
- 태스크에 대한 설정 옵션
- urlAsset: AVURLAsset
AVAggregateAssetDownloadTask
- asset에 대한 여러 media selection을 다운로드하는 태스크
- urlAsset: AVURLAsset
- 부모 태스크가 다운로드받는 asset
- urlAsset: AVURLAsset
AVMediaSelection
- (이 짧은 문장을 읽다가 여러 번 미궁에 빠져서 결국 파파고 돌림..)
- An object that represents a complete rendition of media selection options on an asset.
- asset에 대한 미디어 선택 옵션의 전체 버전을 나타내는 개체
- AVMediaSelectionOption이 갖는 mediaType(:AVMediaType)은 audio, subtitle 등이다.
References
'앱 > Swift' 카테고리의 다른 글
[Swift] iOS 구글 로그인 7.0.0 추가하기 (0) | 2023.03.06 |
---|---|
[Swift] Realm accessed from incorrect thread (RLMException) 에러 해결하기 (3) | 2023.02.26 |
[Swift] String과 Substring, String.index (1) | 2023.01.22 |
appDelegate만 있던 프로젝트에 sceneDelegate 추가하기 (1) | 2023.01.13 |
Carplay 지원 이야기 (0) | 2023.01.08 |