Added back old method of getting caption position for Flash video playback.

Because with speed changing the time also changes for Flash playback,
a different way to calculate the current time is needed than for HTML5
playback. I have added conditions for Flash and HTML5 video, and put
old method of calculating time for Flash.

I have tested it on the YouTube video ZwkTiUPN0mg. Both HTML5 mode and
Flash mode have proper video-captions syncing with this fix. NOTE: to view
YouTube video in Flash mode you either have to use an old browser (ex. Firefox
version 18) or hard code in source that state.currentPlayerMode = 'flash' (in
function _setPlayerMode(), file 01_initialize.js).
This commit is contained in:
Valera Rozuvan
2013-08-16 14:06:42 +03:00
committed by Jay Zoldak
parent a66743128a
commit 4b5f77aa55

View File

@@ -312,15 +312,34 @@ function () {
var newIndex;
if (this.videoCaption.loaded) {
time = Math.round(parseInt(time, 10) * 1000);
// Current mode === 'flash' can only be for YouTube videos. So, we
// don't have to also check for videoType === 'youtube'.
if (this.currentPlayerMode === 'flash') {
// Total play time changes with speed change. Also there is
// a 250 ms delay we have to take into account.
time = Math.round(
Time.convert(time, this.speed, '1.0') * 1000 + 250
);
} else {
// Total play time remains constant when speed changes.
time = Math.round(parseInt(time, 10) * 1000);
}
newIndex = this.videoCaption.search(time);
if (newIndex !== void 0 && this.videoCaption.currentIndex !== newIndex) {
if (
newIndex !== void 0 &&
this.videoCaption.currentIndex !== newIndex
) {
if (this.videoCaption.currentIndex) {
this.videoCaption.subtitlesEl.find('li.current').removeClass('current');
this.videoCaption.subtitlesEl
.find('li.current')
.removeClass('current');
}
this.videoCaption.subtitlesEl.find("li[data-index='" + newIndex + "']").addClass('current');
this.videoCaption.subtitlesEl
.find("li[data-index='" + newIndex + "']")
.addClass('current');
this.videoCaption.currentIndex = newIndex;
@@ -333,9 +352,29 @@ function () {
var time;
event.preventDefault();
time = parseInt($(event.target).data('start'), 10)/1000;
this.trigger('videoPlayer.onCaptionSeek', {'type': 'onCaptionSeek', 'time': time});
// Current mode === 'flash' can only be for YouTube videos. So, we
// don't have to also check for videoType === 'youtube'.
if (this.currentPlayerMode === 'flash') {
// Total play time changes with speed change. Also there is
// a 250 ms delay we have to take into account.
time = Math.round(
Time.convert(
$(event.target).data('start'), '1.0', this.speed
) / 1000
);
} else {
// Total play time remains constant when speed changes.
time = parseInt($(event.target).data('start'), 10)/1000;
}
this.trigger(
'videoPlayer.onCaptionSeek',
{
'type': 'onCaptionSeek',
'time': time
}
);
}
function calculateOffset(element) {