내장된 컨트롤이 있는 간단한 비디오 재생 앱을 만듭니다.
AVKit과 AVFoundation을 사용하여, 간단한 비디오 플레이어 앱을 만들 수 있습니다.
Audio Session을 사용하여 앱에서 오디오를 어떤 목적으로 사용할 건지에 대해 시스템에 알려줄 수 있습니다. Audio Session은 앱과 운영체제, 오디오 하드웨어간의 중개자 역학을 합니다. 앱이 미디어 재생 앱에서 예상하는 오디오 동작을 제공하도록 오디오 세션을 구성합니다.
import AVFoundation
을 사용하여 AVFoundation 프레임워크를 AppDelegate.swift
클래스에 추가합니다.application(_:didFinishLaunchingWithOptions:)
메소드에서, 오디오 세션 공유 인스턴스에 접근하여 앱의 오디오 세션 카테고리를 playback으로, 모드를 moviePlayback으로 설정합니다.func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(.playback, mode: .moviePlayback)
}
catch {
print("Setting category to AVAudioSessionCategoryPlayback failed.")
}
return true
}
앱의 오디오 세션을 구성한 후, 플레이어를 위한 사용자 인터페이스를 만들어야 합니다.
Main.storyboard
파일을 열고 Library의 검색 필드에 button을 입력하고 Button 객체를 찾습니다.이제 사용자 인터페이스를 만들었으니 비디로 재생을 위한 코드를 작성해야 할 때입니다.
Main.storyboard
파일을 선택하고 assistant editor를 엽니다.ViewController.swift
클래스에 드래그하여 새로운 @IBAction
메소드를 추가하고 이름을 playVideo
로 지정합니다.ViewController.swift
클래스를 선택합니다. 클래스 정의 위에, AVKit과 AVFoundation 프레임워크를 import 합니다.playVideo
메소드에서, 다음 구문을 추가합니다.@IBAction func playVideo(_ sender: UIButton) {
guard let url = URL(string: "https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_adv_example_hevc/master.m3u8") else {
return
}
// Create an AVPlayer, passing it the HTTP Live Streaming URL.
let player = AVPlayer(url: url)
// Create a new AVPlayerViewController and pass it a reference to the player.
let controller = AVPlayerViewController()
controller.player = player
// Modally present the player and call the player's play() method when complete.
present(controller, animated: true) {
player.play()
}
}
이 앱은 이제 iOS와 tvOS 기기 시뮬레이터에서 동작합니다.
플레이어의 전송 동작을 제어하기 위한 인터페이스를 제공하는 객체입니다.
class AVPlayer: NSObject
AVPlayer는 미디어 자산의 재생 및 타이밍을 관리하는데 사용되는 컨트롤러 객체입니다. AVPlayer를 사용하여 QuickTime 동영상 및 MP3 오디오와 같은 로컬 및 원격 파일 기반 미디어 뿐만 아니라 HTTP 라이브 스트리밍을 사용하여 시청각 미디어를 재생할 수 있습니다.
AVPlayer는 한 번에 하나의 미디어 자산을 재생합니다. replaceCurrentItem(with:)
메소드를 사용하여 플레이어 인스턴스를 재사용하여 추가 미디어 자산을 재생할 수 있지만 한 번에 하나의 미디어 자산만 재생할 수 있습니다. 또한 프레임워크는 AVPlayer의 하위 클래스인 AVQueuePlayer를 제공합니다. 이를 사용하여 순차적으로 재생되는 미디어 자산의 대기열을 만들고 관리할 수 있습니다.
AVPlayer를 사용하여 AVFoundation이 AVAsset 클래스를 사용하여 모델링한 미디어 자산을 재생할 수 있습니다. AVAsset은 재생 시간이나 생성 날짜와 같은 미디어의 정적인 부분만을 모델링하며 AVPlayer로 재생할 때에는 적합하지 않습니다. 자산을 재생하려면 AVPlayerItem에 있는 동적 요소의 인스턴스를 만들어야 합니다. 이 객체는 AVPlayer의 인스턴스에서 재생되는 자산의 타이밍 및 표현 상태를 모델링합니다. 자세한 내용은 AVPlayerItem을 참조하세요.
AVPlayer는 상태가 계속해서 변경되는 동적 객체입니다. 플레이어의 상태를 관찰하는 데에는 두 가지 방법이 있습니다.
observeValue(forKeyPath:of:change:context:)
를 호출합니다.addPeriodicTimeObserver(forInterval:queue:using:)
addBoundaryTimeObserver(forTimes:queue:using:)
AVPlayer와 AVPlayerItem은 보여지지 않는 객체이므로 비디오 자산을 화면상에 표시할 수 없습니다. 비디오 컨텐츠를 화면에 표시하혀면 다음 두 가지 접근방법을 사용할 수 있습니다.
외부 재생 모드는 비디오 데이터가 AirPlay를 통해 Apple TV와 같은 외부 장치로 전송되거나 오리지널리티를 위해 전체 화면 재생을 위한 미니 커넥터 기반 HDMI/VGA 어댑터로 전송되었을 경우를 말합니다.
“외부 스크린” 모드(미러링 및 두번째 디스플레이 모드로도 알려진)에서 호스트 장치는 비디오 데이터를 렌더링합니다. 호스트 장치는 렌더링 된 비디오를 재압축하여 외부 장치로 전송하고, 외부 장치는 비디오를 압축 해제하고 표시합니다.
외부 재생 속성은 AirPlay 비디오 재생에 영향을 주며 사용되지 않는 AirPlay 지원 속성 대신 사용됩니다.
// 지정된 URL을 참조하는 단일 오디오-비주얼 자원을 재생하는 새로운 플레이어를 생성합니다.
init(url: URL)
// 지정된 플레이어 항목을 재생할 새 플레이어를 만듭니다.
init(playerItem: AVPlayerItem?)
// 현재 아이템의 재생을 시작합니다.
func play()
// 현재 아이템의 재생을 일시정지합니다.
func pause()
// 현재 재생 속도입니다.
var rate: Float
// 현재 플레이어 아이템의 재생이 끝났을 때 수행할 액션입니다.
var actionAtItemEnd: AVPlayer.ActionAtItemEnd
// 재생이 종료되었을 때 플레이어가 수행할 동작입니다.
enum AVPlayer.ActionAtItemEnd
// 현재 플레이어 아이템을 새로운 플레이어 아이템으로 교체합니다.
func replaceCurrentItem(with: AVPlayerItem?)
// 비디오 재생이 디스플레이와 기기 잠자기 모드를 예방해야하는지를 가리키는 Bool 값입니다.
var preventsDisplaySleepDuringVideoPlayback: Bool
// 재생이 끊기는 것을 최소화하기 위해 플레이어가 자동적으로 재생을 지연해야하는지 여부를 나타내는 Bool 값
var automaticallyWaitsToMinimizeStalling: Bool
// 플레이어가 현재 재생을 시작이나 재시작할 때까지 기다리는 이유
var reasonForWaitingToPlay: AVPlayer.WaitingReason?
// 플레이어가 재생을 시작이나 재시작할 때까지 기다리는 이유의 구조체
struct AVPlayer.WaitingReason
The reasons the player is waiting begin or resume playback.
// 적절한 네트워크 상태를 기다리는 동안 재생이 현재 진행 중인지, 무기한으로 일시 중지되었는지 혹은 정지되었는지를 나타내는 상태입니다.
var timeControlStatus: AVPlayer.TimeControlStatus
// 플레이어가 재생 속도 변경을 나타내는 상태입니다.
// .pause .waitingToPlayAtSpecifiedRate, .playing
enum AVPlayer.TimeControlStatus
// 주어진 속도로 가능한 미디어 데이터를 즉시 재생합니다.
func playImmediately(atRate: Float)
// 현재 플레이어 항목의 현재 시간을 반환한다.
func currentTime() -> CMTime
// 현재 재생 시간을 주어진 시간으로 설정합니다.
func seek(to: CMTime)
// 현재 재생 시간을 날짜 객체로 지정된 시간으로 설정합니다.
func seek(to: Date)
// 현재 재생 시간을 지정된 시간으로 설정하고 탐색 작업이 완료되거나 중단될 때까지 지정된 블록을 실행합니다.
func seek(to: CMTime, completionHandler: (Bool) -> Void)
// 현재 재생 시간을 지정된 날짜로 설정하고 탐색 작업이 완료되거나 중단될 때까지 지정된 블록을 실행합니다.
func seek(to: Date, completionHandler: (Bool) -> Void)
// 지정된 시간 범위 내에서 현재 재생 시간을 설정합니다.
func seek(to: CMTime, toleranceBefore: CMTime, toleranceAfter: CMTime)
// 지정된 시간 범위 내에서 현재 재생 시간을 설정하고 탐색 작업이 완료되거나 중단 될 때 지정된 블록을 호출합니다.
func seek(to: CMTime, toleranceBefore: CMTime, toleranceAfter: CMTime, completionHandler: (Bool) -> Void)
// 변경 시간을 보고하기 위해 재생 중 주어진 블록의 주기적인 호출을 요청합니다.
func addPeriodicTimeObserver(forInterval: CMTime, queue: DispatchQueue?, using: (CMTime) -> Void) -> Any
// 정상 재생 중에 지정된 시간이 지나가면 블로 호출을 요청합니다.
func addBoundaryTimeObserver(forTimes: [NSValue], queue: DispatchQueue?, using: () -> Void) -> Any
// 이전에 등록된 시간 주기 혹은 시간 경계 관찰자를 취소합니다.
func removeTimeObserver(Any)
Cancels a previously registered periodic or boundary time observer.
// 리시버가 현재 선택 기준을 플레이어 항목에 자동으로 적용해야하는지 여부를 나타내는 Bool 값
var appliesMediaSelectionCriteriaAutomatically: Bool
// 지정된 미디어특성을 가진 미디어 항목에 대한 자동 선택 조건을 반환합니다.
func mediaSelectionCriteria(forMediaCharacteristic: AVMediaCharacteristic) -> AVPlayerMediaSelectionCriteria?
// 지정된 미디어 특성을 갖는 미디어에 대한 자동 선택 기준을 적용합니다.
func setMediaSelectionCriteria(AVPlayerMediaSelectionCriteria?, forMediaCharacteristic: AVMediaCharacteristic)
// 플레이어가 외부 재생 모드로 전환할 수 있는지 여부를 나타내는 Bool 값입니다.
var allowsExternalPlayback: Bool
// 플레이어가 현재 외부 재생 모드에서 비디오를 재생 중인지 여부를 나타내는 Bool 값입니다.
var isExternalPlaybackActive: Bool
// 외부 화면 모드가 활성화되어 있는 동안 플레이어가 외부 재생 모드로 자동 전환해야하는지 여부를 나타내는 Bool 값입니다.
var usesExternalPlaybackWhileExternalScreenIsActive: Bool
// 외부 재생 모드에서만 적용되는 플레이어의 비디오 gravity.
var externalPlaybackVideoGravity: AVLayerVideoGravity
// 비디오가 레이어의 경계 사각형 내에 비디오가 표시되는 방법을 정의하는 값
struct AVLayerVideoGravity
이 섹션의 고급 동기화 및 속도 제어 방법은 현재 파일 기반 미디어에서만 지원되며 HTTP 라이브 스트리밍을 사용하여 제공되는 미디어에서 지원되지 않습니다.
// 외부 소스와 현재 재생 아이템의 재생속도와 시간을 동기화합니다.
func setRate(Float, time: CMTime, atHostTime: CMTime)
// 재생을 위해 미디어 파이프 라인을 준비하기 위해 미디어 데이터를 불러오기 시작합니다.
func preroll(atRate: Float, completionHandler: ((Bool) -> Void)?)
// 보류중인 모든 사전 요청을 취소하고 해당 completionHandler를 호출합니다.
func cancelPendingPrerolls()
// 항목 시간 기준에 사용되는 마스터 시계입니다.
var masterClock: CMClock?
The master clock used for item time bases.
// 플레이어의 오디오 출력이 음소거되었는지의 여부를 나타내는 Bool값
var isMuted: Bool
// 플레이어의 오디오 재생 볼륨
var volume: Float
// 오디오를 재생하는 데 사용되는 Core 오디오 출력 장치의 고유 ID를 지정합니다.
var audioOutputDeviceUniqueID: String?
// 플레이어를 재생에 사용할 수 있는지 여부를 나타내는 상태
var status: AVPlayer.Status
// 플레이어가 항목을 성공적으로 재생할 수 있는지 여부를 나타내는 상태입니다.
enum AVPlayer.Status
// 실패의 원인이 된 오류
var error: Error?
// 플레이어의 현재 재생 항목입니다.
var currentItem: AVPlayerItem?
// 외부 보호가 충분하지 않아서 출력이 흐리게 표시되는지 여부를 나타내는 Bool 값입니다.
var isOutputObscuredDueToInsufficientExternalProtection: Bool
// 재생 가능한 HDR 모드들
class var availableHDRModes: AVPlayer.HDRMode
// HDR 모드를 지정하는 비트 필드 유형
struct AVPlayer.HDRMode
// 비디오 디코딩에 사용할 GPU 레지스트리 식별자
var preferredVideoDecoderGPURegistryID: UInt64
비디오가 백그라운드로 이동할 때 비디오 자산에서 오디오를 계속 재생합니다.
많은 미디어 재생 응용 프로그램의 일반적인 기능은 응용 프로그램이 백그라운드로 보내질 때 오디오를 계속 재생하는 것입니다. 이는 사용자가 앱을 전환하거나 기기를 잠근 결과 발생할 수 있습니다. 앱에서 background 오디오를 재생할 수 있게 하려면 먼저 AVAudioSession 및 Enabling Background Audio에 설명 된대로 앱의 기능을 구성해야합니다.
MP3 또는 M4A 파일과 같은 오디오 전용 애셋을 재생하는 경우 설정이 완료되면 앱에서 배경 오디오를 재생할 수 있습니다. 동영상 애셋의 오디오 부분을 재생해야 하는 경우 추가 단계가 필요합니다. 만약 플레이어의 현재 항목이 장치에 비디오를 표시하는 경우, 앱이 백그라운드로 보내지면 AVPlayer 인스턴스 재생이 자동으로 일시 중지됩니다. 오디오를 계속 재생하려면 백그라운드로 전화될 때 프레젠테이션에서 AVPlayer 인스턴스 연결을 끊고 포그라운드로 돌아갈 때 다시 연결하십시오.
func applicationDidEnterBackground(_ application: UIApplication) {
// 백그라운드로 진입할 때 프레젠터에서 AVPlayer 연결을 해제합니다.
// AVPlayerViewController로 비디오를 표시하는 경우
playerViewController.player = nil
// AVPlayerLayer로 비디오를 표시하는 경우
playerLayer.player = nil
}
func applicationWillEnterForeground(_ application: UIApplication) {
// 포그라운드로 돌아올 때 AVPlayer를 다시 프레젠터에 연결해줍니다.
// AVPlayerViewController로 비디오를 표시하는 경우
playerViewController.player = player
// AVPlayerLayer로 비디오를 표시하는 경우
playerLayer.player = player
}
앱이 백그라운드로 진입해도 지속적으로 오디오를 재생하도록 구성합니다.
iOS 및 tvOS 앱에서 일부 백그라운드 작업을 사용하려면 특정 기능을 사용하도록 설정해야합니다. 미디어 플레이어 앱에 필요한 일반적인 기능은 백그라운드 오디오를 재생하는 것입니다. 이 기능을 사용하면 사용자가 다른 앱으로 전환하거나 iOS 기기를 잠글 때 앱의 오디오를 계속 사용할 수 있습니다. 이 기능은 iOS에서 AirPlay 스트리밍과 PIP 재생과 같은 고급 재생 기능을 활성화하는 데에도 필요합니다.
이 기능을 구성하는 가장 간단한 방법은 Xcode를 사용하는 것입니다. Xcode에서 앱의 타겟을 선택하고 Capabilities 탭을 선택하세요. Capabilities 탭 하단에서 Background Modes 스위치를 ON으로 변경하고 하위 가능 모드 목록에서 “Audio, AirPlay, and Picture in Picture” 옵션을 선택하세요.
이 모드를 사용하고 오디오 세션을 구성하면 앱이 백그라운드에서 오디오를 재생할 준비가 되었습니다.
앱을 성공적으로 사용하기 위해 녹음된 음악 혹은 기타 사운드를 재생하는 카테고리입니다.
static let playback: AVAudioSession.Category
이 카테고리를 사용하면, 음서거 스위치가 음소거로 설정되거나 화면이 잠길 때에도 앱 오디오가 계속됩니다. 앱이 백그라운드로 전환될 때 오디오를 계속 재생하려면 정보 속성 목록 파일의 UIBackgroundModes 키에 오디오 값을 추가하십시오.
기본적으로 이 카테고리를 사용하면 응용 프로그램의 오디오가 혼합되지 않음(nonmixable)을 의미합니다. 세션을 활성화하면 혼합되지 않는 다른 오디오 세션을 중단시킬겁니다. 이 카테고리의 믹싱을 허용하려면 mixWithOthers 옵션을 사용하십시오.
앱에서 오디오를 어떻게 사용할 것인지 시스템과 통신하는 매개 객체입니다.
class AVAudioSession : NSObject
오디오 세션은 앱과 운영 체제, 기본 오디오 하드웨어 사이의 중계자 역할을 합니다. 오디오 세션을 사용하면 필요한 오디오 하드웨어와의 상호작용이나 특정 동작을 설명할 필요 없이 운영 체제에 앱의 오디오 특성을 알릴 수 있습니다. 이 동작은 이러한 세부 사항의 관리를 오디오 세션에 위임함으로써 운영 체제가 사용자의 오디오 환경을 가장 잘 관리할 수 있습니다.
모든 iOS와 tvOS 앱은 다음과 같이 사전 구성된 기본 오디오 세션이 있습니다.
기본 오디오 세션은 유용한 동작들을 제공하지만, 미디어 재생 앱을 만들 때에 필요한 일반적인 오디오 동작을 제공하지는 않습니다. 기본 동작을 변경하려면 앱의 오디오 세션 카테고리를 구성해야합니다.
사용할 수 있는 카테고리는 7가지가 있지만 대부분의 플레이어 앱들은 playback이 필요합니다. 이 카테고리는 오디오 재생이 이 앱의 주요 특징임을 알려줍니다. 이 카테고리를 설정하게 되면 앱의 오디오는 벨소리/무음 스위치가 무음 모드에서 설정된 상태에서도 앱의 오디오가 계속 재생됩니다. 이 카테고리를 사용하면 오디오나 AirPlay, PIP 백그라운드 모드를 사용할 때 앱에서 백그라운드로 오디오를 재생할 수 있습니다. 더 많은 정보를 확인하려면, Background Audio 사용하기를 확인하세요.
AVAudioSession 객체를 사용하여 앱의 오디오 세션을 구성합니다. AVAudioSession은 오디오 세션 카테고리를 설정하고 다른 요소들을 구성하는 데 사용되는 싱글턴 객체입니다. 앱 수명주기 전체에서 오디오 세션과 상호 작용할 수 있지만, 다음 예와 같이 앱 실행시에 이러한 구성(configuration)을 수행하는 것이 유용합니다.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]?) -> Bool {
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(AVAudioSessionCategoryPlayback)
} catch {
print("Setting category to AVAudioSessionCategoryPlayback failed.")
}
// Other project setup
return true
}
이 카테고리는 setActive(_:)
혹은 setActive(_:options:)
메소드를 사용하여 오디오 세션을 활성화할 때 사용됩니다.
Note 카테고리를 설정한 후 어디서든 오디오 세션을 활성화할 수 있습니다. 하지만 일반적으로 앱이 오디오 재생을 시작할 때까지 이 호출을 연기하는 것이 바람직합니다. 이 호출을 연기하면 진행중인 다른 백그라운드 오디오가 중간에 중단되지 않습니다.
앱의 Audio Session 싱글턴 객체에 접근하여 카테고리, 모드, 선호되는 기기 설정을 구성하세요.
// 공유된 audio session 인스턴스를 반환합니다.
class func sharedInstance() -> AVAudioSession
Audio session의 카테고리, 옵션, 모드를 설정하세요.
// 현재 오디오 세션의 카테고리
var category: AVAudioSession.Category
// 현재 오디오 세션의 카테고리를 설정합니다.
func setCategory(AVAudioSession.Category)
// 특정 옵션과 함께 오디오 세션의 카테고리를 설정합니다.
func setCategory(AVAudioSession.Category, options: AVAudioSession.CategoryOptions)
// 오디오 세션의 카테고리, 모드, 원하는 옵션을 설정합니다.
func setCategory(AVAudioSession.Category, mode: AVAudioSession.Mode, options: AVAudioSession.CategoryOptions)
// 현재 기기에 설정 가능한 오디오 세션 카테고리들입니다.
var availableCategories: [AVAudioSession.Category]
// 현재 오디오 세션 카테고리와 관련된 옵션들입니다.
var categoryOptions: AVAudioSession.CategoryOptions
// 현재 오디오 세션 모드입니다.
var mode: AVAudioSession.Mode
// 오디오 세션 모드를 설정합니다.
func setMode(AVAudioSession.Mode)
// 이 기기에서 사용가능한 오디오 세션 모드들입니다.
var availableModes: [AVAudioSession.Mode]
카테고리와 모드 구성과 함께 오디오 세션을 활성화합니다.
// 특정 옵션을 사용하여 앱의 오디오 세션을 활성화하거나 비활성화 합니다.
func setActive(Bool, options: AVAudioSession.SetActiveOptions)
// watchOS에서 오디소 세션을 비동기로 활성화합니다.
func activate(options: AVAudioSessionActivationOptions, completionHandler: (Bool, Error?) -> Void)
사용자에게 오디오 녹음 허용을 요청합니다.
오디오를 녹음하려면 사용자의 명백한 허용이 필요합니다. 녹음이 가능한 카테고리를 사용하는 오디오 세션이 처음으로 오디오 입력 라우터를 사용하려고 시도한다면, 시스템에서 자동적으로 사용자에게 권한을 요청합니다. requestRecordPermission(_:)
메소드를 호출함으로써 먼저 권한을 요청할 수 있습니다. 사용자가 이 앱에서 녹음을 허용하지 않으면 무음만 녹음됩니다.
// 현재 녹음 허용 상태를 반환합니다.
var recordPermission: AVAudioSession.RecordPermission
// 사용자에게 오디오 녹음 허용을 요청합니다.
func requestRecordPermission(PermissionBlock)
다른 앱이 백그라운드 오디오를 재생하려고 할 때 이 앱에서 오디오를 어떻게 재생할 것인지, 혹은 재생을 할 것인지 아닐지를 결정합니다.
// 다른 앱이 현재 오디오를 재생하고 있는지를 가리키는 Bool 값입니다.
var isOtherAudioPlaying: Bool
// 다른 앱이 무음으로 오디오를 재생해야하는지
var secondaryAudioShouldBeSilencedHint: Bool
오디오 세션을 활성화하기 전에 상태 변경 알림을 수신하려면 등록해야합니다.
AVAudioSession은 간섭, 라우터 변경 및 미디어 서비스 재설정과 같은 중요한 상태 변경을 나타내는 알림을 발신합니다. 오디오 세션을 활성화하기 전에 이러한 알림을 수신하려면 등록하세요!
// 오디오 간섭이 발생됐을 때 알려줍니다.
class let interruptionNotification: NSNotification.Name
// 시스템 오디오 라우터가 변경되었을 때 알려줍니다.
class let routeChangeNotification: NSNotification.Name
// 다른 애플리케이션에서 주요 오디오가 시작되거나 중단되었을 때 발신됩니다.
class let silenceSecondaryAudioHintNotification: NSNotification.Name
// 미디어 서버가 중단되었을 때 발신됩니다.
class let mediaServicesWereLostNotification: NSNotification.Name
// 미디어 서버가 재시작되었을 때 발신됩니다.
class let mediaServicesWereResetNotification: NSNotification.Name
장치의 오디오 라우터 상태를 검색하고 원하는 입력/출력 라우터 설정을 구성하세요.
오디오 라우터는 오디오 신호의 전자 경로입니다. 장치 오디오 경로의 상태를 검사하고 원하는 입력 및 출력 경로 설정을 구성하세요.
// 현재 오디오 입력과 출력 라우터를 설명하는 객체입니다.
var currentRoute: AVAudioSessionRouteDescription
// 오디오 입력 경로가 가능한지 가리키는 Bool 값입니다.
var isInputAvailable: Bool
// 라우팅 가능한 입력 port들의 배열입니다.
var availableInputs: [AVAudioSessionPortDescription]?
// 선호하는 오디오 라우팅 입력 포트입니다.
var preferredInput: AVAudioSessionPortDescription?
// 선호하는 오디오 라우팅 입력 포트를 선정합니다.
func setPreferredInput(AVAudioSessionPortDescription?)
// 오디오 세션의 현재 입력 포트에 사용할 수 있는 데이터 소스들의 배열입니다.
var inputDataSources: [AVAudioSessionDataSourceDescription]?
// 현재 선택된 입력 데이터 소스입니다.
var inputDataSource: AVAudioSessionDataSourceDescription?
// 오디오 세션의 최근 입력 포트의 데이터 소스를 선택합니다.
func setInputDataSource(AVAudioSessionDataSourceDescription?)
// 현재 오디오 라우터의 사용가능한 출력 데이터 소스들의 배열입니다.
var outputDataSources: [AVAudioSessionDataSourceDescription]?
// 현재 선택된 출력 데이터 소스입니다.
var outputDataSource: AVAudioSessionDataSourceDescription?
// 오디오 세션의 출력 데이터 소스를 설정합니다.
func setOutputDataSource(AVAudioSessionDataSourceDescription?)
// 현재 오디오 라우터를 일시적으로 변경합니다.
func overrideOutputAudioPort(AVAudioSession.PortOverride)
// 현재 라우팅 정책입니다.
var routeSharingPolicy: AVAudioSession.RouteSharingPolicy
// 세션 카테고리, 모드, 라우트 공유 정책, 그리고 옵션들을 설정합니다.
func setCategory(AVAudioSession.Category, mode: AVAudioSession.Mode, policy: AVAudioSession.RouteSharingPolicy, options: AVAudioSession.CategoryOptions)
현재 오디오 장치에서 사용 가능한 오디오 입력 및 출력 채널 수를 검사하고 구성합니다.
// 현재 라우터의 오디오 입력 채널의 수입니다.
var inputNumberOfChannels: Int
// 현재 오디오 라우터에서 사용가능한 입력 채널의 최대값입니다.
var maximumInputNumberOfChannels: Int
// 현재 라우터에서 선호되는 입력 채널 수 입니다.
var preferredInputNumberOfChannels: Int
// 현재 라우터에서 선호되는 입력 채널 수를 설정합니다.
func setPreferredInputNumberOfChannels(Int)
// 오디오 출력 채널 수 입니다.
var outputNumberOfChannels: Int
// 현재 오디오 라우터에서 사용가능한 출력 채널의 최대값입니다.
var maximumOutputNumberOfChannels: Int
// 현재 라우터에서 선호되는 출력 채널의 수 입니다.
var preferredOutputNumberOfChannels: Int
// 현재 라우터에서 선호되는 출력 채널 수를 설정합니다.
func setPreferredOutputNumberOfChannels(Int)
입력 증폭(gain), 샘플 속도 및 I/O 버퍼 지속 시간과 같은 오디오 장치 설정을 검사하고 구성합니다. 입력 증폭, 샘플 속도 및 I / O 버퍼 지속 시간과 같은 오디오 장치 설정을 검사하고 구성합니다.
// 세션과 연관된 입력에 적용되는 증폭값 입니다.
var inputGain: Float
// 입력 증폭이 설정될 수 있는지 가리키는 Bool 값입니다.
var isInputGainSettable: Bool
// 입력 증폭을 특정 값으로 변경합니다.
func setInputGain(Float)
// 사용자에 의해 설정된 시스템 전체 출력 볼륨값입니다.
var outputVolume: Float
// 초단위 오디오 입력 대기 시간
var inputLatency: TimeInterval
// 초단위 오디오 출력 대기 시간
var outputLatency: TimeInterval
// 현재 오디오 샘플 속도(Hz)입니다.
var sampleRate: Double
// 선호되는 샘플 속도(Hz)입니다.
var preferredSampleRate: Double
// 입출력 선호 샘플 속도를 설정합니다.
func setPreferredSampleRate(Double)
// 현재 I/O 버퍼 지속 시간(초)입니다.
var ioBufferDuration: TimeInterval
// 선호되는 I/O 버퍼 지속 시간(초)입니다.
var preferredIOBufferDuration: TimeInterval
// 선호되는 I/O 버퍼 지속 시간(초)을 설정합니다.
func setPreferredIOBufferDuration(TimeInterval)
집약된 I/O 환경설정을 설정하여 선호하는 오디오 입력 동작을 구성하세요.
iOS 10부터 라이브 사진 기능을 지원하는 iPhone 및 iPad에서 AVCaptureSession의 기본 오디오 입력 구성이 변경되었습니다. 이 변화는 백그라운드 오디오 재생을 간섭하지 않고 라이브 사진을 찍을 수 있도록 합니다. 집약된 I/O 환경설정을 설정하여 선호하는 오디오 입력 동작을 구성하세요.
// 오디오 세션의 I/O 집약 환경설정을 설정합니다.
func setAggregatedIOPreference(AVAudioSession.IOType)