Протокол потоковой передачи мультимедиа на основе HTTP
HTTP Live Streaming (также известный как HLS ) — это протокол потоковой передачи данных с адаптивным битрейтом на основе HTTP, разработанный Apple Inc. и выпущенный в 2009 году. Поддержка протокола широко распространена в медиаплеерах, веб-браузерах, мобильных устройствах и серверах потокового мультимедиа. По состоянию на 2022 год ежегодный опрос видеоиндустрии неизменно показывает, что это самый популярный формат потоковой передачи. [2][обновлять]
HLS напоминает MPEG-DASH тем, что работает, разбивая общий поток на последовательность небольших загрузок файлов на основе HTTP, каждая из которых загружает один короткий фрагмент общего потенциально неограниченного транспортного потока. Список доступных потоков, закодированных с разной скоростью передачи данных, отправляется клиенту с использованием расширенного списка воспроизведения M3U . [3]
HTTP Live Streaming, основанный на стандартных HTTP-транзакциях, может обходить любой брандмауэр или прокси-сервер , который пропускает стандартный HTTP-трафик, в отличие от протоколов на основе UDP, таких как RTP . Это также позволяет предлагать контент с обычных HTTP-серверов и доставлять его через широкодоступные HTTP- сети доставки контента . [4] [5] [6] Стандарт также включает стандартный механизм шифрования [7] и безопасное распределение ключей с использованием HTTPS , которые вместе обеспечивают простую систему DRM . Более поздние версии протокола также обеспечивают режим трюковой перемотки вперед и назад и интеграцию субтитров.
Apple задокументировала HTTP Live Streaming как Internet Draft (Individual Submission), первый этап в процессе его публикации в качестве Request for Comments (RFC). По состоянию на декабрь 2015 года авторы этого документа запросили RFC Independent Stream Editor (ISE) опубликовать документ как информационный (нестандартный) RFC вне процесса консенсуса IETF . [8]
В августе 2017 года был опубликован RFC 8216 для описания версии 7 протокола. [9]
Архитектура
HTTP Live Streaming использует обычный веб-сервер , который реализует поддержку HTTP Live Streaming (HLS), для распространения аудиовизуального контента и требует специального программного обеспечения, такого как OBS , чтобы вписать контент в правильный формат ( кодек ) для передачи в реальном времени по сети . Архитектура сервиса включает:
- Сервер
- Кодировать и инкапсулировать входной видеопоток в надлежащий формат для доставки. Затем он подготавливается к распространению путем сегментации его на различные файлы. В процессе приема видео кодируется и сегментируется для генерации видеофрагментов и индексного файла.
- Кодер: кодирует видеофайлы в формате H.264 и аудио в AAC , MP3 , AC-3 или EC-3 . [10] Для передачи он инкапсулируется в транспортный поток MPEG-2 или MPEG-4_Part_14 .
- Segmenter: делит поток на фрагменты одинаковой длины. Также создает индексный файл, содержащий ссылки на фрагментированные файлы, сохраненные как .m3u8 .
- Распределитель
- Созданный стандартным веб-сервером, принимает запросы от клиентов и предоставляет все ресурсы (файл плейлиста .m3u8 и файлы сегментов .ts), необходимые для потоковой передачи .
- Клиент
- Запросите и загрузите все файлы и ресурсы, собрав их так, чтобы они могли быть представлены пользователю в виде непрерывного потокового видео. Клиентское программное обеспечение сначала загружает индексный файл через URL , а затем несколько доступных медиафайлов. Программное обеспечение воспроизведения собирает последовательность, чтобы обеспечить непрерывное отображение для пользователя.
Функции
HTTP Live Streaming предоставляет игрокам механизмы адаптации к ненадежным сетевым условиям без видимых пользователю остановок воспроизведения. Например, в ненадежной беспроводной сети HLS позволяет игроку использовать видео более низкого качества, тем самым снижая использование полосы пропускания. Видео HLS можно сделать высокодоступными, предоставив несколько серверов для одного и того же видео, что позволит игроку легко переключаться, если один из серверов выйдет из строя.
Приспособляемость
Чтобы позволить проигрывателю адаптироваться к пропускной способности сети, исходное видео кодируется в нескольких различных уровнях качества . Сервер обслуживает индекс, называемый главным плейлистом , этих кодировок , называемых вариантными потоками . Затем проигрыватель может выбирать между вариантными потоками во время воспроизведения, плавно переключаясь вперед и назад по мере изменения условий сети.
Использование фрагментированного MP4
На WWDC 2016 Apple объявила [11] о включении адресации байтового диапазона для фрагментированных файлов MP4 , или fMP4, что позволяет воспроизводить контент через HLS без необходимости его мультиплексирования в транспортный поток MPEG-2 . Индустрия посчитала это шагом к совместимости между HLS и MPEG-DASH . [12] [13]
HLS с низкой задержкой
Существуют два не связанных между собой расширения HLS с названием Low Latency и соответствующей аббревиатурой:
- Apple Low Latency HLS (ALHLS), анонсированная Apple на WWDC2019 [14]
- Community LHLS (LHLS), который появился раньше публикации Apple и, как утверждается, является более простым [15]
Оставшаяся часть этого раздела описывает ALHLS от Apple. Он уменьшает задержку «стекло-стекло» при потоковой передаче через HLS, сокращая время начала воспроизведения потоковой передачи и поддерживая это время во время трансляции потоковой передачи. Он работает путем добавления в микс файлов частичных медиасегментов, во многом подобно fMP4 MPEG-CMAF. В отличие от CMAF, ALHLS также поддерживает частичные транспортные файлы MPEG-2 TS. Частичный медиасегмент — это стандартный сегмент (например, 6 секунд), разделенный на равные сегменты длительностью менее секунды (например, 200 миллисекунд). Стандартный первый сегмент заменяется серией частичных сегментов. Последующие сегменты имеют стандартный размер. [16]
HTTP/2 требуется для передачи сегментов вместе со списком воспроизведения, что снижает накладные расходы на установление повторных соединений HTTP/TCP.
Другие особенности включают в себя:
- Обновления дельты плейлиста: отправляются только изменения в плейлисте, которые обычно укладываются в один MTU, что повышает эффективность загрузки плейлистов, которые при больших окнах DVR могут быть довольно большими.
- Блокировка перезагрузки плейлиста: при запросе плейлистов живого мультимедиа дождитесь, пока первый сегмент также будет готов, и верните оба одновременно (экономя дополнительные HTTP/TCP-запросы)
- Отчеты о воспроизведении: добавляйте метаданные к другим воспроизведениям мультимедиа, чтобы ускорить переключение между ABR
- Добавлены новые теги: EXT-X-SERVER-CONTROL / EXT-X-PART / EXT-X-SKIP / EXT-X-RENDITION-REPORT
- URL QUERY_STRING ?_Добавлены обратные вызовы HLS
Apple также добавила новые инструменты: tsrecompressor создает и кодирует непрерывный поток аудио и видео с низкой задержкой. Инструмент mediastreamsegmenter теперь доступен в версии с низкой задержкой. Это сегментатор HLS, который принимает поток UDP/MPEG-TS от tsrecompressor и генерирует список воспроизведения медиа, включая новые теги выше.
Поддержка HLS с низкой задержкой доступна в tvOS 13 beta, а также iOS и iPadOS 14. [17]
30 апреля 2020 года Apple добавила спецификации с низкой задержкой во второе издание основной спецификации HLS. [18]
Динамическая вставка рекламы
Динамическая вставка рекламы поддерживается в HLS с использованием информации о вставке на основе спецификации SCTE-35 . Сообщение о вставке SCTE-35 вставляется в файл списка воспроизведения мультимедиа с помощью тега EXT-X-DATERANGE. Каждый SCTE-35 splice_info_section() представлен тегом EXT-X-DATERANGE с атрибутом SCTE35-CMD. Пара выход/вставка SCTE-35, сигнализируемая командами splice_insert(), представлена одним или несколькими тегами EXT-X-DATERANGE, несущими тот же атрибут ID. Команда SCTE-35 splice out должна иметь атрибут SCTE35-OUT, а команда splice in должна иметь атрибут SCTE35-IN.
Между двумя тегами EXT-X-DATERANGE, содержащими атрибуты SCTE35-OUT и SCTE35-IN соответственно, может находиться последовательность URI медиасегментов. Эти медиасегменты обычно представляют рекламные программы, которые могут быть заменены локальной или настроенной рекламой. Замена рекламы не требует замены медиафайлов, необходимо изменить только URI в плейлисте, чтобы указать на другие рекламные программы. Замена рекламы может быть выполнена на исходном сервере или на клиентском устройстве воспроизведения медиа.
Реализации сервера
Известные реализации серверов, поддерживающие HTTP Live Streaming, включают в себя:
- Adobe Media Server поддерживает HLS для устройств iOS (HLS) и защищенную потоковую передачу HTTP (PHLS).
- Akamai поддерживает HLS для прямых трансляций и трансляций по запросу.
- AT&T поддерживает HLS во всех форматах в прямом эфире или по запросу.
- IP-камеры Axis Communication поддерживают HLS через приложение CamStreamer ACAP
- Instart поддерживает HLS для потоковой передачи по запросу.
- Amazon CloudFront поддерживает HLS для потоковой передачи по запросу.
- Bitmovin поддерживает HLS для потоковой передачи по запросу и в прямом эфире.
- CDNetworks поддерживает HLS для прямых трансляций и трансляций по запросу.
- Cisco Systems : поддерживает полную сквозную доставку для сервисов Live/TSTV/VOD/HLS и Cloud DVR.
- Cloudflare поддерживает HLS для прямых трансляций и трансляций по запросу.
- EdgeCast Networks поддерживает потоковую передачу между устройствами с использованием HLS.
- Fastly поддерживает HLS для прямых трансляций и трансляций по запросу. [19]
- Helix Universal Server от RealNetworks поддерживает iPhone OS 3.0 и более поздние версии для потоковой передачи в реальном времени и по запросу HTTP Live или On-Demand контента H.264 и AAC на iPhone, iPad и iPod.
- Службы IIS Media Services от Microsoft поддерживают потоковую передачу Smooth Streaming в прямом эфире и по запросу, а также потоковую передачу HTTP Live Streaming.
- Уровень 3 поддерживает прямые трансляции и трансляции по запросу HLS.
- Limelight Networks поддерживает HLS для некоторых аккаунтов. [20]
- Nginx с nginx-rtmp-module поддерживает HLS в режиме реального времени. Коммерческая версия Nginx Plus, включающая модуль ngx_http_hls_module , также поддерживает HLS/HDS VOD. [21]
- Nimble Streamer поддерживает HLS в режиме прямой трансляции и VOD, также поддерживается спецификация Apple Low Latency HLS.
- Node.js с пакетом hls-server поддерживает кодирование hls в режиме реального времени и преобразование локальных файлов. [22]
- OvenMediaEngine — проект с открытым исходным кодом , поддерживающий протокол HLS с низкой задержкой (LL-HLS) и HLS для потоковой передачи в реальном времени.
- PeerTube поддерживает HLS
- Storm Streaming Server поддерживает HLS в качестве резервного режима для своего проигрывателя Media Source Extensions [23]
- CDN компании Tata Communications поддерживает HLS для прямых трансляций и трансляций по запросу.
- TVersity поддерживает HLS в сочетании с функцией транскодирования «на лету» для воспроизведения любого видеоконтента на устройствах iOS.
- Unreal Media Server поддерживает HLS с низкой задержкой, начиная с версии 9.5. [24]
- Ustream поддерживает доставку прямых трансляций по протоколу HLS. Принятый поток перекодируется, если исходный аудио- и видеокодек не соответствует требованиям HLS.
- VLC Media Player поддерживает HLS для обслуживания прямых трансляций и потоков по запросу, начиная с версии 2.0.
- Wowza Streaming Engine от Wowza Media Systems поддерживает HLS и зашифрованный HLS для прямой трансляции (с DVR), потоковой передачи по запросу и спецификацию Apple Low Latency HLS.
Использование
- Google добавила поддержку HTTP Live Streaming в Android 3.0 (Honeycomb). [25]
- HP добавила поддержку HTTP Live Streaming в webOS 3.0.5. [26]
- Microsoft добавила поддержку HTTP Live Streaming в движок рендеринга EdgeHTML в Windows 10 в 2015 году. [27]
- Microsoft добавила поддержку HTTP Live Streaming в IIS Media Services 4.0. [28]
- Yospace добавил поддержку HTTP Live Streaming в Yospace HLS Player и SDK для Flash версии 1.0. [ необходима ссылка ]
- Sling Media добавила поддержку HTTP Live Streaming в свои приложения Slingboxes и SlingPlayer. [29]
- В 2014/15 годах BBC представила потоки HLS-AAC для своего интернет-радио и аудиосервисов по запросу, а также поддерживает эти потоки с помощью своих клиентов iPlayer Radio . [30]
- Twitch использует HTTP Live Streaming (HLS) для передачи и масштабирования прямой трансляции для множества одновременных зрителей, также поддерживая несколько вариантов (например, 1080p, 720p и т. д.) [31]
Поддерживаемые игроки и серверы
HTTP Live Streaming изначально поддерживается в следующих операционных системах:
Windows 10 раньше имела встроенную поддержку HTTP Live Streaming в EdgeHTML , фирменном браузерном движке, который использовался в Microsoft Edge (теперь именуемом Edge Legacy) до перехода на браузерный движок Blink на базе Chromium . Edge Legacy был включен в Windows 10 вплоть до версии 2004. Он был заменен Edge Chromium в версии 20H2. Вместе с Windows 11 Microsoft выпустила обновленный Media Player , который поддерживает HLS изначально.
Клиенты
Серверы
Живые энкодеры
VOD-кодеры
Смотрите также
Ссылки
- ^ Pantos, R.; May, W. (2017). "Плейлисты". HTTP Live Streaming. IETF . стр. 9. раздел 4. doi : 10.17487/RFC8216 . ISSN 2070-1721. RFC 8216. Получено 15 января 2020 г.
- ^ Ледерер, Стефан. "2022 Video Developer Report" (PDF) . Bitmovin . Получено 25 октября 2023 г. .
- ^ Джордан, Ларри (10 июня 2013 г.). «Основы HTTP Live Streaming». Блог Ларри . Larry Jordan & Associates . Получено 18 июня 2013 г.
- ^ "MPEG-DASH против Apple HLS против Smooth Streaming против Adobe HDS". Bitmovin . 29 марта 2015 г.
- ^ Чэнь, Сунцин; Шэнь, Бо; Тань, Вай-тянь; Ви, Сьюзи; Чжан, Сяодун (2006-07-09). «Дело в пользу потоковой передачи через Интернет через веб-серверы». Международная конференция IEEE по мультимедиа и выставкам 2006 года . стр. 2145–2148. doi :10.1109/ICME.2006.262660. eISSN 1945-788X. ISBN 9781424403677. ISSN 1945-7871. S2CID 9202042.
- ^ Songqing Chen; Bo Shen; Wee, S.; Xiaodong Zhang (2007-07-23). "SProxy: кэширующая инфраструктура для поддержки потоковой передачи в Интернете". IEEE Transactions on Multimedia . 9 (5): 1062–1072. CiteSeerX 10.1.1.74.4838 . doi :10.1109/TMM.2007.898943. ISSN 1520-9210. S2CID 870854.
- ^ Pantos, R. (30 сентября 2011 г.). "HTTP Live Streaming". Internet Engineering Task Force . Получено 18 июня 2013 г.
- ^ "История для draft-pantos-http-live-streaming" . Получено 2017-04-17 .
Поток изменен на ISE с None
- ^ Pantos, Roger; May, William (август 2017 г.). HTTP Live Streaming. doi : 10.17487/RFC8216 . RFC 8216 . Получено 05.09.2017 .
- ^ Роджер, Пантос; Уильям, Мэй. "HTTP Live Streaming". tools.ietf.org . Получено 23.01.2017 .
- ^ Что нового в HTTP Live Streaming. Разработчик Apple .
- ^ Сиглин, Тим (16 июня 2016 г.). «HLS теперь поддерживает фрагментированный MP4, что делает его совместимым с DASH». StreamingMedia.com .
- ^ Грандл, Рейнхард (15 июня 2016 г.). «WWDC16: HLS поддерживает фрагментированный MP4 – и становится совместимым с MPEG-DASH!». Bitmovin.com .
- ^ HLS с низкой задержкой. Разработчик Apple .
- ^ "Сообщество дало нам прямую трансляцию с низкой задержкой. Затем Apple отобрала ее". 2019-06-14 . Получено 2019-06-17 .
- ^ "Документация для разработчиков Apple". developer.apple.com . Получено 10 августа 2022 г. .
- ^ Спилманс, Питер-Ян (2020-12-09). "Низкая задержка везде: как реализовать LL-HLS на разных платформах". Тео . Получено 2021-03-11 .
- ^ Pantos, Roger (2020-04-30). "HTTP Live Streaming 2nd Edition". IETF . Получено 2020-04-30 .
- ^ "Video CDN | Потоковое видео | Доставка потока | Fastly". www.fastly.com . Получено 2020-10-01 .
- ^ "Руководство по кодированию". Поддержка видео Limelight Orchestrate . Limelight Networks. Архивировано из оригинала 2013-08-01 . Получено 14 ноября 2013 г.
- ^ "Модуль ngx_http_hls_module". nginx.org .
- ^ "hls-server". npm. 12 февраля 2018 г.
- ^ "Storm Streaming". Storm Streaming . Получено 2021-07-30 .
Устройства вывода: HLS, MPEG-DASH, WebSocket, RTMP
- ^ "Unreal Media Server". umediaserver.net . Получено 2021-07-30 .
Unreal Media Server поддерживает прием прямых трансляций из широкого спектра программных и аппаратных кодировщиков, которые отправляют потоки через WebRTC, RTMP, RTSP, MPEG2-TS, HLS,
- ^ "Основные моменты платформы Android 3.0". Разработчики Android . Архивировано из оригинала 2011-01-28.
- ^ "Обновления webOS 3.0.5". Архивировано из оригинала 2012-01-22.
- ^ "Упрощенная адаптивная потоковая передача видео: анонс поддержки HLS и DASH в Windows 10". Блог команды Internet Explorer . 29 января 2015 г.
- ^ ab Siglin, Tim (1 ноября 2010 г.). "First Look: Microsoft IIS Media Services 4". StreamingMedia.com . Получено 30 июля 2011 г. .
- ↑ Чан, Дэвид (26 ноября 2010 г.). «Обзор приложения iPad: SlingPlayer». Blogcritics . Архивировано из оригинала 15 апреля 2014 г. Получено 14 апреля 2014 г.
- ^ Скотт, Эндрю (27 февраля 2015 г.). "Audio Factory: обзор". Интернет-блог . BBC.
единственными активами по запросу будут AAC HLS. ... Мы все еще ведем переговоры с производителями, и многие из них уверены, что они смогут предоставить своим пользователям доступ ко всем 57 нашим потокам HLS AAC со скоростью 320 кбит/с в течение нескольких недель или месяцев.
- ^ Шен, Юеши (2017). «Трансмультиплексирование/транскодирование живого видео: FFmpeg против TwitchTranscoder, часть 1».
- ^ "Поддерживаемые форматы мультимедиа". Разработчики Android .
- ^ "HTTP Live Streaming (HLS) | Могу ли я использовать... Таблицы поддержки для HTML5, CSS3 и т. д.". caniuse.com .
- ^ "Firefox для Android 50.0, см. все новые функции, обновления и исправления". Mozilla .
- ^ Джайлс, Ральф; Смоле, Мартин (28 ноября 2017 г.). «Воспроизведение видео AV1 в Firefox с помощью DASH». Mozilla Hacks – блог веб-разработчиков .
- ^ "Firefox для Android Beta 59.0beta, см. все новые функции, обновления и исправления". Mozilla .
- ^ Сливка, Эрик (15 ноября 2010 г.). «В iTunes 10.1 обнаружены намеки на сервис „iTunes Live Stream“». MacRumors .
- ^ "#2943 (Поддержка HTTP Live Streaming в качестве клиента)". VLC bug tracker . 9 июля 2009 г.
- ^ "Воспроизведение потокового видео HLS с помощью проигрывателя VLC - Форумы VideoLAN". forum.videolan.org .
- ^ "Windows 8 - HTTP Live Streaming". www.3ivx.com .
- ^ "3ivx - Партнерская программа разработчиков Xbox Live - Поставщик компонентов". www.3ivx.com .
- ^ NV, THEO Technologies. "HTML5 Video Player – THEOplayer". www.theoplayer.com .
- ^ Плеер, Radiant Media. "История версий - Radiant Media Player". www.radiantmediaplayer.com .
- ^ "dailymotion – Medium". Средний .
- ^ "hls.js demo page". Архивировано из оригинала 20 ноября 2015 г.
- ^ "Orange-OpenSource/hasplayer.js". GitHub .
- ^ "Искра". Искра .
- ^ "google/shaka-player". GitHub .
- ^ "Демо-версия Shaka Player". shaka-player-demo.appspot.com .
- ^ "Fluid Player - HTML5 видеоплеер". www.fluidplayer.com .
- ^ "Документация Fluid Player". docs.fluidplayer.com .
- ^ "fluid-player/fluid-player". GitHub .
- ^ "QMPlay2 - Qt Media Player 2". 22 октября 2023 г. – через GitHub.
- ^ "marakew/AvProxy". GitHub .
- ^ Озер, Ян (2015). «Обзор: Bitcodin, облачный сервис кодирования видео от Bitmovin». www.StreamingMediaGlobal.com .
- ^ «Предоставление видео HLS — Brightcove Learning». support.brightcove.com .
- ^ «MediaGoom. Основы веб-трансляций».