优化直播中对重定向的处理

This commit is contained in:
nilaoda 2022-11-13 17:37:02 +08:00
parent f2976d3f92
commit 5f43515791
2 changed files with 24 additions and 12 deletions

View File

@ -488,9 +488,21 @@ namespace N_m3u8DL_RE.Parser.Extractor
public async Task RefreshPlayListAsync(List<StreamSpec> streamSpecs)
{
if (streamSpecs.Count == 0) return;
var (rawText, url) = await HTTPUtil.GetWebSourceAndNewUrlAsync(ParserConfig.OriginalUrl, ParserConfig.Headers);
var (rawText, url) = ("", ParserConfig.Url);
try
{
(rawText, url) = await HTTPUtil.GetWebSourceAndNewUrlAsync(ParserConfig.Url, ParserConfig.Headers);
}
catch (HttpRequestException) when (ParserConfig.Url!= ParserConfig.OriginalUrl)
{
//当URL无法访问时再请求原始URL
(rawText, url) = await HTTPUtil.GetWebSourceAndNewUrlAsync(ParserConfig.OriginalUrl, ParserConfig.Headers);
}
ParserConfig.Url = url;
SetInitUrl();
var newStreams = await ExtractStreamsAsync(rawText);
foreach (var streamSpec in streamSpecs)
{

View File

@ -505,9 +505,17 @@ namespace N_m3u8DL_RE.Parser.Extractor
this.M3u8Content = File.ReadAllText(uri.LocalPath);
}
else if (url.StartsWith("http"))
{
try
{
(this.M3u8Content, url) = await HTTPUtil.GetWebSourceAndNewUrlAsync(url, ParserConfig.Headers);
}
catch (HttpRequestException) when (url != ParserConfig.OriginalUrl)
{
//当URL无法访问时再请求原始URL
(this.M3u8Content, url) = await HTTPUtil.GetWebSourceAndNewUrlAsync(ParserConfig.OriginalUrl, ParserConfig.Headers);
}
}
this.M3u8Url = url;
this.SetBaseUrl();
@ -516,10 +524,10 @@ namespace N_m3u8DL_RE.Parser.Extractor
public async Task FetchPlayListAsync(List<StreamSpec> lists)
{
if (MasterM3u8Flag && !FirstRefreshFlag)
if (MasterM3u8Flag)
{
//重新加载master m3u8, 刷新选中流的URL
await LoadM3u8FromUrlAsync(ParserConfig.OriginalUrl);
await LoadM3u8FromUrlAsync(ParserConfig.Url);
var newStreams = await ParseMasterListAsync();
newStreams = newStreams.DistinctBy(p => p.Url).ToList();
foreach (var l in lists)
@ -532,11 +540,6 @@ namespace N_m3u8DL_RE.Parser.Extractor
}
}
}
else if (!MasterM3u8Flag && lists.Count == 1 && ParserConfig.OriginalUrl != lists[0].Url)
{
//单m3u8, 但是发生了重定向, 则应从原始URL开始解析
lists[0].Url = ParserConfig.OriginalUrl;
}
for (int i = 0; i < lists.Count; i++)
{
@ -555,9 +558,6 @@ namespace N_m3u8DL_RE.Parser.Extractor
lists[i].Extension = lists[i].Playlist!.MediaInit != null ? "m4s" : "ts";
}
}
//首次刷新已结束后续重新加载时应该从master开始重新加载
FirstRefreshFlag = false;
}
public async Task RefreshPlayListAsync(List<StreamSpec> streamSpecs)