[swift] CoreMedia 외부 입력 및 출력 관리

iOS 앱을 개발하다 보면 카메라나 마이크와 같은 외부 미디어 입력 장치를 사용하는 경우가 있습니다. 또한, 비디오나 오디오를 외부 디스플레이나 스피커로 출력해야 하는 경우도 있습니다. CoreMedia 프레임워크는 이러한 외부 입력 및 출력을 효과적으로 관리하는데 도움이 됩니다.

외부 입력 관리하기

카메라 및 마이크 관리

CoreMedia를 사용하여 iOS 앱에서 카메라 및 마이크를 관리하는 방법은 다음과 같습니다.

import AVFoundation

let session = AVCaptureSession()

// 카메라 입력 추가
if let device = AVCaptureDevice.default(for: .video) {
    do {
        let input = try AVCaptureDeviceInput(device: device)
        if session.canAddInput(input) {
            session.addInput(input)
        }
    } catch {
        print("Error adding video input: \(error)")
    }
}

// 마이크 입력 추가
if let device = AVCaptureDevice.default(for: .audio) {
    do {
        let input = try AVCaptureDeviceInput(device: device)
        if session.canAddInput(input) {
            session.addInput(input)
        }
    } catch {
        print("Error adding audio input: \(error)")
    }
}

외부 오디오 입력 관리

외부 오디오 입력장치를 관리하기 위해서는 AVAudioEngine 및 AVAudioSession을 사용할 수 있습니다.

import AVFoundation

let audioEngine = AVAudioEngine()
let audioSession = AVAudioSession.sharedInstance()

do {
  try audioSession.setCategory(.record, mode: .measurement, options: .defaultToSpeaker)
  try audioSession.setActive(true)
} catch {
  print("Error setting up audio session: \(error)")
}

// 외부 오디오 입력 노드 추가
if let inputNode = audioEngine.inputNode {
  let format = inputNode.inputFormat(forBus: 0)
  inputNode.installTap(onBus: 0, bufferSize: 1024, format: format) { (buffer, time) in
    // Process audio buffer
  }
}

외부 출력 관리하기

외부 디스플레이 출력

iOS 앱에서 외부 디스플레이로 비디오를 출력하는 경우, AVPlayerLayer를 사용하여 외부 디스플레이에 비디오를 표시할 수 있습니다.

import AVFoundation

let player = AVPlayer(url: videoURL)
let playerLayer = AVPlayerLayer(player: player)

// 외부 디스플레이에 비디오 출력
if let externalDisplay = UIScreen.screens.first(where: { $0 != UIScreen.main }) {
  playerLayer.frame = externalDisplay.bounds
  externalDisplay.overscanCompensation = .none
  externalDisplay.addSublayer(playerLayer)
  player.play()
}

외부 스피커 출력

외부 스피커로 오디오를 출력하기 위해서는 AVAudioPlayer를 사용하여 오디오를 외부 스피커로 출력할 수 있습니다.

import AVFoundation

let audioURL = Bundle.main.url(forResource: "audio", withExtension: "mp3")
let audioPlayer = try AVAudioPlayer(contentsOf: audioURL)
audioPlayer.play()

CoreMedia 프레임워크를 사용하면 iOS 앱에서 외부 입력 및 출력을 쉽게 관리할 수 있습니다. 위의 예시 코드를 참고하여 앱에 맞게 외부 미디어 입력 및 출력을 관리해보세요.

참고 자료