Показать субтитры с AVFoundation AVPlayer на OS X

Я пытаюсь отображать субтитры при воспроизведении видео с помощью AVFoundation на OS X.

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

В iOS метод -[AVPlayerItem selectMediaOption:inMediaSelectionGroup:] используется для включения дорожек субтитров. Этот метод недоступен в SDK 10.7. Есть ли другой способ показать субтитры?

EDIT: Quicktime Player X поддерживает субтитры, например, при открытии этого фильма подменю субтитров, как представляется, предлагает выбор языка и отображает их при выборе английского языка. Это заставляет меня думать, что они включены в API...

Ответы

Ответ 1

Я столкнулся с этим же вопросом сам. Я обнаружил, что, к сожалению, единственный способ сделать это, кроме переключения на QTKit, - создать отдельный слой субтитров (CATextLayer) и соответствующим образом разместить его в качестве подуровня слоя игрока. Идея состоит в том, что вы настраиваете периодического наблюдателя времени для запуска каждую секунду или около того и обновляете субтитры вместе с (и это необязательно) некоторый элемент пользовательского интерфейса, который у вас есть, который показывает, какое время прошло в видео.

Я создал базовый класс парсера файлов SubRip (.srt); вы можете найти его здесь: https://github.com/sstigler/SubRip-for-Mac. Обязательно проверьте вики для документации. Класс доступен в соответствии с условиями лицензии BSD.

Еще одна проблема, с которой вы можете столкнуться, заключается в том, как динамически настраивать высоту CATextLayer для учета различной длины субтитров и различной ширины содержащего представления (если вы решите сделать его изменяемым пользователем). Я нашел отличный подкласс CALayoutManager, который делает это, и сделал некоторые изменения к нему, чтобы заставить его работать для того, что я пытался: https://github.com/sstigler/height-for-width.

Надеюсь, это поможет.

Ответ 2

Способ добавления файла субтитров заключается в добавлении субтитров scc в качестве AVMediaTypeClosedCaption трека к AVPlayer с использованием AVMutableCompositionTrack, и плеер будет управлять им, я попробовал его, и он работал, или добавив текстовый файл с текстом быстрого текста или любым текстом, как AVMediaTypeText, и плеер покажет субтитры, которые я не знаю, почему этот AVMediaTypeSubtitle отслеживает, какой файл субтитров поддерживается для него.