【问题标题】:Displaying subtitles using AVPlayerViewController with swift使用带有 swift 的 AVPlayerViewController 显示字幕
【发布时间】:2015-12-22 18:25:39
【问题描述】:

我是 Swift 和视频流的新手。我正在尝试在 AppleTV 中播放视频。 是否有人尝试从外部 srt 文件中快速添加带有 AVPlayerViewController 的字幕。我正在尝试使用此处的代码执行相同的操作:https://github.com/mhergon/MPMoviePlayerController-Subtitles

我更改了代码以满足我的要求,但它引发了异常:

NSInvalidArgumentException',原因:'无法解析约束格式: 无法解释“|”字符,因为相关视图没有超级视图 H:|-(20)-[l]-(20)-|

此时在 Subtitles.swift 文件中:

var constraints = NSLayoutConstraint.constraintsWithVisualFormat("H:|-(20)-[l]-(20)-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["l" : subtitleLabel!])
    subtitleContainer?.addConstraints(constraints)

【问题讨论】:

  • 你能在故事板或 xib 上显示配置你的视图吗?还是你在代码中设置的列表元素视图?

标签: ios mpmovieplayercontroller tvos subtitle avplayerviewcontroller


【解决方案1】:

错误消息抱怨说没有超级视图。查看源代码,我会假设容器设置不正确。这会导致 subtitleLabel 不是超级视图的子视图,从而导致约束失败。

【讨论】:

  • 是的,你是对的容器没有在 getContainer() 中设置。我不确定为什么不设置。我不明白使用 MPMoviePlayerController 而不是使用 AVPLayerViewController 时 c.tag == 1006 是如何正确的。
  • @Enmud 你能展示你的代码来设置你的视图吗?
  • 感谢您的回复。在下面的代码中,正在设置字幕容器。但我没有在任何地方找到下面代码中提到的标签。您可以在 github 存储库中检查相同的代码(有问题的链接)。 private func getContainer() { for a in view.subviews { for b in a.subviews { for c in b.subviews { if c.tag == 1006 { subtitleContainer = c } } } } }
  • @Enmud 你是否将容器视图的标签设置为 1006?我假设一个 xib 文件或情节提要,在那里你可能需要将一个视图标记为容器视图。 github代码似乎期望容器视图的标签值为1006。
  • 我也没有设置这个我确定没有标签 1006 的视图。但令人惊讶的是,容器是在存储库的原始代码中设置的并显示字幕。我很困惑。您可以在设置此项的位置调试原始存储库代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多