#objective-c #avplayer #tvos
#objective-c #avplayer #tvos
Вопрос:
У меня есть mater playlist .m3u8, файлы которого содержат другой индексный файл типа .m3u8 теперь требуется, чтобы приложение воспроизводило видео с высокой скоростью передачи данных, возможно ли этого добиться и воспроизводить видео с высокой скоростью передачи данных с помощью AVPlayer (apple tvOS).
Основной список воспроизведения содержит следующие индексные файлы
EXTM3U
EXT-X-STREAM-INF: PROGRAM-ID = 1, ПОЛОСА ПРОПУСКАНИЯ = 378000, РАЗРЕШЕНИЕ = 256×144, КОДЕКИ = «avc1.42001e, mp4a.40.2»
someurl.m3u8
EXT-X-STREAM-INF: PROGRAM-ID = 1, ПОЛОСА ПРОПУСКАНИЯ = 2072000, РАЗРЕШЕНИЕ = 480×270, КОДЕКИ = «avc1.42001e, mp4a.40.2»
someurl.m3u8
EXT-X-STREAM-INF: PROGRAM-ID = 1, ПОЛОСА ПРОПУСКАНИЯ = 2671000, РАЗРЕШЕНИЕ = 640×360, КОДЕКИ = «avc1.4d001f, mp4a.40.2»
someurl.m3u8
Теперь в соответствии с требованиями приложение должно воспроизводить URL ниже из основного списка воспроизведения.
ID = 1, ПОЛОСА ПРОПУСКАНИЯ = 2671000, РАЗРЕШЕНИЕ = 640×360, КОДЕКИ = «avc1.4d001f,mp4a.40.2» someurl.m3u8
Возможно ли добиться этого с помощью AVPlayer.
Ответ №1:
Настройка
player.currentItem?.preferredPeakBitRate = 2072000
устанавливает только верхнюю границу для битрейта, поэтому, например, вы можете исключить самый высокий битрейт, используя это.
Дело в том, что AVFoundation не будет выбирать битрейт, превышающий пропускную способность сетевого соединения, потому что это приведет к прерывистому воспроизведению, что не является разумной стратегией.
Тем не менее, если вы действительно хотите принудительно воспроизвести ресурс с самым высоким битрейтом, вы можете перехватить выборку внешнего файла m3u8 и подавить записи с более низким битрейтом или проанализировать файл и напрямую воспроизвести URL-адрес с самым высоким битрейтом AVPlayer
.
Комментарии:
1. Привет, ритмичный, я использовал тот же подход к настройке preferredPeakBitRate, но я думаю, что в зависимости от пропускной способности проигрыватель воспроизводит видео низкого качества. Я думал о другом решении, которое вы предоставили, разбирая файл и воспроизводя URL с наивысшим битрейтом, но я столкнулся с проблемой в том, как разобрать файл, можете ли вы предоставить какую-либо ссылку или код для разбора вышеупомянутого файла.
2. Есть некоторые cocoapod, которые анализируют файлы m3u8, например github.com/alexsun/M3U8Paser
3. @RhythmicFistman А что, если в плейлисте тоже есть субтитры в главном. Я извлек файл разрешения и передал его, но затем субтитры были недоступны в характеристиках. Также пробовал mutablerequest, но безуспешно. Любая помощь? Пример
4. #EXTM3U #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID=»subs»,NAME=»FIL»,DEFAULT=NO,AUTOSELECT=YES,LANGUAGE=»Filipino»,URI=»layer06.m3u8 » #EXT-X-STREAM-INF:ИДЕНТИФИКАТОР ПРОГРАММЫ= 1, ПОЛОСА ПРОПУСКАНИЯ = 334164, РАЗРЕШЕНИЕ = 428×240, СУБТИТРЫ = «subs» layer05.m3u8 #EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID = 1, ПОЛОСА ПРОПУСКАНИЯ = 334164,URI =»iframe_layer05.m3u8″ #EXT-X-STREAM-INF:PROGRAM-ID = 1, ПОЛОСА ПРОПУСКАНИЯ = 672686, РАЗРЕШЕНИЕ = 640×360, СУБТИТРЫ = «subs» layer04.m3u8 #EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID = 1, ПОЛОСА ПРОПУСКАНИЯ = 672686, URI =»iframe_layer04.m3u8″ #EXT-X-STREAM-INF:PROGRAM-ID = 1, ПОЛОСА ПРОПУСКАНИЯ = 1046294, РАЗРЕШЕНИЕ = 960×540, СУБТИТРЫ = «subs» layer03.m3u8