mirror of
https://github.com/NohamR/N_m3u8DL-RE.git
synced 2025-05-25 06:41:57 +00:00
增强MPD适配性
This commit is contained in:
parent
14d69c805b
commit
76acf6c421
@ -163,6 +163,14 @@ namespace N_m3u8DL_RE.Parser.Extractor
|
|||||||
//第一种形式 SegmentBase
|
//第一种形式 SegmentBase
|
||||||
var segmentBaseElements = representation.Elements().Where(e => e.Name.LocalName == "SegmentBase");
|
var segmentBaseElements = representation.Elements().Where(e => e.Name.LocalName == "SegmentBase");
|
||||||
if (segmentBaseElements.Any())
|
if (segmentBaseElements.Any())
|
||||||
|
{
|
||||||
|
//处理init url
|
||||||
|
var initializationElements = segmentBaseElements.First().Elements().Where(e => e.Name.LocalName == "Initialization");
|
||||||
|
if (initializationElements.Any())
|
||||||
|
{
|
||||||
|
var initialization = initializationElements.First();
|
||||||
|
var sourceURL = initialization.Attribute("sourceURL")?.Value;
|
||||||
|
if (sourceURL == null)
|
||||||
{
|
{
|
||||||
streamSpec.Playlist.MediaParts[0].MediaSegments.Add
|
streamSpec.Playlist.MediaParts[0].MediaSegments.Add
|
||||||
(
|
(
|
||||||
@ -174,14 +182,8 @@ namespace N_m3u8DL_RE.Parser.Extractor
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
//第二种形式 SegmentList.SegmentList
|
|
||||||
var segmentListElements = representation.Elements().Where(e => e.Name.LocalName == "SegmentList");
|
|
||||||
if (segmentListElements.Any())
|
|
||||||
{
|
{
|
||||||
var segmentList = segmentListElements.First();
|
|
||||||
//处理init url
|
|
||||||
var initialization = segmentList.Elements().First(e => e.Name.LocalName == "Initialization");
|
|
||||||
var initUrl = ParserUtil.CombineURL(segBaseUrl, initialization.Attribute("sourceURL")?.Value);
|
var initUrl = ParserUtil.CombineURL(segBaseUrl, initialization.Attribute("sourceURL")?.Value);
|
||||||
var initRange = initialization.Attribute("range")?.Value;
|
var initRange = initialization.Attribute("range")?.Value;
|
||||||
streamSpec.Playlist.MediaInit = new MediaSegment();
|
streamSpec.Playlist.MediaInit = new MediaSegment();
|
||||||
@ -192,6 +194,32 @@ namespace N_m3u8DL_RE.Parser.Extractor
|
|||||||
streamSpec.Playlist.MediaInit.StartRange = start;
|
streamSpec.Playlist.MediaInit.StartRange = start;
|
||||||
streamSpec.Playlist.MediaInit.ExpectLength = expect;
|
streamSpec.Playlist.MediaInit.ExpectLength = expect;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//第二种形式 SegmentList.SegmentList
|
||||||
|
var segmentListElements = representation.Elements().Where(e => e.Name.LocalName == "SegmentList");
|
||||||
|
if (segmentListElements.Any())
|
||||||
|
{
|
||||||
|
var segmentList = segmentListElements.First();
|
||||||
|
var duration = segmentList.Attribute("duration")?.Value;
|
||||||
|
//处理init url
|
||||||
|
var initializationElements = segmentList.Elements().Where(e => e.Name.LocalName == "Initialization");
|
||||||
|
if (initializationElements.Any())
|
||||||
|
{
|
||||||
|
var initialization = initializationElements.First();
|
||||||
|
var initUrl = ParserUtil.CombineURL(segBaseUrl, initialization.Attribute("sourceURL")?.Value);
|
||||||
|
var initRange = initialization.Attribute("range")?.Value;
|
||||||
|
streamSpec.Playlist.MediaInit = new MediaSegment();
|
||||||
|
streamSpec.Playlist.MediaInit.Url = PreProcessUrl(initUrl);
|
||||||
|
if (initRange != null)
|
||||||
|
{
|
||||||
|
var (start, expect) = ParserUtil.ParseRange(initRange);
|
||||||
|
streamSpec.Playlist.MediaInit.StartRange = start;
|
||||||
|
streamSpec.Playlist.MediaInit.ExpectLength = expect;
|
||||||
|
}
|
||||||
|
}
|
||||||
//处理分片
|
//处理分片
|
||||||
var segmentURLs = segmentList.Elements().Where(e => e.Name.LocalName == "SegmentURL");
|
var segmentURLs = segmentList.Elements().Where(e => e.Name.LocalName == "SegmentURL");
|
||||||
for (int segmentIndex = 0; segmentIndex < segmentURLs.Count(); segmentIndex++)
|
for (int segmentIndex = 0; segmentIndex < segmentURLs.Count(); segmentIndex++)
|
||||||
@ -200,10 +228,11 @@ namespace N_m3u8DL_RE.Parser.Extractor
|
|||||||
var mediaUrl = ParserUtil.CombineURL(segBaseUrl, segmentURL.Attribute("media")?.Value);
|
var mediaUrl = ParserUtil.CombineURL(segBaseUrl, segmentURL.Attribute("media")?.Value);
|
||||||
var mediaRange = segmentURL.Attribute("range")?.Value;
|
var mediaRange = segmentURL.Attribute("range")?.Value;
|
||||||
MediaSegment mediaSegment = new();
|
MediaSegment mediaSegment = new();
|
||||||
|
mediaSegment.Duration = Convert.ToDouble(duration);
|
||||||
mediaSegment.Url = PreProcessUrl(mediaUrl);
|
mediaSegment.Url = PreProcessUrl(mediaUrl);
|
||||||
if (mediaRange != null)
|
if (mediaRange != null)
|
||||||
{
|
{
|
||||||
var (start, expect) = ParserUtil.ParseRange(initRange);
|
var (start, expect) = ParserUtil.ParseRange(mediaRange);
|
||||||
mediaSegment.StartRange = start;
|
mediaSegment.StartRange = start;
|
||||||
mediaSegment.ExpectLength = expect;
|
mediaSegment.ExpectLength = expect;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user