16

我正在尝试在 OS X 上使用 AVFoundation 播放视频时显示字幕。

我查看了文档,但找不到启用字幕轨道的方法。API 包含对字幕轨道的多个引用,这让我相信它是受支持的。

在 iOS 上,该方法-[AVPlayerItem selectMediaOption:inMediaSelectionGroup:]用于启用字幕轨道。此方法在 10.7 SDK 中不可用。还有其他显示字幕的方法吗?

编辑:Quicktime Player X 支持字幕,例如在打开这部电影时,字幕子菜单似乎提供了一种语言选择,并在选择英语时显示它们。这让我相信它们包含在 API 中......

4

2 回答 2

6

我自己也遇到了同样的问题。我发现不幸的是,除了切换到 QTKit 之外,唯一的方法是制作一个单独的字幕层(CATextLayer)并将其适当地定位为播放器层的子层。这个想法是您设置一个周期性时间观察器以每秒左右触发并更新字幕,以及(这是可选的)您可能拥有的一些 UI 元素,用于显示视频中经过的时间。

我创建了一个基本的 SubRip (.srt) 文件解析器类;你可以在这里找到它:https ://github.com/sstigler/SubRip-for-Mac 。请务必查看 wiki 以获取文档。该类在 BSD 许可条款下可用。

您可能遇到的另一个挑战是如何动态调整 CATextLayer 的高度以适应不同长度的字幕和不同宽度的包含视图(如果您选择使其可调整大小)。我找到了一个很棒的 CALayoutManager 子类来执行此操作,并对其进行了一些修改以使其适用于我想要做的事情:https ://github.com/sstigler/height-for-width 。

我希望这有帮助。

于 2012-09-29T20:51:50.050 回答
2

添加字幕文件的方法是使用 AVMutableCompositionTrack 将 scc 字幕作为 AVMediaTypeClosedCaption 轨道添加到 AVPlayer,播放器将控制它播放器会显示字幕我不知道为什么这个 AVMediaTypeSubtitle 跟踪它支持什么字幕文件

于 2016-01-14T07:10:59.670 回答