【问题标题】:Show subtitles with an AVFoundation AVPlayer on OS X在 OS X 上使用 AVFoundation AVPlayer 显示字幕
【发布时间】:2012-07-03 13:35:15
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你试过closedCaptionDisplayEnabled = YES
  • @DustinRowland 谢谢,我错过了。刚试了一下,据我所知没有任何改变。
  • 对我有用的是使用 AVAsset 和 AVPlayerItem,这让我可以更好地控制我的对象。
  • closedCaptionDisplayEnabled 仅适用于隐藏式字幕轨道。它应该适用于来自 iTunes 的电影,并且绝对适用于从 EyeTV 导出的视频。它对字幕轨道没有影响。
  • @joerick 你找到解决这个问题的方法了吗?

标签: objective-c macos cocoa avfoundation


【解决方案1】:

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

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

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

我希望这会有所帮助。

【讨论】:

  • 非常感谢。有用的答案,但我认为它不会在我的情况下起到作用。我们正在接收作为视频流或视频文件的一部分的字幕,我们目前无权访问 SRT 文件。如果我想出一种提取方法,可能会派上用场吗?!
【解决方案2】:

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

【讨论】:

  • 拜托,如果您能分享示例代码,那将非常有帮助。谢谢。
  • 使用 sublerCLI 可以将 srt 或 scc 字幕转换为容器 m4v 中的 AVMediaTypeSubtitle 和 AVMediaTypeClosedCaption 轨道 ===============> var sublerTask = NSTask( ) sublerTask.launchPath = sublerPath // SublerCLI 路径 sublerTask.arguments = [ "-source",srtFilePath,"-dest",tempM4V,"-language",language,"-metadata", language] sublerTask.launch() sublerTask. waitUntilExit()
  • 之后,您可以将 m4v 读取为 AVAsset 并从中获取字幕轨道
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-22
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多