10

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

这是我选择字幕的方法:

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];

无论我在选择字幕之前还是之后放置这个片段,结果都是一样的。

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

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

4

2 回答 2

10

我在 Apple Developer Forums 上问了这个问题,得到了 Apple 员工的回答

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

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

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

编辑

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

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

于 2013-08-15T19:38:14.780 回答
3

我找到了正确修改文本前景色和背景的解决方法。只需将样式分离到多个 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

于 2017-06-22T07:26:47.897 回答