Synchronise two or more HTML5 media elements. Similar to the unimplemented MediaController
api.
This works by continuously adjusing the playbackRate
of the media elements, or performing a seek operation if the difference is too big.
npm install --save media-element-syncer
All media elements passed to addChild
will remain synchronised with the source element.
MediaElementSyncer
is eligible for garbage collection when there are no children.
import { MediaElementSyncer } from 'media-element-syncer';
const source = document.getElementById('source');
const destination1 = document.getElementById('destination1');
const destination2 = document.getElementById('destination2');
const syncer = new MediaElementSyncer(source);
syncer.addChild(destination1);
syncer.addChild(destination2, { offset: -1000 });
// syncer.removeChild(destination1);
The optional second param to MediaElementSyncer
takes an object which has the following optional properties:
refreshInterval
: how often to resync the elements. (default: 200ms)correctionTime
: how many milliseconds into the future to aim for being in sync. (default: 500ms)seekThreshold
: if the time is out by more than this amount, a seek will be performed instead of adjusting theplaybackRate
. (default: 1000ms)
The code for the demo is here and there is a hosted version here.