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

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

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

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

РЕДАКТИРОВАТЬ: Quicktime Player X поддерживает субтитры, например, при открытии этого фильма появляется подменю субтитров, предлагающее выбор языка, и будет отображаться при выборе английского языка. Это приводит меня к мысли, что они включены в API...

2 ответа

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

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

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

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

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

Другие вопросы по тегам