Настройка субтитров с помощью 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