Shaka Player é uma biblioteca JavaScript de código aberto para mídia adaptativa. Reproduz formatos de mídia adaptáveis (como DASH, HLS e MSS) em um navegador, sem usar plug-ins ou Flash. Em vez disso, o Shaka Player usa os padrões abertos da web MediaSource Extensions e Encrypted Media Extensions.
Shaka Player também suporta armazenamento offline e reprodução de mídia usando IndexedDB. O conteúdo pode ser armazenado em qualquer navegador. O armazenamento das licenças depende do suporte do navegador.
Nosso principal objetivo é facilitar ao máximo a transmissão de vídeo e áudio com taxa de bits adaptável usando tecnologias modernas de navegador. Tentamos manter a biblioteca leve, simples e livre de dependências de terceiros. Tudo que você precisa para construir e implantar está nas fontes.
Para obter detalhes sobre o que está por vir, consulte nosso roteiro de desenvolvimento.
Filiais mantidas
Consulte mainted-branches.md para obter a lista atualizada de filiais mantidas do Shaka Player.
Matriz de suporte de plataforma e navegador
Navegador | Windows | Mac | Linux | Android | iOS >= 9 | iOS >= 17.1 | iPadOS >= 13 | Chrome OS | Outro |
---|
Cromo¹ | S | S | S | S | Nativo | Nativo | Nativo | S | - |
Firefox¹ | S | S | S | não testado⁵ | Nativo | Nativo | Nativo | - | - |
Borda¹ | S | - | - | - | - | - | - | - | - |
Borda Cromo | S | S | S | não testado⁵ | Nativo | Nativo | Nativo | - | - |
Ou seja | N | - | - | - | - | - | - | - | - |
Safári¹ | - | S | - | - | Nativo | S | S | - | - |
Ópera¹ | S | S | S | não testado⁵ | Nativo | - | - | - | - |
Chromecast². | - | - | - | - | - | - | - | - | S |
TV Tizen³ | - | - | - | - | - | - | - | - | S |
WebOS⁶ | - | - | - | - | - | - | - | - | S |
Hisense⁷ | - | - | - | - | - | - | - | - | S |
Xbox One | - | - | - | - | - | - | - | - | S |
PlayStation 4⁷ | - | - | - | - | - | - | - | - | S |
PlayStation 5⁷ | - | - | - | - | - | - | - | - | S |
NOTAS:
- ¹: No macOS, apenas Safari 9+ é compatível. No iOS, apenas o iOS 9+ é compatível. Versões mais antigas serão rejeitadas.
- ²: O firmware estável mais recente do Chromecast foi testado. Tanto o remetente quanto o destinatário podem ser implementados com o Shaka Player.
- ³: O modelo Tizen 2017 é testado ativamente e apoiado pela equipe Shaka Player. O modelo Tizen 2016 é apoiado pela comunidade e não foi testado por nós.
- ⁵: Espera-se que funcionem, mas não são testados ativamente pela equipe do Shaka Player.
- ⁶: Espera-se que funcionem, mas são apoiados pela comunidade e não foram testados por nós.
- Suporte oficial para LG WebOS TV: #1330
- ⁷: Espera-se que funcionem, mas são apoiados pela comunidade e não foram testados por nós.
NOTAS para iOS e iPadOS:
- Oferecemos suporte para iOS 9+ por meio do player HLS nativo da Apple. Fornecemos a mesma API de nível superior, mas apenas definimos o elemento
src
do vídeo como manifesto/mídia. Portanto, dependemos do navegador que suporta os manifestos. - Como as extensões MediaSource do iPadOS 13 são suportadas
- Desde iPadOS 17 e iOS 17.1, as extensões ManagedMediaSource são suportadas
Matriz de suporte ao formato de manifesto
Formatar | Vídeo sob demanda | Ao vivo | Evento | Gravação em andamento |
---|
TRAÇO | S | S | - | S |
HLS | S | S | S | - |
MSS | S | - | - | - |
Você também pode criar um plug-in de analisador de manifesto para oferecer suporte a formatos de manifesto personalizados.
Recursos DASH
Recursos DASH suportados:
- Gravações VOD, ao vivo e em andamento (conteúdo VOD dinâmico)
- MPD@timeShiftBufferDepth para retroceder em transmissões ao vivo
- Conteúdo multiperíodo (estático e dinâmico)
- Elementos Xlink (apenas actuate=onLoad, resolução para zero, conteúdo substituto)
- Todas as formas de informações de índice de segmento: SegmentBase@indexRange, SegmentTimeline, SegmentTemplate@duration, SegmentTemplate@index, SegmentList
- Manifestos multi-codec/multi-container (negociaremos o suporte com o navegador e escolheremos os melhores)
- Conteúdo criptografado (incluindo esquemas ContentProtection personalizados, PSSH no manifesto)
- Rotação de chave
- Faixas do modo truque
- WebVTT e TTML
- Legendas CEA-608/708
- Variantes multi-codec (em plataformas com suporte changeType)
- Encadeamento MPD
- Atualizações de patch MPD para SegmentTemplate com $Número$ , SegmentTimeline com $Número$ e SegmentTimeline com $Tempo$
Recursos DASH não suportados:
- Xlink com atuar=onRequest
- Manifestos sem qualquer informação de segmento: #1088
- Várias trilhas no modo truque para a mesma resolução em taxas de quadros ou taxas de bits variadas
- Escalas de tempo tão grandes que os carimbos de data e hora não podem ser representados como números inteiros em JavaScript (2^53): #1667
- Modificando elementos com um atributo @schemeIdUri via MPD Patch
- Desreferenciação Xlink com MPD Patch
Recursos do HLS
Recursos HLS suportados:
- Tipos de VOD, ao vivo e eventos
- Streaming de baixa latência com segmentos parciais, dicas de pré-carregamento, atualizações delta e bloqueio de recarga da playlist
- Descontinuidade
- Suporte ISO-BMFF/MP4/CMAF
- Suporte MPEG-2 TS
- WebVTT e TTML
- Legendas CEA-608/708
- Conteúdo criptografado com PlayReady e Widevine
- Conteúdo criptografado com FairPlay (somente Safari no macOS e iOS 9+)
- Suporte AES-128, AES-256 e AES-256-CTR em navegadores com suporte Web Crypto API
- Suporte SAMPLE-AES e SAMPLE-AES-CTR (identidade) em navegadores com suporte ClearKey
- Rotação de chave
- Raw AAC, MP3, AC-3 e EC-3 (sem contêiner MP4)
- Playlists somente I-frame (para truques e miniaturas)
- #EXT-X-IMAGE-STREAM-INF para miniaturas
- Intersticiais
- Mudança de contêiner durante a reprodução (por exemplo: MP4 para TS ou AAC para TS)
Recursos HLS não suportados:
- Atributo X-SNAP em intersticiais
Tags HLS suportadas
Para obter detalhes sobre o formato HLS e os significados dessas tags, consulte https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis
Tags de lista de reprodução multivariadas
-
#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:
Seleção e pré-carregamento do sistema de chaves EME -
#EXT-X-START:TIME-OFFSET=
-
#EXT-X-CONTENT-STEERING:
Direção de conteúdo -
#EXT-X-DEFINE:
Substituição de variáveis (atributos NAME,VALUE,QUERYPARAM
)
Tags da lista de reprodução de mídia
-
#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
é compatível apenas com segmentos 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:
listas de reprodução Delta -
#EXT-X-DATERANGE:
Metadados -
#EXT-X-DEFINE:
Importação e substituição de variáveis (atributos NAME,VALUE,IMPORT,QUERYPARAM
) -
#EXT-X-GAP
-
#EXT-X-PRELOAD-HINT:
-
#EXT-X-BITRATE
Suporte MPEG-5 Parte 2 LCEVC
Suportado apenas em navegadores com suporte para extensões de fonte de mídia SourceBuffer
Suporte para decodificação MPEG-5 Part2 LCEVC (decodificação fornecida por lcevc_dec.js, deve ser incluída separadamente)
Documentação de integração: docs
Mais sobre MPEG-5 Part2 LCEVC
Recursos do MSS
Recursos MSS suportados:
- Vídeo sob demanda
- AAC e H.264
- Conteúdo criptografado (PlayReady)
- TTML/DFXP
- Compatível apenas com codem-isoboxer
Recursos MSS não suportados:
Matriz de suporte DRM
Navegador | Vinha larga | PlayReady | Jogo limpo | ClearKey⁶ |
---|
Cromo¹ | S | - | - | S |
Firefox² | S | - | - | S |
Borda³ | - | S | - | - |
Borda Cromo | S | S | - | S |
Safári | - | - | S | - |
Ópera | S | - | - | S |
Chromecast | S | S | - | S |
TV Tizen | S | S | - | S |
WebOS⁷ | não testado⁷ | não testado⁷ | - | não testado⁷ |
Hisense⁷ | não testado⁷ | não testado⁷ | - | não testado⁷ |
Xbox One | - | S | - | - |
PlayStation 4⁷ | - | não testado⁷ | - | não testado⁷ |
PlayStation 5⁷ | - | não testado⁷ | - | não testado⁷ |
Outros sistemas DRM devem funcionar imediatamente se forem interoperáveis e compatíveis com as especificações EME.
NOTAS:
- ¹: Somente compilações oficiais do Chrome contêm o Widevine CDM. O Chromium criado a partir do código-fonte não oferece suporte a DRM.
- ²: O DRM deve ser habilitado pelo usuário. Na primeira vez que um usuário do Firefox visitar um site com mídia criptografada, o usuário será solicitado a ativar o DRM.
- ³: O PlayReady no Edge parece não funcionar em uma VM ou na Área de Trabalho Remota.
- ⁶: ClearKey é uma ferramenta útil para depuração e não fornece segurança de conteúdo real.
- ⁷: Espera-se que funcionem, mas são apoiados pela comunidade e não foram testados por nós.
Manifesto | Vinha larga | PlayReady | Jogo limpo | ClearKey |
---|
TRAÇO | S | S | - | S |
HLS | S | S | S¹ | - |
MSS | - | S | - | - |
NOTAS:
- ¹: Por padrão, o FairPlay é gerenciado usando o player HLS nativo da Apple, quando no Safari. No entanto, apoiamos o FairPlay através do MSE/EME. Consulte o valor de configuração
streaming.useNativeHlsForFairPlay
.
Suporte para contêiner de mídia e legendas
Shaka Player suporta:
- ISO-BMFF/CMAF/MP4
- Depende do suporte do navegador para o contêiner via MediaSource
- Pode analisar a caixa "sidx" para SegmentBase@indexRange e SegmentTemplate@index do DASH
- Pode localizar e analisar a caixa "tfdt" para encontrar a hora de início do segmento no HLS
- Para MSS, é necessário o codem-isoboxer v0.3.7+
- WebM
- Depende do suporte do navegador para o contêiner via MediaSource
- Pode analisar elementos de dados de sinalização para SegmentBase@indexRange e SegmentTemplate@index do DASH
- Não compatível com HLS
- MPEG-2TS
- Pode ser reproduzido em qualquer navegador que suporte MP4
- Pode encontrar e analisar carimbos de data/hora para encontrar a hora de início do segmento em HLS
- WebVTT
- Suportado em formato de texto e incorporado em MP4
- TML
- Compatível com formato XML e incorporado em MP4
- CEA-608
- Suportado incorporado em MP4 e TS
- CEA-708
- Suportado incorporado em MP4 e TS
- AAC bruto
- Suportado em contêiner AAC bruto e transmutação para AAC em contêiner MP4 (depende do suporte do navegador via MediaSource).
- MP3 bruto
- Suportado em contêiner MP3 bruto e transmutação para MP3 em contêiner MP4 (depende do suporte do navegador via MediaSource).
- AC-3 bruto
- Suportado em contêiner AC-3 bruto e transmutação para AC-3 em contêiner MP4 (depende do suporte do navegador via MediaSource).
- EC-3 bruto
- Suportado em contêiner EC-3 bruto e transmutação para EC-3 em contêiner MP4 (depende do suporte do navegador via MediaSource).
- SubRip (SRT)
- Somente codificação UTF-8
- Letras (LRC)
- Somente codificação UTF-8
- Subestação Alfa (SSA, ASS)
- Somente codificação UTF-8
- Subvisualizador (SBV)
- Somente codificação UTF-8
As legendas são renderizadas pelo navegador por padrão. Os aplicativos podem criar um plug-in de exibição de texto para renderização do cliente, indo além dos atributos suportados pelo navegador.
Suporte ao transmutador
Shaka Player suporta:
- AAC bruto para AAC em MP4
- MP3 bruto para MP3 em MP4
- AC-3 bruto para AC-3 em MP4
- EC-3 bruto para EC-3 em MP4
- AAC em MPEG-2 TS para AAC em MP4
- AC-3 em MPEG-2 TS para AC-3 em MP4
- EC-3 em MPEG-2 TS para EC-3 em MP4
- MP3 em MPEG-2 TS para MP3 em MP4
- MP3 em MPEG-2 TS para MP3 bruto
- Opus em MPEG-2 TS para MP3 em MP4
- H.264 em MPEG-2 TS para H.264 em MP4
- H.265 em MPEG-2 TS para H.265 em MP4
- Conteúdo multiplexado em MPEG-2 TS com os codecs anteriores
Suporte para miniaturas
Shaka Player suporta:
- Miniaturas DASH internas. Usando o conjunto de adaptação de imagem DASH-IF IOP
- Miniaturas HLS internas. Usando a lista de reprodução de mídia de imagem HLS
- Miniaturas HLS internas. Usando listas de reprodução somente I-frame com codec mjpg
- WebVTT externo com imagens/sprites (somente para VoD)
Monetização com anúncios
Shaka Player suporta:
- SDK do IMA para inserção de anúncios do lado do cliente
- SDK IMA DAI para inserção de anúncios no servidor
- AWS MediaTailor para cliente
- AWS MediaTailor para servidor
- Sobreposições do AWS MediaTailor
- Intersticiais HLS
- Inserção de apresentação de mídia DASH (alternativa MPD)
- Intersticiais personalizados
- Suporte básico de VAST e VMAP sem IMA (reprodução sem rastreamento)
Suporte para direção de conteúdo
Shaka Player suporta Content Steering (v1) em DASH e HLS.
Recursos de direção de conteúdo suportados:
- TTL, se estiver ausente, o valor padrão é 300 segundos.
- RELOAD-URI, se estiver faltando, usamos o URL fornecido no manifesto como substituto.
- PATHWAY-PRIORITY apenas substituição de HOST
Recursos de direção de conteúdo não suportados:
- PATHWAY-CLONES outras substituições além de HOST.
Suporte para RV
Shaka Player suporta VR quando:
- O conteúdo é tratado automaticamente como VR se atender aos seguintes critérios:
- Manifesto HLS ou DASH
- Segmentos fMP4
- O segmento init contém caixas
prji
e hfov
- Ou, se for ativado manualmente por meio da configuração da IU.
Modos VR suportados:
- Projeção equiretangular com 360 graus de campo de visão horizontal.
- Projeção Cubemap com 360 graus de campo de visão horizontal.
NOTAS:
- VR é compatível apenas com streams claros ou HLS-AES. O DRM impede o acesso aos pixels de vídeo para transformação.
Documentação e links importantes
- Demonstração (fontes)
- Demonstração noturna
- Índice de demonstração
- Documentação da API
- Tutoriais
- Builds hospedados nas bibliotecas hospedadas do Google
- Compilações hospedadas em jsDelivr
- Roteiro de desenvolvimento
- Lista de anúncios (inscreva-se para anúncios e pesquisas pouco frequentes)
- Assine os lançamentos seguindo as instruções deste blog
Perguntas frequentes
Para ajuda geral e antes de registrar qualquer bug, leia o FAQ.
Contribuindo
Se você tiver melhorias ou correções, adoraríamos receber sua contribuição. Leia CONTRIBUTING.md para obter mais informações sobre o processo que gostaríamos que os contribuidores seguissem.
Integrações de estrutura
A equipe do Shaka não tem largura de banda e experiência para fornecer orientação e suporte para a integração do Shaka Player com estruturas específicas, mas alguns de nossos usuários fizeram isso com sucesso e criaram tutoriais para ajudar outros iniciantes.
Biblioteca Shaka + ReactJS
- https://github.com/winoffrg/limeplay
Integrações Shaka + ReactJS:
- https://github.com/matvp91/shaka-player-react
- https://github.com/amit08255/shaka-player-react-with-ui-config
Integração Shaka + Next.js:
- https://github.com/amit08255/shaka-player-react-with-ui-config/tree/master/nextjs-shaka-player
Integrações Shaka + Vue.js:
- https://github.com/davidjamesherzog/shaka-player-vuejs
Integração Shaka + Nuxt.js:
- https://github.com/davidjamesherzog/shaka-player-nuxtjs
Integração Shaka + video.js:
- https://github.com/davidjamesherzog/videojs-shaka
Integração Shaka + Angular:
- https://github.com/PatrickKalkman/shaka-player-angular
Se você publicou códigos/tutoriais de integração Shaka, sinta-se à vontade para enviar PRs para adicioná-los a esta lista, teremos prazer em aprovar!