2

Мы заметили чрезвычайно низкую производительность HLS в приложении iOS для видео по требованию в рамках разработки в сетях с высокой задержкой и надеялись выполнить ручную настройку того, как происходит скачивание.iOS HTTP Live Streaming - Byte-range запрашивается, когда Bitrate неизвестен?

Файлы (полностью закодированные, начальные и завершающие, файлы TS/M3U8) уже отключаются от CloudFront, поэтому на стороне сервера мы можем только так много сделать, чтобы оптимизировать это (я думаю).

Другая надежда состояла в том, чтобы запустить сервер localhost в приложении iOS, этот «сервер» управляет загрузками, уделяя приоритетное внимание меньшему количеству загрузок более крупного сегмента по более частым загрузкам меньшего сегмента. Таким образом, мы надеемся, обойти высокую задержку в сети, сохраняя при этом доступную доступную пропускную способность.

Идея здесь заключалась в том, чтобы сохранить знания базы «index.m3u8» и всех битрейтов, которые она описывает, для себя и выставлять только i-й наивный «список воспроизведения» файлов TS (без какой-либо информации о битрейтах) в iOS ,

Однако, когда я застрял, я пытаюсь выяснить, как iOS будет запрашивать файлы TS. То есть, даже когда iOS пытается воспроизвести «прямой» файл M3U8 (один без нескольких битрейтов), я считаю, что он попытается отправить запросы диапазона для файлов TS. Но, не зная битрейт этих файлов, какой байтовый диапазон будет iOS запрашивать localhost? Даже если он запрашивает определенный байтовый диапазон, как он может быть корректным? Поскольку предыдущий файл, который я обслуживал с localhost на iOS, возможно, говорил «5.ts» с битрейтом 1 Мбит/с, а следующий может быть «6.ts» с битрейтом 500 Кбит/с. iOS не может оценить, какой будет правильный байтовый диапазон для следующего файла?

Может ли описанный мной подход (переключить битрейты для каждого файла TS, прозрачного для iOS), даже работать? Или все файлы TS, указанные в M3U8, обязательно имеют одинаковый битрейт в соответствии с некоторой частью спецификации HLS, которую я не читал?

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

Спасибо!

ответ

3

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

iOS не нужно обращать внимание на битрейты , указанные в M3U8 при выполнении запросов на диапазон для загрузки файлов TS. Он отправит запрос Range: bytes=0-1 для TS, чтобы получить длину файла в ответе, а затем сделать будущие запросы на основе того, насколько он необходим для буферизации или любых других переменных, которые инфраструктура MediaPlayer учитывает внутренне.

Просто взглянув на шаблон запроса диапазона для стандартного MP4 (как по ссылке this) со свежими глазами, сегодня это разрешило.

Извините за шум.

P.S: Другими словами, схема, которую я изложил в моем первоначальном вопросе, фактически будет работать, не допуская каких-либо других проблем.

0

Клиент не будет запрашивать байтовые интервалы, если у вас нет диапазонов байтов, указанных в файле списка воспроизведения.

+0

Нет, я говорю о старом стиле HLS - pre iOS5, содержащем отдельные файлы TS на сегмент, тогда как я считаю, что вы имеете в виду современный эквивалент, включающий байтовые диапазоны для каждого сегмента в 10 секунд (а не отдельные файлы), который был введен в iOS5. iOS всегда делал байтовые запросы для файлов TS даже в доставке HLS до iOS5. Знайте это по опыту, а также по общим ссылкам в Интернете. –

+0

@DevKanchen Как клиент мог узнать, какой диапазон байтов указать? Все, что он знает, это то, что он начинается с 0 и сколько секунд занимает сегмент. – vipw

+0

Я бы не знал, как и в чем состоит часть моего вопроса. Но это те шаблоны доступа, которые регистрируются, когда iOS обращается к контенту с медиа-сервера. Первый отправленный запрос возвращает ожидаемую длину содержимого и последующие запросы от iOS, запрашивающие байтовые диапазоны, до тех пор, пока не будет загружен полный файл. У меня нет доступа к ссылочным URL-адресам на данный момент времени, но когда я их получу, я отправлю обратно. –

Смежные вопросы