优化playlist加载逻辑

This commit is contained in:
nilaoda 2022-09-17 10:44:27 +08:00
parent c681a2997f
commit 46aff16455
3 changed files with 9 additions and 8 deletions

View File

@ -9,7 +9,7 @@ using N_m3u8DL_RE.Common.Enum;
namespace N_m3u8DL_RE.Parser.Extractor namespace N_m3u8DL_RE.Parser.Extractor
{ {
internal interface IExtractor public interface IExtractor
{ {
ExtractorType ExtractorType { get; } ExtractorType ExtractorType { get; }

View File

@ -10,7 +10,7 @@ namespace N_m3u8DL_RE.Parser
{ {
public class StreamExtractor public class StreamExtractor
{ {
private IExtractor extractor; public IExtractor Extractor { get; private set; }
private ParserConfig parserConfig = new ParserConfig(); private ParserConfig parserConfig = new ParserConfig();
private string rawText; private string rawText;
private static SemaphoreSlim semaphore = new SemaphoreSlim(1, 1); private static SemaphoreSlim semaphore = new SemaphoreSlim(1, 1);
@ -56,13 +56,13 @@ namespace N_m3u8DL_RE.Parser
if (rawText.StartsWith(HLSTags.ext_m3u)) if (rawText.StartsWith(HLSTags.ext_m3u))
{ {
Logger.InfoMarkUp(ResString.matchHLS); Logger.InfoMarkUp(ResString.matchHLS);
extractor = new HLSExtractor(parserConfig); Extractor = new HLSExtractor(parserConfig);
} }
else if (rawText.Contains("</MPD>") && rawText.Contains("<MPD")) else if (rawText.Contains("</MPD>") && rawText.Contains("<MPD"))
{ {
Logger.InfoMarkUp(ResString.matchDASH); Logger.InfoMarkUp(ResString.matchDASH);
//extractor = new DASHExtractor(parserConfig); //extractor = new DASHExtractor(parserConfig);
extractor = new DASHExtractor2(parserConfig); Extractor = new DASHExtractor2(parserConfig);
} }
else else
{ {
@ -80,7 +80,7 @@ namespace N_m3u8DL_RE.Parser
{ {
await semaphore.WaitAsync(); await semaphore.WaitAsync();
Logger.Info(ResString.parsingStream); Logger.Info(ResString.parsingStream);
return await extractor.ExtractStreamsAsync(rawText); return await Extractor.ExtractStreamsAsync(rawText);
} }
finally finally
{ {
@ -98,7 +98,7 @@ namespace N_m3u8DL_RE.Parser
{ {
await semaphore.WaitAsync(); await semaphore.WaitAsync();
Logger.Info(ResString.parsingStream); Logger.Info(ResString.parsingStream);
await extractor.FetchPlayListAsync(streamSpecs); await Extractor.FetchPlayListAsync(streamSpecs);
} }
finally finally
{ {

View File

@ -246,8 +246,9 @@ namespace N_m3u8DL_RE
if (!selectedStreams.Any()) if (!selectedStreams.Any())
throw new Exception(ResString.noStreamsToDownload); throw new Exception(ResString.noStreamsToDownload);
//选中流中若有没加载出playlist的加载playlist //HLS: 选中流中若有没加载出playlist的加载playlist
if (selectedStreams.Any(s => s.Playlist == null)) //DASH: 加载playlist (调用url预处理器)
if (selectedStreams.Any(s => s.Playlist == null) || extractor.Extractor.ExtractorType == ExtractorType.MPEG_DASH)
await extractor.FetchPlayListAsync(selectedStreams); await extractor.FetchPlayListAsync(selectedStreams);
//无法识别的加密方式,自动开启二进制合并 //无法识别的加密方式,自动开启二进制合并