使用AVPlayer自定义字幕

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

以下是我如何select字幕:

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

无论是在select字幕之前还是之后放入此片段,结果都是一样的。

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

任何想法如何做到这一点?

我在苹果开发者论坛上问了这个问题,我从苹果的一名员工那里得到了答案 :

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

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

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

编辑

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

如果你受到这个问题的影响请欺骗他们。

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

请不要问我为什么,这个解决scheme来自尝试和错误的XD