Настройка субтитров с помощью AVPlayer

я смог отобразить трек субтитров с 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 папка.)

любые мысли о том, как это сделать?

2 ответов


Я задал этот вопрос на форумах разработчиков Apple, и я получил ответ от сотрудника Apple:

на textStyleRules свойство применяется только к содержимому WebVTT. Ваш локальный файл, вероятно, содержит субтитры в формате TX3G.

вы правы, что в документации не упоминается это ограничение, поэтому вы должны подать ошибку, чтобы мы могли обновить нашу документацию.

Итак, я открою радар, чтобы попросить их обновить docs и я опубликую его номер здесь, Если кто-то захочет его обмануть.

редактировать:

Я создал rdar://14923673 чтобы попросить Apple обновить документы об этом текущем ограничении. Я также создал rdar://14923755 чтобы попросить их предоставить поддержку субтитров в формате TX3G.

пожалуйста, обманите их, если вы затронуты этой проблемой.


Я нашел обходной путь для корректного изменения цвета и фона переднего плана текста. Просто отдельные стили для нескольких 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