我在匹配m3u8主文件中的最高带宽时遇到了一些小问题
这是master.m3u8的内容
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=149000,RESOLUTION=320x180,CODECS="avc1.66.30, mp4a.40.2",CLOSED-CAPTIONS=NONE
https://testurl 1
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=300000,RESOLUTION=320x180,CODECS="avc1.66.30, mp4a.40.2",CLOSED-CAPTIONS=NONE
https://testurl 2
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=500000,RESOLUTION=640x360,CODECS="avc1.66.30, mp4a.40.2",CLOSED-CAPTIONS=NONE
https://testurl 3
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,RESOLUTION=640x360,CODECS="avc1.66.30, mp4a.40.2",CLOSED-CAPTIONS=NONE
https://testurl 4
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1000000,RESOLUTION=1280x720,CODECS="avc1.77.30, mp4a.40.2",CLOSED-CAPTIONS=NONE
https://testurl 5
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1299000,RESOLUTION=1280x720,CODECS="avc1.77.30, mp4a.40.2",CLOSED-CAPTIONS=NONE
https://testurl 6
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1499000,RESOLUTION=1280x720,CODECS="avc1.77.30, mp4a.40.2",CLOSED-CAPTIONS=NONE
https://testurl 7
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=62000,CODECS="mp4a.40.2",CLOSED-CAPTIONS=NONE
https://testurl 8我可以通过决议得到网址。但问题是,一些主m3u8有三个url,分辨率相同,但带宽不同。
我的目标是,如果我选择1280x720,如果有相同分辨率的多个结果,我只想得到像示例内容中带宽最高的url。最高值是1499000
这是我目前的密码。
private static void TEST()
{
var f = File.ReadAllText(@"C:\Users\MARK\Desktop\TEST\master.m3u8");
string result = string.Empty;
result = ParseM3u8Master(f, "1280x720", 2);
if (result == "") {
result = ParseM3u8Master(f, "640x360", 2);
}else if (result == ""){
result = ParseM3u8Master(f, "320x180", 2);
}
Console.WriteLine(result);
}
private const RegexOptions ML = RegexOptions.IgnoreCase | RegexOptions.Multiline;
public static string ParseM3u8Master(string m3u8Master, string resolution, int group)
{
string result = string.Empty;
string pattern = $@"(?:RESOLUTION=({resolution}).*?)\n(https.+|http[-a-zA-Z0-9()@:%_\+.~#?&//=])";
if (Regex.IsMatch(m3u8Master, pattern, ML))
{
result = Regex.Match(m3u8Master, pattern, ML).Groups[group].Value;
}
return result;
}发布于 2020-10-08 08:01:11
更新:(在试图找出解决方案之后。我成功地获得了最高的带宽,这是最后一次)
这是我的解决方案(也许你可以提出比这个更好的建议)
private const RegexOptions ML = RegexOptions.IgnoreCase | RegexOptions.Multiline;
public static string ParseM3u8Master(string m3u8Master, string resolution, int group)
{
string result = string.Empty;
string pattern = $@"(?:RESOLUTION=({resolution}).*?)\n(https.+|http[-a-zA-Z0-9()@:%_\+.~#?&//=])";
if (Regex.IsMatch(m3u8Master, pattern, ML))
{
var lst = new List<string>();
var mc = Regex.Matches(m3u8Master, pattern, ML);
foreach (Match m in mc) {
lst.Add(m.Groups[2].Value);
}
result = lst.Last();
}
return res
}https://stackoverflow.com/questions/64115027
复制相似问题