Skip to content

Commit

Permalink
Fix for Flash pseudo-streaming JW7-1819
Browse files Browse the repository at this point in the history
  • Loading branch information
Rob Walch committed Nov 20, 2015
1 parent a1b6873 commit 621a132
Showing 1 changed file with 16 additions and 14 deletions.
30 changes: 16 additions & 14 deletions src/flash/com/longtailvideo/jwplayer/media/VideoMediaProvider.as
Expand Up @@ -144,7 +144,7 @@ public class VideoMediaProvider extends MediaProvider {
} else if (_keyframes) {
_position = pos;
_offset = seekOffset(pos);
_stream.seek(_position);
loadStream();
} else {
// Delay the seek if no keyframes yet
_starttime = pos;
Expand Down Expand Up @@ -317,17 +317,21 @@ public class VideoMediaProvider extends MediaProvider {
error('no playable source');
return;
}
loadStream();
}

private function loadStream():void {
var levels:Array = item.levels;
var url:String = Strings.getAbsolutePath(levels[_currentQuality].file);
var prm:Number = _offset.byte;
if (_item.type == 'mp4') {
prm = _offset.time;
}

// set complete to false before _stream.play is called
_complete = false;
_buffered = 0;

// need to call stream.play even when preloading, because this is how stream starts to load the content
if (!_startparam || _offset.time == 0) {
_stream.play(url);
Expand All @@ -339,26 +343,24 @@ public class VideoMediaProvider extends MediaProvider {

sendBufferEvent(0);

// TODO: do this on enter frame like HLS
clearInterval(_interval);
_seeking = true;
_interval = setInterval(positionHandler, 100);
}

/** Return the seek offset based upon a position. **/
private function seekOffset(position:Number):Object {
if (!_keyframes || !_startparam || position == 0) {
return {byte: 0, time: 0};
}
for (var i:Number = 0; i < _keyframes.times.length - 1; i++) {
if (_keyframes.times[i] <= position && _keyframes.times[i + 1] >= position) {
break;
if (_keyframes && _startparam && position > 0) {
for (var i:uint = _keyframes.times.length-1; i--;) {
if (_keyframes.times[i] <= position && _keyframes.times[i + 1] >= position) {
return {
byte: _keyframes.filepositions[i],
time: _keyframes.times[i]
}
}
}
}
return {
byte: _keyframes.filepositions[i],
time: _keyframes.times[i]
}
return {byte: 0, time: 0};
}

/** Catch security errors. **/
Expand Down

0 comments on commit 621a132

Please sign in to comment.