Добавление субтитров к видео AVPlayer
Я использую AVPlayerView
чтобы показать некоторые локальные видео из моего каталога Apps Bundle. Теперь я хочу добавить возможность отображения субтитров для большей доступности моего контента.
Поскольку я программист, режиссер, а также тот, кто должен создавать субтитры, я открыт для любых форматов и решений субтитров. Я обнаружил несколько распространенных форматов (.srt
, .scc
), но мне интересно, как работать с ними "программно", используя AVPlayer
,
Я инициализирую видео как:
let myVideoPlayer = AVQueuePlayer(url: URL(fileURLWithPath: "/myPath"))
Например, если вы воспроизводите видео с субтитрами в QuickTime, достаточно иметь оба файла (субтитры и видео) в одном каталоге. Я не мог найти никаких подсказок или решений, таких как добавление файла субтитров-URL к AVPlayer
, чего я и ожидал. Кажется, это не правильный подход?
Другие темы упоминают, что AVPlayers closedCaptionDisplayEnabled
хорошо работает с Closed Caption
дорожек. Но опять же это подводит меня к вопросу: как я могу отображать субтитры с помощью AVPlayer из отдельного файла (например,.srt, .scc)?
3 ответа
В итоге я нашел следующий способ: экспортировать материал из Final Cut Pro X
как.m4v, создавая субтитры вручную с SRT Edit Pro
а затем добавив их в видеофайл с Subler
Итак, у меня есть только один файл в конце. Таким образом, AVPlayer / QuickTime автоматически определяет дорожку субтитров.
Я использовал предложение ixany(добавить субтитры в видеофайл), но затем мне пришлось заставить AVPlayer отображать субтитры, используя этот код:
let playerItem = AVPlayerItem(asset: asset)
if let group = playerItem.asset.mediaSelectionGroup(forMediaCharacteristic: .legible) {
let locale = Locale(identifier: "en-EN")
let options = AVMediaSelectionGroup.mediaSelectionOptions(from: group.options, with: locale)
if let option = options.first {
playerItem.select(option, in: group)
}
}
И остерегайтесь тестирования этого в симуляторе. Для меня это работает только на реальном устройстве.
Это идеальный ответ для добавления субтитров в AVPlayer. Нужно просто вставить этот код в свой код. Спасибо
let playerItem = AVPlayerItem(asset: asset)
if let group = playerItem.asset.mediaSelectionGroup(forMediaCharacteristic: .legible) {
let locale = Locale(identifier: "en")
let options = AVMediaSelectionGroup.mediaSelectionOptions(from: group.options, with: locale)
if let option = options.first {
playerItem.select(option, in: group)
}
}