2

我正在使用AVPlayerView来显示我的 Apps Bundle 目录中的一些本地视频。现在我想添加显示字幕的功能,以增加内容的可访问性。

由于我是程序员、电影制作人以及必须创建字幕的人,因此我对任何字幕格式和解决方案持开放态度。我发现了一些常见的格式(.srt, .scc),但是,我想知道如何使用AVPlayer.

我初始化视频,如:

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

例如,如果您在 QuickTime 中播放带字幕的视频,则将两个文件(字幕和视频)放在同一目录中就足够了。我找不到任何提示或解决方案,例如将 subtitle-file-url 添加到AVPlayer,这是我所期望的。这似乎不是正确的方法?

其他线程提到 AVPlayersclosedCaptionDisplayEnabledClosed Caption轨道配合得很好。但这又让我想到了一个问题:如何使用 AVPlayer 从单独的文件(如 .srt、.scc)显示字幕?

4

3 回答 3

2

我使用了ixany的建议(将字幕添加到视频文件),但后来我不得不强制 AVPlayer 使用以下代码显示字幕:

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)
    }
}

并谨防在模拟器中进行测试。对我来说,这仅适用于真实设备。

于 2018-07-19T10:08:30.137 回答
0

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

于 2016-12-18T15:03:47.990 回答
-1

这是在 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)
    }
}
于 2021-11-10T09:32:05.877 回答