【问题标题】:Customizing subtitles with AVPlayer使用 AVPlayer 自定义字幕
【发布时间】:2013-08-07 20:55:18
【问题描述】:

我能够在 iOS 6 上显示带有 AVPlayer 的字幕轨道,但我无法自定义它。它只是显示相同的样式(小字体,白色)。

这是我选择字幕的方法:

AVMediaSelectionGroup *subtitle = [asset mediaSelectionGroupForMediaCharacteristic: AVMediaCharacteristicLegible];
[self.videoPlayer.currentItem selectMediaOption:subtitle.options[0] inMediaSelectionGroup: subtitle];

以及我如何尝试自定义字幕:

AVTextStyleRule *rule = [[AVTextStyleRule alloc] initWithTextMarkupAttributes:@{
                         (id)kCMTextMarkupAttribute_ForegroundColorARGB : @[ @1, @1, @0, @0 ],
                         (id) kCMTextMarkupAttribute_ItalicStyle : @(YES)}];

self.videoPlayer.currentItem.textStyleRules = @[rule];

无论我把这个sn-p放在选择字幕之前还是之后,结果都是一样的。

AVPlayer 是使用本地(文件)URL(mp4 文件)创建的。

关于如何做到这一点的任何想法?

【问题讨论】:

  • 这不是经验,但您可以尝试创建两个单独的规则,为每个规则设置一个属性,然后将这两个规则添加到规则数组中以建立?
  • 感谢您的建议,但没有成功。

标签: ios objective-c ios6 avplayer


【解决方案1】:

我在 Apple 开发者论坛上提出了这个问题,并从一名 Apple 员工那里得到了an answer

textStyleRules 属性仅适用于 WebVTT 内容。您的本地文件可能带有 TX3G 格式的字幕。

你说得对,文档没有提到这个限制,所以你应该提交一个错误,以便我们可以更新我们的文档。

所以,我会打开一个雷达,要求他们更新文档,如果有人想欺骗它,我会在此处发布它的编号。

编辑

我创建了rdar://14923673 来要求 Apple 更新有关此当前限制的文档。我还创建了rdar://14923755,要求他们支持TX3G格式的字幕。

如果您受到此问题的影响,请欺骗他们。

【讨论】:

  • 我要复制!让我们给他们一些压力。 :)
  • 我还没能做到这一点。我会在今天晚些时候尝试这样做。我打算打开 2 个雷达:一个关于文档,另一个关于提供此功能。
  • 鉴于他们无论如何都能够将其可视化,因此他们支持 Web 资源而不是本地资源似乎是矛盾的。我认为他们可以使用相同的代码来添加文本。
  • 我同意。这就是为什么我会打开两个雷达:一个是让他们在文档上明确说明这种方法只支持网络资源,另一个是让它与本地资源兼容。
  • “所以我们可以更新我们的文档”,来自 Apple?哈哈哈,好吧..
【解决方案2】:

我找到了正确修改文本前景色和背景的解决方法。 只需将样式分离到多个 AVTextStyleRule。

func initSubtitleStyle() {
    let textStyle:AVTextStyleRule = AVTextStyleRule(textMarkupAttributes: [
        kCMTextMarkupAttribute_CharacterBackgroundColorARGB as String: [0.2,0.3,0.0,0.3]
        ])!


    let textStyle1:AVTextStyleRule = AVTextStyleRule(textMarkupAttributes: [
        kCMTextMarkupAttribute_ForegroundColorARGB as String: [0.2,0.8,0.4,0.0]
        ])!

    let textStyle2:AVTextStyleRule = AVTextStyleRule(textMarkupAttributes: [
        kCMTextMarkupAttribute_BaseFontSizePercentageRelativeToVideoHeight as String: 20,
        kCMTextMarkupAttribute_CharacterEdgeStyle as String: kCMTextMarkupCharacterEdgeStyle_None
        ])!

    player.currentItem?.textStyleRules = [textStyle, textStyle1, textStyle2]
}

请不要问我为什么,该解决方案来自尝试和错误 XD

【讨论】:

  • 哇,谢谢伙计,我浪费了一整天,因为随便你知道是否可以将avplayer的字幕呈现到另一个视图中?不在一层,再次感谢
猜你喜欢
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 2020-04-01
  • 1970-01-01
  • 2020-05-27
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
相关资源
最近更新 更多