[swift] Swift에서 비디오 재생 시 자막 추가하기

비디오 재생 시 자막을 추가하는 것은 사용자 경험을 향상시키고 비디오 내용을 이해하는 데 도움이 될 수 있습니다. Swift에서 AVKit 및 AVFoundation 프레임워크를 사용하여 비디오에 자막을 추가하는 방법을 알아보겠습니다.

1. 비디오와 자막 파일 가져오기

먼저 비디오 파일 및 자막 파일을 프로젝트에 추가합니다. Xcode에서 프로젝트 네비게이터에서 비디오 및 자막 파일을 찾아 프로젝트에 드래그 앤 드롭합니다.

2. AVPlayerViewController 사용하기

AVPlayerViewController를 사용하여 비디오를 재생하고 그 위에 자막을 나타낼 것입니다. AVPlayerViewController의 인스턴스를 만들고 비디오 파일을 로드합니다.

import AVKit
import AVFoundation

guard let videoURL = Bundle.main.url(forResource: "video", withExtension: "mp4") else {
    return
}

let player = AVPlayer(url: videoURL)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.present(playerViewController, animated: true) {
    player.play()
}

3. 자막 파일 로드하기

이제 자막 파일을 AVPlayerViewController에 추가하여 자막을 표시할 수 있습니다. 자막 파일은 비디오 트랙에 연결되어야 하므로 AVPlayerItem에 자막 트랙을 추가하는 방법을 사용해야 합니다.

let subtitleURL = Bundle.main.url(forResource: "subtitle", withExtension: "vtt")
let asset = AVURLAsset(url: subtitleURL)
let subTitle = AVMutableComposition()

asset.loadValuesAsynchronously(forKeys: ["tracks"]) {
    var error: NSError?
    let status = asset.statusOfValue(forKey: "tracks", error: &error)
    if status == .loaded {
        let playerItem = AVPlayerItem(asset: asset)
        let textTrack = asset.tracks(withMediaType: AVMediaType.subtitle).first
        let playerItemMetadataOutput = AVPlayerItemMetadataOutput(identifiers: nil)
        playerItemMetadataOutput.setDelegate(self, queue: DispatchQueue.main)
        playerItem.seek(to: CMTime.zero)
        playerItemMetadataOutput.setDelegate(self, queue: DispatchQueue.main)
        playerItemMetadataOutput.setDelegate(self, queue: DispatchQueue.main)
        playerItem.add(playerItemMetadataOutput)
    }
}

4. 자막 표시하기

AVPlayerViewController의 contentOverlayView를 사용하여 자막을 표시합니다.

func metadataOutput(_ output: AVPlayerItemMetadataOutput, didOutputTimedMetadataGroups groups: [AVTimedMetadataGroup], from track: AVPlayerItemTrack?) {
    for timedMetadataGroup in groups {
        for metadata in timedMetadataGroup.items {
            if let metadata = metadata as? AVMetadataItem {
                if let value = metadata.value {
                    // Display the subtitle text
                    print(value)
                }
            }
        }
    }
}

이제 비디오를 재생하면 자막이 AVPlayerViewController 위에 표시될 것입니다.

자막 파일을 비디오에 추가하여 사용자가 비디오를 더 쉽게 이해할 수 있도록 도와주는 간단한 방법입니다. 이를 통해 Swift로 자막을 포함한 멋진 비디오 앱을 만들 수 있습니다.

참고 자료