javascript - Usar MUX Player (Video) en Angular 14/15
Mux es un servicio de API de video que tiene su propio reproductor: MUX Player
Quiero usar este paquete npm en Angular 14/15 importándolo solo en un componente específico. El js solo debe cargarse cuando se cargue este componente.
Importar
Los dos métodos de usar el servicio son:
- vía una importación directa
<script src="https://unpkg.com/@mux/mux-player"></script>en el HTML (lo cual puedo hacer en el archivoindex.htmlde Angular). Sin embargo, esto significa que el script se carga para todos, lo cual no es lo que quiero. - Paquete npm
@mux/mux-player
Uso
Agrega el código al HTML de un componente donde se haya importado el script o paquete npm.
<mux-player
stream-type="on-demand"
playback-id="FuJSYrK0014ec2LPnm11bzC2MAySAQPqA"
metadata-video-title="Tea and Cookies"
metadata-user-id="user-24601"
/>
Asegurándose también de incluir schemas: [CUSTOM_ELEMENTS_SCHEMA] en el módulo (o componente independiente).
Problema
Angular puede ser un poco extraño con los paquetes sin tipar. Creo que este paquete usa TypeScript, pero en cualquier caso, importar el paquete de npm me da muchos errores. Esencialmente, no se está cargando porque Angular lo elimina mediante tree-shaking cuando no estoy usando la clase importada en los archivos ts de los componentes. Esto significa que al cargar, veo: No se puede encontrar el módulo '../../../types/mux' o sus declaraciones de tipo correspondientes y La propiedad 'error' en el tipo 'MuxVideoElement' no es asignable a la misma propiedad en el tipo base 'CustomVideoElement<HTMLVideoElement>'. Al tipo 'MediaError' le faltan las siguientes propiedades del tipo 'MediaError': MEDIA_ERR_ABORTED, MEDIA_ERR_DECODE, MEDIA_ERR_NETWORK, MEDIA_ERR_SRC_NOT_SUPPORTED
Lo que he intentado
Para confirmar que la importación de
<script>y el código HTML funcionan juntos, importé el script en elindex.html, y esto eliminó todos los errores y el reproductor se cargó bien.He intentado importar el paquete npm
import MuxPlayerElement from "@mux/mux-player";, y añadídeclare module "@mux/mux-player";altypings.d.ts.Importa el paquete en el componente y trató de declarar la referencia de plantilla @ViewChild como un MuxPlayerElement, para evitar cualquier tree-shaking.
Hay una demostración de Angular donde dice "¿Este reproductor? Es un libro abierto." en https://www.mux.com/player, sin embargo, esto da como resultado el error Only void and foreign elements can be self closed "mux-player". La solución fácil para esto es cerrar la etiqueta con </mux-player> en lugar de .../>
Respuesta #1
¡Actualización!
Mux abordó el soporte para Angular en 1.9.0
https://docs.mux.com/guides/player/releases#190
Instrucciones de uso:
npm install @mux/mux-player- agrega
schemas: [CUSTOM_ELEMENTS_SCHEMA]al módulo (o componente independiente) - agrega
import "@mux/mux-player"a las importaciones del componente de destino - Usa según lo documentado
<mux-player ...></mux-player>
🎉