Moderno, ligero y sin dependencias. Construido sobre el elemento <video> nativo con soporte para HLS, múltiples calidades, subtítulos y modo ambiente.
Carga un único archivo JS desde la CDN o descarga el archivo dynamo-player.min.js
<script src="https://alexmejf.github.io/dynamo_player/dist/dynamo-player.min.js"></script>
El reproductor se activa automáticamente sobre cualquier <video class="dynamo-player">, <video data-dynamo> o <video id="dynamoPlayer"> en el DOM.
<video class="dynamo-player" // o id="dynamoPlayer" / data-dynamo data-src="mi-video.mp4" // HLS, M3U8, MP4, WebM... poster="poster.jpg" // url del poster controlsOverscreen="true" // controles sobre el video ambientMode="true" // modo ambiental autoThumbnails="true" // miniaturas en seek inPicture="true" // picture-in-picture ></video>
Si insertas el elemento de video dinámicamente o usas selectores personalizados, llama a init() manualmente.
// Inicializa automáticamente todos los reproductores DynamoPlayer.init(); // O con selector personalizado / elemento específico DynamoPlayer.init('.mi-clase-de-video');
Todos los atributos se declaran directamente en el elemento <video>.
El atributo data-src acepta tres formatos distintos.
<video id="dynamoPlayer" data-src="video.mp4"> </video>
<video id="dynamoPlayer" data-src="stream.m3u8"> </video> // hls.js se carga automáticamente
data-src='[ { "label": "1080p", "src": "video-1080.mp4" }, { "label": "720p", "src": "video-720.mp4" }, { "label": "480p", "src": "video-480.mp4" } ]'
data-src='{ "sources": [ { "label": "1080p", "src": "video.mp4" } ], "subtitles": [ { "label": "Español", "srclang": "es", "src": "subs-es.vtt", "default": true } ] }'
Personaliza o sobrescribe cualquier icono SVG directamente mediante la API en tiempo de ejecución o desde el CDN, sin recompilar el proyecto y con actualización reactiva en caliente.
Actualiza uno o varios iconos simultáneamente con setIcons(). Los reproductores activos en la página se actualizarán al instante:
DynamoPlayer.setIcons({ play: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">...</svg>', settings: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">...</svg>', forward: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">...</svg>', volumeHigh: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">...</svg>' });
Modifica iconos individuales mediante setIcon() o asignando directamente en controls / DynamoPlayer.icons:
// Cambio individual con setIcon(): DynamoPlayer.setIcon('play', '<svg>...</svg>'); // Asignación directa en caliente con el alias 'controls': controls['settings'] = '<svg>...</svg>'; // O por instancia de reproductor específica: const video = document.querySelector('#dynamoPlayer'); video.dynamoPlayer.setIcons({ pip: '<svg>...</svg>' });
Restaura todos los iconos originales o consulta el código predeterminado:
// Restaurar todos los iconos por defecto: DynamoPlayer.resetIcons(); // Consultar los iconos originales: const defaultIcons = DynamoPlayer.getDefaultIcons();
El reproductor captura eventos de teclado cuando tiene el foco. Haz clic sobre él para enfocarlo.