[swift] 동영상에서 오디오 추출하여 재생하기
Swift를 사용하여 동영상에서 오디오를 추출하고 재생하는 방법을 알아보겠습니다.
1. AVFoundation 프레임워크 import하기
오디오를 추출하기 위해 AVFoundation 프레임워크를 import해야 합니다. 아래와 같이 코드를 작성하여 import할 수 있습니다.
import AVFoundation
2. AVAsset 생성하기
동영상에서 오디오를 추출하기 위해 AVAsset을 생성해야 합니다. AVAsset은 동영상 또는 오디오 파일을 나타냅니다. 아래와 같이 코드를 작성하여 AVAsset을 생성합니다.
let videoURL = URL(fileURLWithPath: "video.mp4")
let asset = AVAsset(url: videoURL)
3. AVAsset에서 오디오 추출하기
AVAsset에서 오디오를 추출하기 위해 AVAssetTrack을 가져와야 합니다. AVAssetTrack은 오디오 또는 비디오 트랙을 나타냅니다. 아래와 같이 코드를 작성하여 오디오 트랙을 가져옵니다.
let audioTracks = asset.tracks(withMediaType: .audio)
4. AVAssetTrack에서 오디오 데이터 추출하기
오디오 데이터를 추출하기 위해 AVAssetReader와 AVAssetReaderTrackOutput을 사용합니다. 아래와 같이 코드를 작성하여 오디오 데이터를 추출합니다.
let assetReader = try! AVAssetReader(asset: asset)
let trackOutput = AVAssetReaderTrackOutput(track: audioTracks.first!, outputSettings: nil)
assetReader.add(trackOutput)
assetReader.startReading()
var audioData = Data()
while let sampleBuffer = trackOutput.copyNextSampleBuffer() {
if let blockBuffer = CMSampleBufferGetDataBuffer(sampleBuffer) {
var bufferLength = 0
var bufferData: UnsafeMutablePointer<Int8>?
CMBlockBufferGetDataPointer(blockBuffer, atOffset: 0, lengthAtOffsetOut: nil, totalLengthOut: &bufferLength, dataPointerOut: &bufferData)
let data = NSData(bytes: bufferData, length: bufferLength)
audioData.append(data as Data)
}
}
5. 오디오 재생하기
오디오 데이터를 추출한 후, AVAudioPlayer를 사용하여 오디오를 재생할 수 있습니다. 아래와 같이 코드를 작성하여 오디오를 재생합니다.
let audioPlayer = try! AVAudioPlayer(data: audioData)
audioPlayer.play()
전체 코드 예시
import AVFoundation
let videoURL = URL(fileURLWithPath: "video.mp4")
let asset = AVAsset(url: videoURL)
let audioTracks = asset.tracks(withMediaType: .audio)
let assetReader = try! AVAssetReader(asset: asset)
let trackOutput = AVAssetReaderTrackOutput(track: audioTracks.first!, outputSettings: nil)
assetReader.add(trackOutput)
assetReader.startReading()
var audioData = Data()
while let sampleBuffer = trackOutput.copyNextSampleBuffer() {
if let blockBuffer = CMSampleBufferGetDataBuffer(sampleBuffer) {
var bufferLength = 0
var bufferData: UnsafeMutablePointer<Int8>?
CMBlockBufferGetDataPointer(blockBuffer, atOffset: 0, lengthAtOffsetOut: nil, totalLengthOut: &bufferLength, dataPointerOut: &bufferData)
let data = NSData(bytes: bufferData, length: bufferLength)
audioData.append(data as Data)
}
}
let audioPlayer = try! AVAudioPlayer(data: audioData)
audioPlayer.play()
위와 같이 코드를 작성하면 동영상에서 오디오를 추출하여 재생할 수 있습니다.