aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Taylor <user234683@users.noreply.github.com>2021-08-28 09:32:30 -0700
committerJesús <heckyel@hyperbola.info>2021-08-29 22:50:10 -0500
commitaacbf07ad726a4ef9bd79da33e4675dcf31bbad8 (patch)
treed2909e83dc5f613e75c2b3944b54cd02cb3ccc67
parent9d3ebca622f7eddd3539e4532957dcf8487feb72 (diff)
downloadyt-local-aacbf07ad726a4ef9bd79da33e4675dcf31bbad8.tar.lz
yt-local-aacbf07ad726a4ef9bd79da33e4675dcf31bbad8.tar.xz
yt-local-aacbf07ad726a4ef9bd79da33e4675dcf31bbad8.zip
av-merge: Use tickEnd+1 when calculating segment time ranges
tickEnd is inclusive, so two segments might have the following ticks: -- Segment 0 -- tickStart: 0 tickEnd: 44099 -- Segment 1 -- tickStart: 44100 tickEnd: 88199 When doing calculations in seconds about segment extent, there were gaps between segment 0's end and segment 1's beginning. This sometimes resulted in errors of not finding the corresponding segment index inside these gaps. Using (tickEnd+1)/this.sidx.timeScale is the correct method. Signed-off-by: Jesús <heckyel@hyperbola.info>
-rw-r--r--youtube/static/js/av-merge.js9
1 files changed, 5 insertions, 4 deletions
diff --git a/youtube/static/js/av-merge.js b/youtube/static/js/av-merge.js
index 84e121c..93664b9 100644
--- a/youtube/static/js/av-merge.js
+++ b/youtube/static/js/av-merge.js
@@ -225,7 +225,7 @@ Stream.prototype.appendSegment = function(segmentIdx, chunk) {
while (numDeleted < 3 && i < currentSegment) {
let entry = this.sidx.entries[i];
let start = entry.tickStart/this.sidx.timeScale;
- let end = entry.tickEnd/this.sidx.timeScale;
+ let end = (entry.tickEnd+1)/this.sidx.timeScale;
if (entry.have) {
this.reportWarning('Deleting segment', i);
this.sourceBuffer.remove(start, end);
@@ -248,7 +248,7 @@ Stream.prototype.getSegmentIdx = function(videoTime) {
// go up or down to find correct index
while (index >= 0 && index < this.sidx.entries.length) {
var entry = this.sidx.entries[index];
- if (entry.tickStart <= currentTick && entry.tickEnd >= currentTick){
+ if (entry.tickStart <= currentTick && (entry.tickEnd+1) > currentTick){
return index;
}
index = index + increment;
@@ -296,7 +296,7 @@ Stream.prototype.segmentInBuffer = function(segmentIdx) {
var entry = this.sidx.entries[segmentIdx];
// allow for 0.01 second error
var timeStart = entry.tickStart/this.sidx.timeScale + 0.01;
- var timeEnd = entry.tickEnd/this.sidx.timeScale - 0.01;
+ var timeEnd = (entry.tickEnd+1)/this.sidx.timeScale - 0.01;
var timeRanges = this.sourceBuffer.buffered;
for (var i=0; i < timeRanges.length; i++) {
if (timeRanges.start(i) <= timeStart && timeEnd <= timeRanges.end(i)) {
@@ -311,7 +311,8 @@ Stream.prototype.fetchSegment = function(segmentIdx) {
this.reportDebug(
'Fetching segment', segmentIdx, ', bytes',
entry.start, entry.end, ', seconds',
- entry.tickStart/this.sidx.timeScale, entry.tickEnd/this.sidx.timeScale
+ entry.tickStart/this.sidx.timeScale,
+ (entry.tickEnd+1)/this.sidx.timeScale
)
fetchRange(
this.url,