如何解决主m3u8文件中具有高带宽的正则表达式匹配分辨率
我在匹配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,CLOSED-CAPTIONS=NONE
https://testurl 2
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=500000,RESOLUTION=640x360,CLOSED-CAPTIONS=NONE
https://testurl 3
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,CLOSED-CAPTIONS=NONE
https://testurl 4
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1000000,RESOLUTION=1280x720,CODECS="avc1.77.30,CLOSED-CAPTIONS=NONE
https://testurl 5
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1299000,CLOSED-CAPTIONS=NONE
https://testurl 6
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1499000,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,ML).Groups[group].Value;
}
return 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))
{
var lst = new List<string>();
var mc = Regex.Matches(m3u8Master,ML);
foreach (Match m in mc) {
lst.Add(m.Groups[2].Value);
}
result = lst.Last();
}
return res
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。