修复相对BaseURL计算错位问题

This commit is contained in:
nilaoda 2022-07-18 23:32:08 +08:00
parent e6371f2b56
commit 09379d60cd
1 changed files with 17 additions and 8 deletions

View File

@ -108,6 +108,8 @@ namespace N_m3u8DL_RE.Parser.Extractor
//处理baseurl嵌套 //处理baseurl嵌套
segBaseUrl = ExtendBaseUrl(period, segBaseUrl); segBaseUrl = ExtendBaseUrl(period, segBaseUrl);
var adaptationSetsBaseUrl = segBaseUrl;
//本Period中的全部AdaptationSet //本Period中的全部AdaptationSet
var adaptationSets = period.Elements().Where(e => e.Name.LocalName == "AdaptationSet"); var adaptationSets = period.Elements().Where(e => e.Name.LocalName == "AdaptationSet");
foreach (var adaptationSet in adaptationSets) foreach (var adaptationSet in adaptationSets)
@ -115,6 +117,8 @@ namespace N_m3u8DL_RE.Parser.Extractor
//处理baseurl嵌套 //处理baseurl嵌套
segBaseUrl = ExtendBaseUrl(adaptationSet, segBaseUrl); segBaseUrl = ExtendBaseUrl(adaptationSet, segBaseUrl);
var representationsBaseUrl = segBaseUrl;
var mimeType = adaptationSet.Attribute("contentType")?.Value ?? adaptationSet.Attribute("mimeType")?.Value; var mimeType = adaptationSet.Attribute("contentType")?.Value ?? adaptationSet.Attribute("mimeType")?.Value;
var frameRate = GetFrameRate(adaptationSet); var frameRate = GetFrameRate(adaptationSet);
//本AdaptationSet中的全部Representation //本AdaptationSet中的全部Representation
@ -401,35 +405,40 @@ namespace N_m3u8DL_RE.Parser.Extractor
if (isLive) if (isLive)
{ {
//直播,这种情况直接略过新的 //直播,这种情况直接略过新的
continue;
} }
else else
{ {
//点播这种情况作为新的part出现 //点播这种情况作为新的part出现
var startIndex = streamList[_index].Playlist?.MediaParts.Last().MediaSegments.Last().Index + 1; var startIndex = streamList[_index].Playlist!.MediaParts.Last().MediaSegments.Last().Index + 1;
foreach (var item in streamSpec.Playlist.MediaParts[0].MediaSegments) var enumerator = streamSpec.Playlist.MediaParts[0].MediaSegments.GetEnumerator();
while (enumerator.MoveNext())
{ {
item.Index = item.Index + startIndex!.Value; enumerator.Current.Index += startIndex;
} }
streamList[_index].Playlist?.MediaParts.Add(new MediaPart() streamList[_index].Playlist!.MediaParts.Add(new MediaPart()
{ {
MediaSegments = streamSpec.Playlist.MediaParts[0].MediaSegments MediaSegments = streamSpec.Playlist.MediaParts[0].MediaSegments
}); });
} }
} }
else else
{ {
if (streamSpec.MediaType == MediaType.SUBTITLES && streamSpec.Extension == "mp4")
{
streamSpec.Extension = "m4s";
}
//分片默认后缀m4s //分片默认后缀m4s
if (streamSpec.Extension == null || streamSpec.Playlist.MediaParts.Sum(x => x.MediaSegments.Count) > 1) if (streamSpec.Extension == null || streamSpec.Playlist.MediaParts.Sum(x => x.MediaSegments.Count) > 1)
{ {
streamSpec.Extension = "m4s"; streamSpec.Extension = "m4s";
} }
streamList.Add(streamSpec); streamList.Add(streamSpec);
//将segBaseUrl恢复 (重要)
segBaseUrl = this.BaseUrl;
} }
//恢复BaseURL相对位置
segBaseUrl = representationsBaseUrl;
} }
//恢复BaseURL相对位置
segBaseUrl = adaptationSetsBaseUrl;
} }
} }