iOS 앱을 개발하다 보면 비디오의 썸네일을 생성해야 하는 경우가 많습니다. VideoToolbox는 iOS에서 비디오 프레임을 디코딩하고 처리하는 데 사용되는 프레임워크로, 썸네일 생성에 매우 유용합니다. 이 글에서는 VideoToolbox를 사용하여 iOS 앱에서 비디오 썸네일을 생성하는 방법을 알아보겠습니다.
비디오 프레임 추출
VideoToolbox를 사용하여 비디오의 프레임을 추출하려면 AVAsset, AVAssetImageGenerator 및 AVAssetTrack을 사용하여 비디오 파일에서 이미지를 생성해야 합니다.
아래는 비디오 파일에서 이미지를 생성하는 방법입니다.
import AVFoundation
func generateThumbnailFromVideo(videoURL: URL, completion: @escaping (UIImage?) -> Void) {
let asset = AVAsset(url: videoURL)
let imgGenerator = AVAssetImageGenerator(asset: asset)
imgGenerator.appliesPreferredTrackTransform = true
let time = CMTimeMake(value: 1, timescale: 2)
imgGenerator.generateCGImagesAsynchronously(forTimes: [NSValue(time: time)]) { _, cgImage, _, _, _ in
if let cgImage = cgImage {
let thumbnail = UIImage(cgImage: cgImage)
completion(thumbnail)
} else {
completion(nil)
}
}
}
위 코드에서 generateThumbnailFromVideo
함수는 비디오의 URL을 받아 해당 파일로부터 썸네일 이미지를 생성하는 함수입니다.
VideoToolbox를 사용한 비디오 프레임 디코딩
VideoToolbox를 사용하여 비디오 프레임을 디코딩하려면 AVAsset, AVAssetTrack 및 VTDecompressionSession을 사용하여 프레임을 디코딩해야 합니다.
비디오 프레임을 디코딩하고 이미지를 생성하는 방법은 다음과 같습니다.
import VideoToolbox
func generateThumbnailFromVideoUsingVideoToolbox(videoURL: URL, completion: @escaping (UIImage?) -> Void) {
let asset = AVAsset(url: videoURL)
let reader = try? AVAssetReader(asset: asset)
guard let videoTrack = asset.tracks(withMediaType: .video).first else {
completion(nil)
return
}
let outputSettings: [String: Any] = [kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_32ARGB]
let videoOutput = AVAssetReaderTrackOutput(track: videoTrack, outputSettings: outputSettings)
reader?.add(videoOutput)
let sampleBuffer = videoOutput.copyNextSampleBuffer()
if let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) {
let ciImage = CIImage(cvImageBuffer: imageBuffer)
let context = CIContext()
if let cgImage = context.createCGImage(ciImage, from: ciImage.extent) {
let thumbnail = UIImage(cgImage: cgImage)
completion(thumbnail)
} else {
completion(nil)
}
} else {
completion(nil)
}
}
위 코드에서 generateThumbnailFromVideoUsingVideoToolbox
함수는 VideoToolbox를 사용하여 비디오의 URL을 받아 해당 파일로부터 썸네일 이미지를 생성하는 함수입니다.
결론
VideoToolbox를 사용하여 iOS 앱에서 비디오 썸네일을 생성하는 방법에 대해 다뤄보았습니다. VideoToolbox는 비디오 프레임을 디코딩하는 데 매우 강력하고 유연한 도구입니다. 앱에서 비디오 처리 기능을 구현할 때 VideoToolbox를 활용하여 효율적으로 작업할 수 있습니다.
참고 문헌:
- Apple Developer Documentation
-
[AVFoundation Apple Developer Documentation](https://developer.apple.com/documentation/avfoundation) -
[VideoToolbox Apple Developer Documentation](https://developer.apple.com/documentation/videotoolbox)
이제 VideoToolbox를 사용하여 iOS 앱에서 비디오 썸네일을 생성하는 작업을 시작할 수 있을 것입니다.