首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于主m3u8文件的高带宽Regex匹配解析

基于主m3u8文件的高带宽Regex匹配解析
EN

Stack Overflow用户
提问于 2020-09-29 07:42:02
回答 1查看 376关注 0票数 2

我在匹配m3u8主文件中的最高带宽时遇到了一些小问题

这是master.m3u8的内容

代码语言:javascript
复制
#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

这是我目前的密码。

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-08 08:01:11

更新:(在试图找出解决方案之后。我成功地获得了最高的带宽,这是最后一次)

这是我的解决方案(也许你可以提出比这个更好的建议)

代码语言:javascript
复制
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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64115027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档