Выбор видео с высокой скоростью передачи данных из основного списка воспроизведения.m3u8 для воспроизведения видео с помощью AVPlayer

#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