Shaka Player — это библиотека JavaScript с открытым исходным кодом для адаптивного мультимедиа. Он воспроизводит адаптивные медиаформаты (такие как DASH, HLS и MSS) в браузере без использования плагинов или Flash. Вместо этого Shaka Player использует открытые веб-стандарты MediaSource Extensions и Encrypted Media Extensions.
Shaka Player также поддерживает автономное хранение и воспроизведение мультимедиа с помощью IndexedDB. Контент можно хранить в любом браузере. Хранение лицензий зависит от поддержки браузера.
Наша главная цель — максимально упростить потоковую передачу видео и аудио с адаптивным битрейтом с использованием современных браузерных технологий. Мы стараемся сделать библиотеку легкой, простой и свободной от сторонних зависимостей. Все, что вам нужно для сборки и развертывания, находится в исходниках.
Подробную информацию о том, что будет дальше, можно найти в нашей дорожной карте развития.
Поддерживаемые филиалы
См. обновленный список поддерживаемых веток Shaka Player на сайте Maintenance-branches.md.
Матрица поддержки платформ и браузеров
Браузер | Окна | Мак | Линукс | Андроид | iOS >= 9 | iOS >= 17.1 | iPadOS >= 13 | ChromeOS | Другой |
---|
Хром¹ | Да | Да | Да | Да | Родной | Родной | Родной | Да | - |
Firefox¹ | Да | Да | Да | непроверенный⁵ | Родной | Родной | Родной | - | - |
Край¹ | Да | - | - | - | - | - | - | - | - |
Краевой хром | Да | Да | Да | непроверенный⁵ | Родной | Родной | Родной | - | - |
ИЕ | Н | - | - | - | - | - | - | - | - |
Сафари¹ | - | Да | - | - | Родной | Да | Да | - | - |
Опера¹ | Да | Да | Да | непроверенный⁵ | Родной | - | - | - | - |
Хромкаст². | - | - | - | - | - | - | - | - | Да |
Тизен ТВ³ | - | - | - | - | - | - | - | - | Да |
WebOS⁶ | - | - | - | - | - | - | - | - | Да |
Hisense⁷ | - | - | - | - | - | - | - | - | Да |
Xbox Один | - | - | - | - | - | - | - | - | Да |
PlayStation 4⁷ | - | - | - | - | - | - | - | - | Да |
PlayStation 5⁷ | - | - | - | - | - | - | - | - | Да |
ПРИМЕЧАНИЯ:
- ¹: В macOS поддерживается только Safari 9+. На iOS поддерживается только iOS 9+. Старые версии будут отклонены.
- ²: протестирована последняя стабильная версия прошивки Chromecast. И отправитель, и получатель могут быть реализованы с помощью Shaka Player.
- ³: Модель Tizen 2017 активно тестируется и поддерживается командой Shaka Player. Модель Tizen 2016 поддерживается сообществом и не тестировалась нами.
- ⁵: Ожидается, что они будут работать, но команда Shaka Player активно не тестирует их.
- ⁶: Ожидается, что они будут работать, но поддерживаются сообществом и не проверялись нами.
- Официальная поддержка LG WebOS TV: #1330.
- ⁷: Ожидается, что они будут работать, но поддерживаются сообществом и не проверялись нами.
ПРИМЕЧАНИЯ для iOS и iPadOS:
- Мы поддерживаем iOS 9+ через собственный проигрыватель HLS от Apple. Мы предоставляем тот же API верхнего уровня, но просто устанавливаем элемент
src
видео в манифест/media. Таким образом, мы зависим от браузера, поддерживающего манифесты. - Поскольку iPadOS 13 поддерживает расширения MediaSource.
- Начиная с iPadOS 17 и iOS 17.1 поддерживаются расширения ManagedMediaSource.
Матрица поддержки формата манифеста
Формат | Видео по запросу | Жить | Событие | Выполняется запись |
---|
БРОСАТЬСЯ | Да | Да | - | Да |
ЗОЖ | Да | Да | Да | - |
МСС | Да | - | - | - |
Вы также можете создать плагин синтаксического анализатора манифеста для поддержки пользовательских форматов манифеста.
Возможности DASH
Поддерживаемые функции DASH:
- Записи VOD, прямые трансляции и незавершенные записи (динамический контент VOD)
- MPD@timeShiftBufferDepth для поиска назад в прямых трансляциях
- Многопериодный контент (статический и динамический)
- Элементы Xlink (только actuate=onLoad, разрешение до нуля, резервное содержимое)
- Все формы информации об индексе сегмента: SegmentBase@indexRange, SegmentTimeline, SegmentTemplate@duration, SegmentTemplate@index, SegmentList.
- Мультикодек/мультиконтейнерные манифесты (мы обсудим поддержку с браузером и выберем лучшие)
- Зашифрованный контент (включая пользовательские схемы ContentProtection, PSSH в манифесте)
- Ключевое вращение
- Треки в режиме трюков
- ВебВТТ и ТТМЛ
- Подписи CEA-608/708
- Варианты с несколькими кодеками (на платформах с поддержкой ChangeType)
- Цепочка MPD
- Обновления MPD Patch для SegmentTemplate с $Number$ , SegmentTimeline с $Number$ и SegmentTimeline с помощью $Time$
Функции DASH не поддерживаются:
- Xlink с actuate=onRequest
- Манифесты без информации о сегменте: #1088.
- Несколько треков в режиме трюков для одного и того же разрешения с различной частотой кадров или битрейтом
- Временные шкалы настолько велики, что временные метки не могут быть представлены в виде целых чисел в JavaScript (2^53): #1667
- Изменение элементов с помощью атрибута @schemeIdUri с помощью MPD Patch.
- Разыменование Xlink с помощью MPD Patch
Возможности ЗОЖ
Поддерживаемые функции HLS:
- Типы VOD, Live и Event
- Потоковая передача с малой задержкой, частичными сегментами, подсказками по предварительной загрузке, дельта-обновлениями и блокировкой перезагрузки плейлиста.
- Прерывистость
- Поддержка ISO-BMFF/MP4/CMAF
- Поддержка MPEG-2 TS
- ВебВТТ и ТТМЛ
- Подписи CEA-608/708
- Зашифрованный контент с помощью PlayReady и Widevine
- Зашифрованный контент с помощью FairPlay (только Safari на macOS и iOS 9+)
- Поддержка AES-128, AES-256 и AES-256-CTR в браузерах с поддержкой Web Crypto API
- Поддержка SAMPLE-AES и SAMPLE-AES-CTR (идентификация) в браузерах с поддержкой ClearKey.
- Ключевое вращение
- Необработанные форматы AAC, MP3, AC-3 и EC-3 (без контейнера MP4)
- Списки воспроизведения только для I-кадров (для трюкового воспроизведения и миниатюр)
- #EXT-X-IMAGE-STREAM-INF для миниатюр
- Межстраничные объявления
- Изменение контейнера во время воспроизведения (например, с MP4 на TS или с AAC на TS)
Функции HLS не поддерживаются:
- Атрибут X-SNAP в межстраничных объявлениях
Поддерживаемые теги HLS
Подробную информацию о формате HLS и значении этих тегов см. на странице https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis.
Теги многовариантного плейлиста
-
#EXT-X-STREAM-INF:
-
#EXT-X-MEDIA:
-
#EXT-X-IMAGE-STREAM-INF:
-
#EXT-XI-FRAME-STREAM-INF:
-
#EXT-X-SESSION-DATA:
-
#EXT-X-SESSION-KEY:
Выбор и предварительная загрузка системы ключей EME -
#EXT-X-START:TIME-OFFSET=
-
#EXT-X-CONTENT-STEERING:
Управление контентом -
#EXT-X-DEFINE:
Замена переменных (атрибуты NAME,VALUE,QUERYPARAM
)
Теги плейлиста мультимедиа
-
#EXTM3U
-
#EXTINF:,[]
-
#EXT-X-PLAYLIST-TYPE:
-
#EXT-X-ENDLIST
-
#EXT-X-MEDIA-SEQUENCE=
-
#EXT-X-TARGETDURATION=
-
#EXT-X-DISCONTINUITY
-
#EXT-X-DISCONTINUITY-SEQUENCE=
-
#EXT-X-BYTERANGE=[@]
-
#EXT-X-MAP:
-
#EXT-X-KEY:
( KEYFORMAT="identity",METHOD=SAMPLE-AES
поддерживается только с сегментами MP4) -
#EXT-X-PROGRAM-DATE-TIME:
-
#EXT-X-START:TIME-OFFSET=
-
#EXT-X-SERVER-CONTROL:
-
#EXT-X-PART-INF:PART-TARGET=
-
#EXT-X-PART:
-
#EXT-X-SKIP:
Дельта-плейлисты -
#EXT-X-DATERANGE:
Метаданные -
#EXT-X-DEFINE:
Импорт и замена переменных (атрибуты NAME,VALUE,IMPORT,QUERYPARAM
) -
#EXT-X-GAP
-
#EXT-X-PRELOAD-HINT:
-
#EXT-X-BITRATE
Поддержка MPEG-5 Part2 LCEVC
Поддерживается только в браузерах с поддержкой Media Source Extensions SourceBuffer.
Поддержка декодирования MPEG-5 Part2 LCEVC (декодирование, предоставляемое lcevc_dec.js, должно быть включено отдельно)
Документация по интеграции: документы
Подробнее о MPEG-5 Part2 LCEVC
Возможности МСС
Поддерживаемые функции MSS:
- VOD
- ААС и H.264
- Зашифрованный контент (PlayReady)
- ТТМЛ/DFXP
- Поддерживается только с codem-isoboxer
Функции MSS не поддерживаются:
Матрица поддержки DRM
Браузер | Широкая лоза | PlayReady | Справедливо | ClearKey⁶ |
---|
Хром¹ | Да | - | - | Да |
Firefox² | Да | - | - | Да |
Край³ | - | Да | - | - |
Краевой хром | Да | Да | - | Да |
Сафари | - | - | Да | - |
Опера | Да | - | - | Да |
Хромкаст | Да | Да | - | Да |
Тизен ТВ | Да | Да | - | Да |
ВебОС⁷ | непроверенный⁷ | непроверенный⁷ | - | непроверенный⁷ |
Hisense⁷ | непроверенный⁷ | непроверенный⁷ | - | непроверенный⁷ |
Xbox Один | - | Да | - | - |
PlayStation 4⁷ | - | непроверенный⁷ | - | непроверенный⁷ |
PlayStation 5⁷ | - | непроверенный⁷ | - | непроверенный⁷ |
Другие системы DRM должны работать «из коробки», если они совместимы и соответствуют спецификации EME.
ПРИМЕЧАНИЯ:
- ¹: Только официальные сборки Chrome содержат Widevine CDM. Chromium, собранный из исходного кода, не поддерживает DRM.
- ²: DRM должно быть включено пользователем. Когда пользователь Firefox впервые посещает сайт с зашифрованными медиафайлами, ему будет предложено включить DRM.
- ³: PlayReady в Edge, похоже, не работает на виртуальной машине или через удаленный рабочий стол.
- ⁶: ClearKey — это полезный инструмент для отладки, который не обеспечивает реальной безопасности контента.
- ⁷: Ожидается, что они будут работать, но поддерживаются сообществом и не проверялись нами.
Манифест | Широкая лоза | PlayReady | Справедливо | ClearKey |
---|
БРОСАТЬСЯ | Да | Да | - | Да |
ЗОЖ | Да | Да | Д ¹ | - |
МСС | - | Да | - | - |
ПРИМЕЧАНИЯ:
- ¹: по умолчанию FairPlay обрабатывается с помощью встроенного проигрывателя HLS Apple в Safari. Однако мы поддерживаем FairPlay через MSE/EME. См. значение
streaming.useNativeHlsForFairPlay
.
Медиа-контейнер и поддержка субтитров
Shaka Player поддерживает:
- ISO-BMFF/CMAF/MP4
- Зависит от поддержки браузером контейнера через MediaSource.
- Может анализировать поле «sidx» для SegmentBase@indexRange и SegmentTemplate@index DASH.
- Можно найти и проанализировать поле «tfdt», чтобы найти время начала сегмента в HLS.
- Для МСС необходим кодем-изобоксер v0.3.7+
- ВебМ
- Зависит от поддержки браузером контейнера через MediaSource.
- Может анализировать элементы данных сигналов для SegmentBase@indexRange и SegmentTemplate@index DASH.
- Не поддерживается в HLS
- MPEG-2 ТС
- Можно воспроизводить в любом браузере, поддерживающем MP4.
- Может находить и анализировать временные метки, чтобы найти время начала сегмента в HLS.
- ВебВТТ
- Поддерживается как в текстовой форме, так и в формате MP4.
- ТТМЛ
- Поддерживается как в форме XML, так и встроен в MP4.
- СЕА-608
- Поддерживается встроенное в MP4 и TS.
- СЕА-708
- Поддерживается встроенное в MP4 и TS.
- Необработанный AAC
- Поддерживается в необработанном контейнере AAC и преобразование в AAC в контейнере MP4 (зависит от поддержки браузера через MediaSource).
- Необработанный MP3
- Поддерживается в контейнере необработанного MP3 и преобразование в MP3 в контейнере MP4 (зависит от поддержки браузера через MediaSource).
- Сырой AC-3
- Поддерживается в необработанном контейнере AC-3 и преобразование в AC-3 в контейнере MP4 (зависит от поддержки браузера через MediaSource).
- Сырой EC-3
- Поддерживается в необработанном контейнере EC-3 и преобразование в EC-3 в контейнере MP4 (зависит от поддержки браузера через MediaSource).
- SubRip (SRT)
- LyRiCs (LRC)
- Подстанция Альфа (ССА, АСС)
- Субвивер (SBV)
Субтитры по умолчанию отображаются браузером. Приложения могут создать подключаемый модуль отображения текста для клиентской визуализации, чтобы выйти за рамки атрибутов, поддерживаемых браузером.
Поддержка трансмуксера
Shaka Player поддерживает:
- Необработанный AAC в AAC в MP4
- Необработанный MP3 в MP3 в MP4
- Необработанный AC-3 в AC-3 в MP4
- Необработанный EC-3 в EC-3 в MP4
- AAC в MPEG-2 TS в AAC в MP4
- от AC-3 в MPEG-2 TS до AC-3 в MP4
- От EC-3 в MPEG-2 TS до EC-3 в MP4
- MP3 в MPEG-2 TS в MP3 в MP4
- MP3 в MPEG-2 TS в необработанный MP3
- Опус в MPEG-2 TS в MP3 в MP4
- H.264 в MPEG-2 TS на H.264 в MP4
- H.265 в MPEG-2 TS на H.265 в MP4
- Мультиплексированный контент в формате MPEG-2 TS с предыдущими кодеками
Поддержка миниатюр
Shaka Player поддерживает:
- Внутренние миниатюры DASH. Использование набора адаптации изображений DASH-IF IOP
- Внутренние миниатюры HLS. Использование плейлиста мультимедиа изображений HLS
- Внутренние миниатюры HLS. Использование списков воспроизведения только для I-кадров с кодеком mjpg
- Внешний WebVTT с изображениями/спрайтами (только для VoD)
Монетизация с помощью рекламы
Shaka Player поддерживает:
- IMA SDK для вставки рекламы на стороне клиента
- IMA DAI SDK для вставки рекламы на стороне сервера
- AWS MediaTailor для клиентской стороны
- AWS MediaTailor для серверной части
- Оверлеи AWS MediaTailor
- Межстраничные объявления HLS
- Вставка медиа-презентации DASH (альтернатива MPD)
- Пользовательские межстраничные объявления
- Базовая поддержка VAST и VMAP без IMA (воспроизведение без отслеживания)
Поддержка управления контентом
Shaka Player поддерживает управление контентом (v1) в DASH и HLS.
Поддерживаемые функции управления контентом:
- TTL, если отсутствует, значение по умолчанию — 300 секунд.
- RELOAD-URI, если он отсутствует, мы используем URL-адрес, указанный в манифесте, в качестве резервного.
- Только PATHWAY-PRIORITY Замена ХОСТА
Функции управления контентом не поддерживаются:
- PATHWAY-CLONES другие замены, кроме HOST.
Поддержка виртуальной реальности
Shaka Player поддерживает VR, когда:
- Контент автоматически считается VR, если он соответствует следующим критериям:
- HLS или DASH-манифест
- сегменты fMP4
- Сегмент инициализации содержит поля
prji
и hfov
- Или, если он включен вручную через конфигурацию пользовательского интерфейса.
Поддерживаемые режимы VR:
- Равноугольная проекция с горизонтальным полем зрения на 360 градусов.
- Проекция кубической карты с горизонтальным полем обзора на 360 градусов.
ПРИМЕЧАНИЯ:
- VR поддерживается только для чистых потоков или потока HLS-AES. DRM предотвращает доступ к видеопикселям для преобразования.
Документация и важные ссылки
- Демо (источники)
- Ночная демонстрация
- Демо индекс
- Документация по API
- Учебники
- Размещенные сборки на основе размещенных библиотек Google
- Размещенные сборки на jsDelivr
- Дорожная карта развития
- Список объявлений (присоединяйтесь для нечастых объявлений и опросов)
- Подпишитесь на выпуски, следуя инструкциям из этого блога.
Часто задаваемые вопросы
Для получения общей помощи и перед тем, как сообщать об ошибках, прочтите FAQ.
Содействие
Если у вас есть улучшения или исправления, мы будем рады вашему вкладу. Пожалуйста, прочтите CONTRIBUTING.md для получения дополнительной информации о процессе, которому мы хотели бы, чтобы участники следовали.
Интеграция фреймворков
У команды Shaka нет возможностей и опыта для предоставления рекомендаций и поддержки по интеграции Shaka Player с конкретными платформами, но некоторые из наших пользователей успешно сделали это и создали учебные пособия, чтобы помочь другим новичкам.
Шака + библиотека ReactJS
- https://github.com/winoffrg/limeplay
Интеграция Shaka + ReactJS:
- https://github.com/matvp91/shaka-player-react
- https://github.com/amit08255/shaka-player-react-with-ui-config
Интеграция Shaka + Next.js:
- https://github.com/amit08255/shaka-player-react-with-ui-config/tree/master/nextjs-shaka-player
Интеграция Shaka + Vue.js:
- https://github.com/davidjamesherzog/shaka-player-vuejs
Интеграция Shaka + Nuxt.js:
- https://github.com/davidjamesherzog/shaka-player-nuxtjs
Интеграция Shaka + video.js:
- https://github.com/davidjamesherzog/videojs-shaka
Интеграция Шака + Angular:
- https://github.com/PatrickKalkman/shaka-player-angular
Если вы опубликовали код/руководства по интеграции Shaka, пожалуйста, не стесняйтесь присылать PR, чтобы добавить их в этот список, мы с радостью одобрим!