优化直播中对重定向的处理
This commit is contained in:
parent
f2976d3f92
commit
5f43515791
|
@ -488,9 +488,21 @@ namespace N_m3u8DL_RE.Parser.Extractor
|
||||||
public async Task RefreshPlayListAsync(List<StreamSpec> streamSpecs)
|
public async Task RefreshPlayListAsync(List<StreamSpec> streamSpecs)
|
||||||
{
|
{
|
||||||
if (streamSpecs.Count == 0) return;
|
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;
|
ParserConfig.Url = url;
|
||||||
SetInitUrl();
|
SetInitUrl();
|
||||||
|
|
||||||
var newStreams = await ExtractStreamsAsync(rawText);
|
var newStreams = await ExtractStreamsAsync(rawText);
|
||||||
foreach (var streamSpec in streamSpecs)
|
foreach (var streamSpec in streamSpecs)
|
||||||
{
|
{
|
||||||
|
|
|
@ -505,9 +505,17 @@ namespace N_m3u8DL_RE.Parser.Extractor
|
||||||
this.M3u8Content = File.ReadAllText(uri.LocalPath);
|
this.M3u8Content = File.ReadAllText(uri.LocalPath);
|
||||||
}
|
}
|
||||||
else if (url.StartsWith("http"))
|
else if (url.StartsWith("http"))
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
(this.M3u8Content, url) = await HTTPUtil.GetWebSourceAndNewUrlAsync(url, ParserConfig.Headers);
|
(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.M3u8Url = url;
|
||||||
this.SetBaseUrl();
|
this.SetBaseUrl();
|
||||||
|
@ -516,10 +524,10 @@ namespace N_m3u8DL_RE.Parser.Extractor
|
||||||
|
|
||||||
public async Task FetchPlayListAsync(List<StreamSpec> lists)
|
public async Task FetchPlayListAsync(List<StreamSpec> lists)
|
||||||
{
|
{
|
||||||
if (MasterM3u8Flag && !FirstRefreshFlag)
|
if (MasterM3u8Flag)
|
||||||
{
|
{
|
||||||
//重新加载master m3u8, 刷新选中流的URL
|
//重新加载master m3u8, 刷新选中流的URL
|
||||||
await LoadM3u8FromUrlAsync(ParserConfig.OriginalUrl);
|
await LoadM3u8FromUrlAsync(ParserConfig.Url);
|
||||||
var newStreams = await ParseMasterListAsync();
|
var newStreams = await ParseMasterListAsync();
|
||||||
newStreams = newStreams.DistinctBy(p => p.Url).ToList();
|
newStreams = newStreams.DistinctBy(p => p.Url).ToList();
|
||||||
foreach (var l in lists)
|
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++)
|
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";
|
lists[i].Extension = lists[i].Playlist!.MediaInit != null ? "m4s" : "ts";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//首次刷新已结束,后续重新加载时应该从master开始重新加载
|
|
||||||
FirstRefreshFlag = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task RefreshPlayListAsync(List<StreamSpec> streamSpecs)
|
public async Task RefreshPlayListAsync(List<StreamSpec> streamSpecs)
|
||||||
|
|
Loading…
Reference in New Issue