Ответ 1
Кажется, что большинство браузеров допускают второй подход, хотя вам нужно знать частоту кадров. Однако Opera является исключением и требует подхода, аналогичного вашему первому (результат не идеальный). Здесь представлена демонстрационная страница в которой используется видеофрагмент 29,97 кадров в секунду (телевизионный стандарт США). Обратите внимание, что он не был широко протестирован, поэтому он может не работать в IE 9, Firefox 4 или будущих версиях любого браузера.
HTML:
<p id="time"></p>
<video id="v0" controls tabindex="0" autobuffer preload>
<source type="video/webm; codecs="vp8, vorbis"" src="http://www.html5rocks.com/tutorials/video/basics/Chrome_ImF.webm"></source>
<source type="video/ogg; codecs="theora, vorbis"" src="http://www.html5rocks.com/tutorials/video/basics/Chrome_ImF.ogv"></source>
<source type="video/mp4; codecs="avc1.42E01E, mp4a.40.2"" src="http://www.html5rocks.com/tutorials/video/basics/Chrome_ImF.mp4"></source>
<p>Sorry, your browser does not support the <video> element.</p>
</video>
JavaScript (запускается на загрузку страницы и использует jQuery 1.4.4 для краткости):
var vid = $('#v0')[0];
vid.onplay = vid.onclick = function() {
vid.onplay = vid.onclick = null;
setTimeout(function() {
vid.pause();
setInterval(function() {
if($.browser.opera) {
var oldHandler = vid.onplay;
vid.onplay = function() {
vid.pause();
vid.onplay = oldHandler;
};
vid.play();
} else {
vid.currentTime += (1 / 29.97);
}
}, 2000);
}, 12000);
setInterval(function() {
$('#time').html((vid.currentTime * 29.97).toPrecision(5));
}, 100);
};