HLS, AWS Elastic Encoder и адаптивная потоковая передача

В настоящее время я работаю над простым браузерным сервисом VOD, используя в основном технологии AWS. В качестве протокола потоковой передачи будет использоваться HLS, поддерживаемый Elastic Transcoder.

В настоящее время исходный материал имеет разрешение 720p (1280x720), и именно это разрешение я хочу показать на всех устройствах, которые его поддерживают. Я хотел бы, чтобы видео работали на настольных компьютерах, iPad и большинстве смартфонов. Я использую ViBlast с videojs в качестве плеера.

У меня есть следующие вопросы:

  • список воспроизведения m3u8 позволяет указать несколько потоков. Должно ли каждое разрешение иметь собственный список воспроизведения (с разными исходными потоками и разными битрейтами), или я могу поместить все в один список воспроизведения (чтобы один список воспроизведения мог обслуживать разные разрешения и битрейты).
  • Кажется, что настольные компьютеры и самые последние планшеты могут отображать 1280x720, я предполагаю, что можно использовать один и тот же список воспроизведения. Мне просто нужно указать битрейт. Однако какое разрешение является лучшим для мобильных телефонов? Кажется, у каждого устройства есть другие размеры (см. Android здесь).
  • Какой битрейт следует использовать для каждого устройства? Я провожу некоторые исследования, но кажется, что в каждой статье есть разные рекомендации для «лучших» настроек, но никогда не объясняю, как они получили эти цифры.
  • Если я использую список воспроизведения, содержащий разные источники с разным разрешением, имеет ли значение порядок в списке воспроизведения? Я где-то читал, что первыми должны быть указаны самые низкие битрейты, но относится ли это и к разрешениям? Или плеер автоматически выбирает поток, который лучше всего соответствует экрану?

Я ищу «достаточно хорошее» решение, которое подойдет для большинства устройств.


person Jeroen Jacobs    schedule 28.10.2016    source источник


Ответы (1)


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

список воспроизведения m3u8 позволяет указать несколько потоков. Должно ли каждое разрешение иметь собственный список воспроизведения (с разными исходными потоками и разными битрейтами), или я могу поместить все в один список воспроизведения (чтобы один список воспроизведения мог обслуживать разные разрешения и битрейты).

Для справки, вот «Техническая заметка TN2224» Apple по этому вопросу, которая является хорошим ориентиром для информации ниже. https://developer.apple.com/library/content/technotes/tn2224/_index.html

Краткий ответ: у каждого разрешения должен быть свой плейлист.

Обычно существует один основной список воспроизведения со ссылками на варианты списков воспроизведения (также известные как исполнения). Варианты плейлистов — это потоки одного и того же видео разного качества, с разным битрейтом и разрешением. Но каждый вариант содержит только один уровень битрейта. Пример основного плейлиста:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=4648000,RESOLUTION=3840x2160
4648k/stream.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2670000,RESOLUTION=1920x1080
2670k/stream.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1823000,RESOLUTION=1280x720
1823k/stream.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=975000,RESOLUTION=854x480
975k/stream.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=491000,RESOLUTION=640x360
491k/stream.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=186000,RESOLUTION=256x144
186k/stream.m3u8

«Битрейты указываются в теге EXT-X-STREAM-INF с использованием атрибута BANDWIDTH» (TN2224). И каждый нисходящий уровень пропускной способности (битрейта) имеет соответствующее более низкое разрешение, потому что доступно меньше данных, и обычно ожидается, что они будут просматриваться на небольших мобильных экранах.

Кажется, что настольные компьютеры и самые последние планшеты могут отображать 1280x720, я предполагаю, что можно использовать один и тот же список воспроизведения. Мне просто нужно указать битрейт. Однако какое разрешение является лучшим для мобильных телефонов? Кажется, у каждого устройства есть другие размеры (см. Android здесь).

Разрешение и битрейт идут рука об руку. Поток, закодированный с битрейтом 186K (очень низкий), не имеет достаточно данных для заполнения экрана 1280x720. Но мобильное устройство в сотовой сети может не иметь возможности загрузки с высоким битрейтом. Поэтому вам нужно несколько доступных вариантов вариантов, каждый с соответствующим разрешением и битрейтом.

Не сосредотачивайтесь на конкретном устройстве, иначе вы никогда не закончите. Создайте лестницу вариантов битрейта/разрешения, используя распространенные соотношения сторон 16:9. Например. 1280x720, 1024x576, 640x360,...

Однако есть несколько вещей, которые следует учитывать. Битрейт, разрешение вы уже рассматриваете. Но закодированы ли эти видео с использованием H.264? Если это так, вы должны учитывать уровень профиля. Вот хорошая статья на эту тему: http://www.streamingmedia.com/Articles/ReadArticle.aspx?ArticleID=94216&PageNum=1.

введите описание изображения здесь

Какой битрейт следует использовать для каждого устройства? Я провожу некоторые исследования, но кажется, что в каждой статье есть разные рекомендации для «лучших» настроек, но никогда не объясняю, как они получили эти цифры.

Тот же ответ, что и разрешение. Не сосредотачивайтесь на фактическом устройстве. Создайте лестницу вариантов битрейта/разрешения, которая позволит устройству выбрать наиболее подходящий на основе доступной полосы пропускания, времени автономной работы, вычислительной мощности и т. д.

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

Каждый издатель или производитель может создавать свой плеер по-разному. Но это то, что рекомендует Apple в TN2224.

«Первая скорость передачи данных должна быть той, которую может поддерживать большинство клиентов. Первая запись в основном списке воспроизведения будет воспроизводиться при запуске потока и использоваться как часть теста для определения того, какой поток является наиболее подходящим. Порядок других потоков не имеет значения. Следовательно, первая скорость передачи данных в списке воспроизведения должна быть такой, которую может поддерживать большинство клиентов».

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

Ян

person iangetz    schedule 31.10.2016