将字幕添加到Avplayer视频中



我正在使用 AVPlayerView从我的应用程序捆绑包目录中显示一些本地视频。现在,我想添加显示字幕的能力,以增加内容的可访问性。

由于我是程序员,电影制片人以及必须创建字幕的人,所以我对任何字幕格式都开放&解决方案。我发现了一些常见格式(.srt.scc),但是,我想知道如何使用AVPlayer"以编程方式"使用它们。

我初始化视频,例如:

let myVideoPlayer = AVQueuePlayer(url: URL(fileURLWithPath: "/myPath"))

例如,如果您在QuickTime中播放字幕视频,则足以在同一目录中将两个文件(字幕&视频)放在同一目录中。我找不到任何提示或解决方案,例如在AVPlayer中添加字幕文件 - 我期望的。看来这不是正确的方法?

其他线程提到的是,Avplayers closedCaptionDisplayEnabledClosed Caption轨道效果很好。但是,这再次使我提出了一个问题:如何通过单独的文件显示Avplayer的字幕(例如.srt,.scc)?

我使用 ixany 的建议(在视频文件中添加字幕),但是后来我不得不强制使用此代码显示字幕:

let playerItem = AVPlayerItem(asset: asset)
if let group = playerItem.asset.mediaSelectionGroup(forMediaCharacteristic: .legible) {
    let locale = Locale(identifier: "en-EN")
    let options = AVMediaSelectionGroup.mediaSelectionOptions(from: group.options, with: locale)
    if let option = options.first {
        playerItem.select(option, in: group)
    }
}

并提防在模拟器中对此进行测试。对我来说,这仅在真实设备上起作用。

我最终得到了以下解决方法:将我的材料从 Final Cut Pro X as .m4v导出,用 SRT Edit Pro手动创建字幕,然后用 Subler将它们添加到视频中,所以我只有一个文件中的一个文件结束。这样的方式Avplayer/QuickTime自动检测字幕 - 轨道。

这是在Avplayer中添加关闭标题的完美答案。需要将此代码粘贴到您的代码中。谢谢

let playerItem = AVPlayerItem(asset: asset)
if let group = playerItem.asset.mediaSelectionGroup(forMediaCharacteristic: .legible) {
    let locale = Locale(identifier: "en")
    let options = AVMediaSelectionGroup.mediaSelectionOptions(from: group.options, with: locale)
    if let option = options.first {
        playerItem.select(option, in: group)
    }
}

最新更新