Die Demo, die auf html5demos präsentiert wurde funktioniert, aber es kann leicht aus der Synchronisation geraten.
Hier ist ein Artikel mit einer Lösung, die Verwendung von request (Informationen darüber: Leaner, Meaner, Faster Animations with requestAnimationFrame, Animating with javascript: from setInterval to requestAnimationFrame) macht und es ist viel besser: HTML5 Video: Synchronizing Playback of Two Videos.
Beachten Sie, dass die dort bereitgestellte Demo (gehostet bei jsfiddle) eine falsche Verbindung zu einer js-Quelle hat. Ich kann es auf dieser neuen Seite aktualisiert:
http://jsfiddle.net/aqUNf/1/
Bedenken Browser-Unterstützung, diese Funktion von Firefox unterstützt wird, Chrome und Safari von 6 und IE 10 (table für weitere Details). Andernfalls fällt es auf setInterval zurück, das nicht die gleiche Leistung und den gleichen Batteriesparvorteil bietet.
(Es nutzt Popcorn.js durch die Art und Weise, die ein wirklich schönes Projekt von Mozilla ist)
Und hier ist der Code (direkt aus dem Demo genommen):
var videos = {
a: Popcorn("#a"),
b: Popcorn("#b"),
},
scrub = $("#scrub"),
loadCount = 0,
events = "play pause timeupdate seeking".split(/\s+/g);
// iterate both media sources
Popcorn.forEach(videos, function(media, type) {
// when each is ready...
media.listen("canplayall", function() {
// trigger a custom "sync" event
this.trigger("sync");
// set the max value of the "scrubber"
scrub.attr("max", this.duration());
// Listen for the custom sync event...
}).listen("sync", function() {
// Once both items are loaded, sync events
if (++loadCount == 2) {
// Iterate all events and trigger them on the video B
// whenever they occur on the video A
events.forEach(function(event) {
videos.a.listen(event, function() {
// Avoid overkill events, trigger timeupdate manually
if (event === "timeupdate") {
if (!this.media.paused) {
return;
}
videos.b.trigger("timeupdate");
// update scrubber
scrub.val(this.currentTime());
return;
}
if (event === "seeking") {
videos.b.currentTime(this.currentTime());
}
if (event === "play" || event === "pause") {
videos.b[ event ]();
}
});
});
}
});
});
scrub.bind("change", function() {
var val = this.value;
videos.a.currentTime(val);
videos.b.currentTime(val);
});
// With requestAnimationFrame, we can ensure that as
// frequently as the browser would allow,
// the video is resync'ed.
function sync() {
videos.b.currentTime(
videos.a.currentTime()
);
requestAnimFrame(sync);
}
sync();
interessant sah ich eine Demo die zeigt, Das gleiche Video einer Katze zweimal und beide wurden synchronisiert. es war nicht perfekt, aber ein Macbook ist auch nicht die leistungsfähigste Maschine. kann mich nicht erinnern, wo ich das gesehen habe, lemme google – Anurag