修正直播startNumber计算逻辑

This commit is contained in:
nilaoda 2022-07-10 18:23:51 +08:00
parent 85dee71f1e
commit 11b66df5e6
1 changed files with 8 additions and 6 deletions

View File

@ -145,6 +145,11 @@ namespace N_m3u8DL_RE.Parser.Extractor
"audio" => MediaType.AUDIO, "audio" => MediaType.AUDIO,
_ => null _ => null
}; };
//优化字幕场景识别
if (streamSpec.Codecs == "stpp" || streamSpec.Codecs == "wvtt")
{
streamSpec.MediaType = MediaType.SUBTITLES;
}
streamSpec.Playlist.IsLive = isLive; streamSpec.Playlist.IsLive = isLive;
//设置刷新间隔 timeShiftBufferDepth / 2 //设置刷新间隔 timeShiftBufferDepth / 2
if (timeShiftBufferDepth != null) if (timeShiftBufferDepth != null)
@ -328,11 +333,8 @@ namespace N_m3u8DL_RE.Parser.Extractor
var availableTime = DateTime.Parse(availabilityStartTime); var availableTime = DateTime.Parse(availabilityStartTime);
var ts = now - availableTime; var ts = now - availableTime;
var updateTs = XmlConvert.ToTimeSpan(timeShiftBufferDepth); var updateTs = XmlConvert.ToTimeSpan(timeShiftBufferDepth);
if (startNumberStr == null) //(当前时间到发布时间的时间差 - 最小刷新间隔) / 分片时长
{ startNumber += (long)((ts.TotalSeconds - updateTs.TotalSeconds) * timescale / duration);
//(当前时间到发布时间的时间差 - 最小刷新间隔) / 分片时长
startNumber = (long)((ts.TotalSeconds - updateTs.TotalSeconds) * timescale / duration);
}
totalNumber = (long)(updateTs.TotalSeconds * timescale / duration); totalNumber = (long)(updateTs.TotalSeconds * timescale / duration);
} }
for (long index = startNumber, segIndex = 0; index < startNumber + totalNumber; index++, segIndex++) for (long index = startNumber, segIndex = 0; index < startNumber + totalNumber; index++, segIndex++)
@ -341,7 +343,7 @@ namespace N_m3u8DL_RE.Parser.Extractor
var mediaUrl = ParserUtil.ReplaceVars(ParserUtil.CombineURL(segBaseUrl, media), varDic); var mediaUrl = ParserUtil.ReplaceVars(ParserUtil.CombineURL(segBaseUrl, media), varDic);
MediaSegment mediaSegment = new(); MediaSegment mediaSegment = new();
mediaSegment.Url = PreProcessUrl(mediaUrl); mediaSegment.Url = PreProcessUrl(mediaUrl);
mediaSegment.Index = segIndex; mediaSegment.Index = isLive ? index : segIndex; //直播直接用startNumber
mediaSegment.Duration = duration / (double)timescale; mediaSegment.Duration = duration / (double)timescale;
streamSpec.Playlist.MediaParts[0].MediaSegments.Add(mediaSegment); streamSpec.Playlist.MediaParts[0].MediaSegments.Add(mediaSegment);
} }