Shaka Player es una biblioteca JavaScript de código abierto para medios adaptativos. Reproduce formatos multimedia adaptables (como DASH, HLS y MSS) en un navegador, sin utilizar complementos ni Flash. En cambio, Shaka Player utiliza los estándares web abiertos MediaSource Extensions y Encrypted Media Extensions.
Shaka Player también admite el almacenamiento y la reproducción de medios sin conexión mediante IndexedDB. El contenido se puede almacenar en cualquier navegador. El almacenamiento de licencias depende de la compatibilidad del navegador.
Nuestro principal objetivo es hacer que sea lo más fácil posible la transmisión de vídeo y audio con velocidad de bits adaptable utilizando tecnologías de navegador modernas. Intentamos mantener la biblioteca liviana, simple y libre de dependencias de terceros. Todo lo que necesita para construir e implementar está en las fuentes.
Para obtener detalles sobre lo que viene a continuación, consulte nuestra hoja de ruta de desarrollo.
Sucursales mantenidas
Consulte wanted-branches.md para obtener la lista actualizada de sucursales mantenidas de Shaka Player.
Matriz de soporte de plataforma y navegador
| Navegador | ventanas | Impermeable | linux | Androide | iOS >= 9 | iOS >= 17.1 | iPadOS >= 13 | ChromeOS | Otro |
|---|
| Cromo¹ | Y | Y | Y | Y | Nativo | Nativo | Nativo | Y | - |
| Firefox¹ | Y | Y | Y | no probado⁵ | Nativo | Nativo | Nativo | - | - |
| Borde¹ | Y | - | - | - | - | - | - | - | - |
| Borde de cromo | Y | Y | Y | no probado⁵ | Nativo | Nativo | Nativo | - | - |
| ES DECIR | norte | - | - | - | - | - | - | - | - |
| Safari¹ | - | Y | - | - | Nativo | Y | Y | - | - |
| Ópera¹ | Y | Y | Y | no probado⁵ | Nativo | - | - | - | - |
| Chromecast². | - | - | - | - | - | - | - | - | Y |
| Tizen TV³ | - | - | - | - | - | - | - | - | Y |
| WebOS⁶ | - | - | - | - | - | - | - | - | Y |
| Hisense⁷ | - | - | - | - | - | - | - | - | Y |
| Xbox uno | - | - | - | - | - | - | - | - | Y |
| Estación de juegos 4⁷ | - | - | - | - | - | - | - | - | Y |
| Estación de juegos 5⁷ | - | - | - | - | - | - | - | - | Y |
NOTAS:
- ¹: En macOS, solo se admite Safari 9+. En iOS, solo se admite iOS 9+. Se rechazarán las versiones anteriores.
- ²: Se prueba el último firmware estable de Chromecast. Tanto el remitente como el receptor se pueden implementar con Shaka Player.
- ³: El modelo Tizen 2017 es probado y respaldado activamente por el equipo de Shaka Player. El modelo Tizen 2016 cuenta con el respaldo de la comunidad y no lo hemos probado nosotros.
- ⁵: Se espera que funcionen, pero el equipo de Shaka Player no los prueba activamente.
- ⁶: Se espera que funcionen, pero cuentan con el respaldo de la comunidad y no los hemos probado.
- Soporte oficial para LG WebOS TV: #1330
- ⁷: Se espera que funcionen, pero cuentan con el respaldo de la comunidad y no los hemos probado nosotros.
NOTAS para iOS y iPadOS:
- Admitimos iOS 9+ a través del reproductor HLS nativo de Apple. Proporcionamos la misma API de nivel superior, pero simplemente configuramos el elemento
src del video en manifest/media. Por tanto, dependemos del navegador que admita los manifiestos. - Dado que iPadOS 13 MediaSource Extensions es compatible
- Desde iPadOS 17 e iOS 17.1, se admiten las extensiones ManagedMediaSource
Matriz de soporte de formato de manifiesto
| Formato | Vídeo bajo demanda | Vivir | Evento | Grabación en curso |
|---|
| ESTRELLARSE | Y | Y | - | Y |
| HLS | Y | Y | Y | - |
| MSS | Y | - | - | - |
También puede crear un complemento de analizador de manifiestos para admitir formatos de manifiesto personalizados.
Funciones del tablero
Funciones DASH compatibles:
- Grabaciones VOD, en vivo y en progreso (contenido VOD dinámico)
- MPD@timeShiftBufferDepth para buscar hacia atrás en transmisiones en vivo
- Contenido de varios períodos (estático y dinámico)
- Elementos Xlink (actuar=solo onLoad, resolución a cero, contenido alternativo)
- Todas las formas de información de índice de segmento: SegmentBase@indexRange, SegmentTimeline, SegmentTemplate@duration, SegmentTemplate@index, SegmentList
- Manifiestos multicódec/multicontenedor (negociaremos el soporte con el navegador y elegiremos los mejores)
- Contenido cifrado (incluidos esquemas personalizados de ContentProtection, PSSH en el manifiesto)
- Rotación de claves
- Pistas en modo truco
- WebVTT y TTML
- Subtítulos CEA-608/708
- Variantes de múltiples códecs (en plataformas compatibles con changeType)
- encadenamiento MPD
- Actualizaciones del parche MPD para SegmentTemplate con $Número$ , SegmentTimeline con $Número$ y SegmentTimeline con $Tiempo$
Funciones DASH no compatibles:
- Xlink con actuar = onRequest
- Manifiestos sin información de segmento: #1088
- Múltiples pistas en modo truco para la misma resolución con diferentes velocidades de fotogramas o velocidades de bits
- Escalas de tiempo tan grandes que las marcas de tiempo no se pueden representar como números enteros en JavaScript (2^53): #1667
- Modificar elementos con un atributo @schemeIdUri a través del parche MPD
- Desreferenciación de Xlink con MPD Patch
Características de HLS
Funciones HLS compatibles:
- Tipos de VOD, en vivo y eventos
- Transmisión de baja latencia con segmentos parciales, sugerencias de precarga, actualizaciones delta y bloqueo de recarga de listas de reproducción
- Discontinuidad
- Compatibilidad con ISO-BMFF/MP4/CMAF
- Compatibilidad con MPEG-2 TS
- WebVTT y TTML
- Subtítulos CEA-608/708
- Contenido cifrado con PlayReady y Widevine
- Contenido cifrado con FairPlay (Safari solo en macOS e iOS 9+)
- Compatibilidad con AES-128, AES-256 y AES-256-CTR en navegadores compatibles con Web Crypto API
- Compatibilidad con SAMPLE-AES y SAMPLE-AES-CTR (identidad) en navegadores compatibles con ClearKey
- Rotación de claves
- AAC, MP3, AC-3 y EC-3 sin procesar (sin contenedor MP4)
- Listas de reproducción de solo fotograma (para reproducción con trucos y miniaturas)
- #EXT-X-IMAGE-STREAM-INF para miniaturas
- Intersticiales
- Cambio de contenedor durante la reproducción (por ejemplo: MP4 a TS o AAC a TS)
Funciones HLS no compatibles:
- Atributo X-SNAP en intersticiales
Etiquetas HLS compatibles
Para obtener detalles sobre el formato HLS y los significados de estas etiquetas, consulte https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis
Etiquetas de lista de reproducción multivariante
-
#EXT-X-STREAM-INF:<attribute-list> <URI> -
#EXT-X-MEDIA:<attribute-list> -
#EXT-X-IMAGE-STREAM-INF:<attribute-list> -
#EXT-XI-FRAME-STREAM-INF:<attribute-list> -
#EXT-X-SESSION-DATA:<attribute-list> -
#EXT-X-SESSION-KEY:<attribute-list> Selección y precarga del sistema de claves EME -
#EXT-X-START:TIME-OFFSET=<n> -
#EXT-X-CONTENT-STEERING:<attribute-list> Dirección de contenido -
#EXT-X-DEFINE:<attribute-list> Sustitución de variables (atributos NAME,VALUE,QUERYPARAM )
Etiquetas de listas de reproducción multimedia
-
#EXTM3U -
#EXTINF:<duration>,[<title>] -
#EXT-X-PLAYLIST-TYPE:<type -
#EXT-X-ENDLIST -
#EXT-X-MEDIA-SEQUENCE=<n> -
#EXT-X-TARGETDURATION=<n> -
#EXT-X-DISCONTINUITY -
#EXT-X-DISCONTINUITY-SEQUENCE=<n> -
#EXT-X-BYTERANGE=<n>[@<o>] -
#EXT-X-MAP:<attribute-list> -
#EXT-X-KEY:<attribute-list> ( KEYFORMAT="identity",METHOD=SAMPLE-AES solo es compatible con segmentos MP4) -
#EXT-X-PROGRAM-DATE-TIME:<attribute-list> -
#EXT-X-START:TIME-OFFSET=<n> -
#EXT-X-SERVER-CONTROL:<attribute-list> -
#EXT-X-PART-INF:PART-TARGET=<n> -
#EXT-X-PART:<attribute-list> -
#EXT-X-SKIP:<attribute-list> Listas de reproducción Delta -
#EXT-X-DATERANGE:<attribute-list> Metadatos -
#EXT-X-DEFINE:<attribute-list> Importación y sustitución de variables (atributos NAME,VALUE,IMPORT,QUERYPARAM ) -
#EXT-X-GAP -
#EXT-X-PRELOAD-HINT:<attribute-list> -
#EXT-X-BITRATE
Compatibilidad con MPEG-5 Parte 2 LCEVC
Solo se admite en navegadores compatibles con Media Source Extensions SourceBuffer
Compatibilidad con decodificación MPEG-5 Part2 LCEVC (la decodificación proporcionada por lcevc_dec.js debe incluirse por separado)
Documentación de integración: documentos
Más sobre MPEG-5 Parte 2 LCEVC
Funciones de MSS
Funciones de MSS compatibles:
- VOD
- AAC y H.264
- Contenido cifrado (PlayReady)
- TTML/DFXP
- Sólo compatible con codem-isoboxer
Funciones de MSS no compatibles:
Matriz de soporte DRM
| Navegador | amplia vid | Listo para jugar | Juego limpio | Borrar clave⁶ |
|---|
| Cromo¹ | Y | - | - | Y |
| Firefox² | Y | - | - | Y |
| Borde³ | - | Y | - | - |
| Borde de cromo | Y | Y | - | Y |
| Safari | - | - | Y | - |
| Ópera | Y | - | - | Y |
| Chromecast | Y | Y | - | Y |
| Tizen TV | Y | Y | - | Y |
| WebOS⁷ | no probado⁷ | no probado⁷ | - | no probado⁷ |
| Hisense⁷ | no probado⁷ | no probado⁷ | - | no probado⁷ |
| Xbox uno | - | Y | - | - |
| Estación de juegos 4⁷ | - | no probado⁷ | - | no probado⁷ |
| Estación de juegos 5⁷ | - | no probado⁷ | - | no probado⁷ |
Otros sistemas DRM deberían funcionar de inmediato si son interoperables y cumplen con las especificaciones EME.
NOTAS:
- ¹: Solo las versiones oficiales de Chrome contienen Widevine CDM. Chromium creado a partir de la fuente no es compatible con DRM.
- ²: DRM debe ser habilitado por el usuario. La primera vez que un usuario de Firefox visita un sitio con medios cifrados, se le pedirá que habilite DRM.
- ³: PlayReady en Edge no parece funcionar en una máquina virtual o en un escritorio remoto.
- ⁶: ClearKey es una herramienta útil para la depuración y no proporciona seguridad de contenido real.
- ⁷: Se espera que funcionen, pero cuentan con el respaldo de la comunidad y no los hemos probado nosotros.
| Manifiesto | amplia vid | Listo para jugar | Juego limpio | Borrar clave |
|---|
| ESTRELLARSE | Y | Y | - | Y |
| HLS | Y | Y | Y ¹ | - |
| MSS | - | Y | - | - |
NOTAS:
- ¹: De forma predeterminada, FairPlay se maneja mediante el reproductor HLS nativo de Apple, cuando está en Safari. Sin embargo, admitimos FairPlay a través de MSE/EME. Consulte el valor de configuración
streaming.useNativeHlsForFairPlay .
Soporte de subtítulos y contenedor de medios
Shaka Player admite:
- ISO-BMFF/CMAF/MP4
- Depende de la compatibilidad del navegador con el contenedor a través de MediaSource
- Puede analizar el cuadro "sidx" para SegmentBase@indexRange y SegmentTemplate@index de DASH
- Puede buscar y analizar el cuadro "tfdt" para encontrar la hora de inicio del segmento en HLS
- Para MSS, se requiere codem-isoboxer v0.3.7+
- WebM
- Depende de la compatibilidad del navegador con el contenedor a través de MediaSource
- Puede analizar elementos de datos de indicaciones para SegmentBase@indexRange y SegmentTemplate@index de DASH.
- No compatible con HLS
- MPEG-2TS
- Se puede reproducir en cualquier navegador que admita MP4.
- Puede buscar y analizar marcas de tiempo para encontrar la hora de inicio del segmento en HLS
- WebVTT
- Compatible tanto en forma de texto como incrustado en MP4
- TTML
- Compatible tanto en formato XML como incrustado en MP4
- CEA-608
- Compatible con MP4 y TS integrados
- CEA-708
- Compatible con MP4 y TS integrados
- CAA crudo
- Compatible con contenedor AAC sin formato y transmutación a AAC en contenedor MP4 (depende de la compatibilidad del navegador a través de MediaSource).
- MP3 sin formato
- Compatible con contenedores MP3 sin formato y transmutación a MP3 en contenedores MP4 (depende de la compatibilidad del navegador a través de MediaSource).
- AC-3 crudo
- Compatible con contenedor AC-3 sin formato y transmutación a AC-3 en contenedor MP4 (depende de la compatibilidad del navegador a través de MediaSource).
- EC-3 crudo
- Compatible con contenedor EC-3 sin formato y transmutación a EC-3 en contenedor MP4 (depende de la compatibilidad del navegador a través de MediaSource).
- SubRIP (SRT)
- Letras (LRC)
- Subestación Alfa (SSA, ASS)
- Subvisor (SBV)
Los subtítulos los muestra el navegador de forma predeterminada. Las aplicaciones pueden crear un complemento de visualización de texto para que la representación del cliente vaya más allá de los atributos compatibles con el navegador.
Soporte transmutador
Shaka Player admite:
- AAC sin procesar a AAC en MP4
- MP3 sin formato a MP3 en MP4
- AC-3 sin formato a AC-3 en MP4
- EC-3 sin formato a EC-3 en MP4
- AAC en MPEG-2 TS a AAC en MP4
- AC-3 en MPEG-2 TS a AC-3 en MP4
- EC-3 en MPEG-2 TS a EC-3 en MP4
- MP3 en MPEG-2 TS a MP3 en MP4
- MP3 en MPEG-2 TS a MP3 sin formato
- Opus en MPEG-2 TS a MP3 en MP4
- H.264 en MPEG-2 TS a H.264 en MP4
- H.265 en MPEG-2 TS a H.265 en MP4
- Contenido muxed en MPEG-2 TS con los codecs anteriores
Soporte de miniaturas
Shaka Player admite:
- Miniaturas internas de DASH. Uso del conjunto de adaptación de imágenes DASH-IF IOP
- Miniaturas internas de HLS. Uso de la lista de reproducción de medios de imágenes HLS
- Miniaturas internas de HLS. Uso de listas de reproducción de solo fotograma I con códec mjpg
- WebVTT externo con imágenes/sprites (sólo para VoD)
Monetización con anuncios
Shaka Player admite:
- SDK de IMA para inserción de anuncios del lado del cliente
- SDK de IMA DAI para inserción de anuncios del lado del servidor
- AWS MediaTailor para el lado del cliente
- AWS MediaTailor para el lado del servidor
- Superposiciones de AWS MediaTailor
- Intersticiales HLS
- Inserción de presentación multimedia DASH (alternativa MPD)
- Intersticiales personalizados
- Soporte básico de VAST y VMAP sin IMA (reproducción sin seguimiento)
Soporte de dirección de contenidos
Shaka Player admite dirección de contenido (v1) en DASH y HLS.
Funciones de dirección de contenido compatibles:
- TTL, si falta, el valor predeterminado es 300 segundos.
- RELOAD-URI, si falta, utilizamos la URL proporcionada en el manifiesto como alternativa.
- Reemplazo de HOST solo con PRIORIDAD DE RUTA
Funciones de dirección de contenido no compatibles:
- PATHWAY-CLONES otros reemplazos que no sean HOST.
Soporte de realidad virtual
Shaka Player es compatible con la realidad virtual cuando:
- El contenido se trata automáticamente como realidad virtual si cumple con los siguientes criterios:
- Manifiesto HLS o DASH
- segmentos fMP4
- El segmento de inicio contiene cuadros
prji y hfov
- O, si se habilita manualmente a través de la configuración de la interfaz de usuario.
Modos de realidad virtual compatibles:
- Proyección equirectangular con 360 grados de campo de visión horizontal.
- Proyección Cubemap con 360 grados de campo de visión horizontal.
NOTAS:
- La realidad virtual solo es compatible con transmisiones claras o transmisiones HLS-AES. DRM impide el acceso a los píxeles del vídeo para su transformación.
Documentación y enlaces importantes
- Demostración (fuentes)
- Demostración nocturna
- Índice de demostración
- Documentación API
- Tutoriales
- Compilaciones alojadas en bibliotecas alojadas en Google
- Construcciones alojadas en jsDelivr
- Hoja de ruta de desarrollo
- Lista de anuncios (únase para anuncios y encuestas poco frecuentes)
- Suscríbete a los lanzamientos siguiendo las instrucciones de este blog.
Preguntas frecuentes
Para obtener ayuda general y antes de informar cualquier error, lea las preguntas frecuentes.
Contribuyendo
Si tiene mejoras o correcciones, nos encantaría contar con sus contribuciones. Lea CONTRIBUTING.md para obtener más información sobre el proceso que nos gustaría que siguieran los contribuyentes.
Integraciones de marco
El equipo de Shaka no tiene el ancho de banda ni la experiencia para brindar orientación y soporte para integrar Shaka Player con marcos específicos, pero algunos de nuestros usuarios lo han hecho con éxito y han creado tutoriales para ayudar a otros principiantes.
Biblioteca Shaka + ReactJS
- https://github.com/winoffrg/limeplay
Integraciones Shaka + ReactJS:
- https://github.com/matvp91/shaka-player-react
- https://github.com/amit08255/shaka-player-react-with-ui-config
Integración de Shaka + Next.js:
- https://github.com/amit08255/shaka-player-react-with-ui-config/tree/master/nextjs-shaka-player
Integraciones Shaka + Vue.js:
- https://github.com/davidjamesherzog/shaka-player-vuejs
Integración Shaka + Nuxt.js:
- https://github.com/davidjamesherzog/shaka-player-nuxtjs
Integración Shaka + video.js:
- https://github.com/davidjamesherzog/videojs-shaka
Shaka + Integración angular:
- https://github.com/PatrickKalkman/shaka-player-angular
Si ha publicado códigos/tutoriales de integración de Shaka, no dude en enviar relaciones públicas para agregarlos a esta lista. ¡Con gusto lo aprobaremos!