使用正则表达式解析HLS m3u8文件

2024-04-27

我想解析 HLS master m3u8 文件并从中获取带宽、分辨率和文件名。目前我正在使用字符串解析来搜索字符串中的某些模式并执行子字符串来获取值。

示例文件:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=476416,RESOLUTION=416x234
Stream1/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=763319,RESOLUTION=480x270
Stream2/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1050224,RESOLUTION=640x360
Stream3/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1910937,RESOLUTION=640x360
Stream4/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=3775816,RESOLUTION=1280x720
Stream5/index.m3u8

但我发现我们可以使用正则表达式来解析它,就像这个问题中提到的那样:Android 中匹配正则表达式模式的问题 https://stackoverflow.com/questions/3146334/problem-matching-regex-pattern-in-android

我对正则表达式没有任何想法,所以请有人指导我使用正则表达式解析它。

或者有人可以帮助我编写正则表达式来解析下面字符串中的带宽和分辨率值

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=476416,RESOLUTION=416x234

你可以尝试这样的事情:

    final Pattern pattern = Pattern.compile("^#EXT-X-STREAM-INF:.*BANDWIDTH=(\\d+).*RESOLUTION=([\\dx]+).*");

    Matcher matcher = pattern.matcher("#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=476416,RESOLUTION=416x234");
    String bandwidth = "";
    String resolution = "";

    if (matcher.find()) {
        bandwidth = matcher.group(1);
        resolution = matcher.group(2);
    }

将带宽和分辨率设置为正确的(字符串)值。

我还没有在 Android 设备或模拟器上尝试过这个,但从您发送的链接和 Android API 来看,它应该与上面的普通旧 java.util.concurrent.java 一样工作。

正则表达式匹配以以下开头的字符串#EXT-X-STREAM-INF:并包含BANDWIDTH and RESOLUTION接下来是正确的值格式。然后将它们在反向引用组 1 和 2 中反向引用,以便我们可以提取它们。

Edit:

如果 RESOLUTION 并不总是存在,那么您可以将该部分设为可选,如下所示:

"^#EXT-X-STREAM-INF:.*BANDWIDTH=(\\d+).*(?:RESOLUTION=([\\dx]+))?.*"

The resolution字符串将是null在只有BANDWIDTH存在。

Edit2:

?使事情成为可选的,并且(?:___)表示被动组(与反向引用组相对)(___)。所以它基本上是一个可选的被动组。所以是的,里面的任何东西都是可选的。

A .匹配单个字符,并且*make 表示它将重复零次或多次。所以.*将匹配零个或多个字符。我们需要这个的原因是消耗我们匹配的任何东西,例如之间的任何东西#EXT-X-STREAM-INF: and BANDWIDTH。有很多方法可以做到这一点,但是.*是最通用/最广泛的一种。

\d基本上是一组代表数字的字符(0-9),但是由于我们将字符串定义为 Java 字符串,因此我们需要 double\\,否则Java编译器会因为无法识别转义字符而失败\d(爪哇语)。相反,它会解析\\ into \这样我们就得到\d在传递给的最终字符串中Pattern构造函数。

[\dx]+表示一个或多个字符(+) 字符之外0-9 and x. [\dx\d]将是单个字符(没有+)来自同一组字符。

如果您对正则表达式感兴趣,可以查看正则表达式.info http://www.regular-expressions.info/tutorial.html or/and regexone.com http://regexone.com/,在那里您将找到所有问题的更深入的答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用正则表达式解析HLS m3u8文件 的相关文章

  • R 中的匹配和计数字符串(DNA 的 k 聚体)

    我有一个字符串列表 DNA 序列 包括 A T C G 我想找到所有匹配项并插入到表中 该表的列都是这些 DNA 字母表的所有可能组合 4 k k 是每个匹配项的长度 K mer 必须由用户指定 行代表 DNA 字母表的数量在列表中按顺序匹
  • 在android中的操作栏中标题左侧添加图标

    我想在操作栏中标题的左侧添加一个可点击的图标 按钮 怎么做 以下是我向操作栏添加搜索和设置图标的代码 它们出现在右侧 但我想在标题左侧添加一个新图标 怎么做 XML menu menu
  • HttpURLConnection getResponseCode 未返回

    我尝试在 Android 上使用 HttpURLConnection 将文件发布到我们的服务器 但 getResponseCode 调用只是挂起并且永远不会返回 该问题源于文件对于服务器来说太大 因此服务器发回 HTTP 错误代码 413
  • 在操作栏中编辑文本

    我正在使用 Action Bar Sherlock 为我的应用程序创建 UI 在将依赖项添加到我的项目等后 我创建了一个活动来测试它 public class PPS extends SherlockActivity Override pu
  • SeekBar setProgress 丢弃次要进度

    我的小学和中学的进步是同时增长的 中学的进步比小学的进步快 每次我更新主要进度时 次要进度都会丢失 就像它为零或小于主要进度一样 这会产生令人讨厌的闪烁 我发现的唯一解决方法是在设置主数据库后将辅助数据库设置为自身 我添加了 1 因为 Se
  • 从 Kotlin 中的字符串中删除字符

    我正在尝试创建一个使用 Kotlin 中的字符串的 Android 计算器 如果逗号 或负数 已经包含一个 我不知道如何删除它 这是我的代码 它正确添加逗号 但如果用户再次单击则不会删除它 if buClickValue contains
  • Android 中的 ImageView 拖动限制

    我在布局中有一个 ImageView 并在 ImageView 上设置 OnTouchListener 来拖动 ImageView 它工作得很好 我的问题是如何防止将 ImageView 移动到布局范围之外 这是我的代码 活动类别 publ
  • 如何在Dialog中使用数据绑定?

    我在对话框中实现数据绑定时遇到问题 是否可以 下面是我的 xml
  • ListView.hasWindowFocus==true 但子视图 hasWindowFocus==false

    有时我注意到 对于 View v v hasWindowFocus false View v getParent hasWindowFocus true 如果我正确理解文档 情况就不应该如此 v getParent 是 ListView 的
  • 将文本视图添加到布局中?

    如果我的按钮不移动 我就无法在按钮上方放置文本视图 我该如何解决这个问题 被困在这个问题上 4 个小时了 这很伤心 因为我正在尝试在我的布局上添加一个文本视图 我的布局中心有 4 个按钮 我只想在四个按钮上方添加一个文本视图 如下所示 Te
  • Android:实现使用内置电话堆栈的自定义 ConnectionService

    我正在尝试在我的自定义电话应用程序中实现自定义 ConnectionService 根据文档 http developer android com reference android telecom ConnectionService ht
  • 带操作栏的 requestFeature

    所以我正在查看 google 的操作栏 api 演示 他们有这个 The Action Bar is a window feature The feature must be requested before setting a conte
  • MediaPlayer.getDuration() 返回错误的持续时间

    媒体播放器的getDuration 方法为我提供了某些音频文件的错误值 我认为所有这些文件的共同特征是它们是使用 Audacity 或其他一些音频编辑工具进行操作的 当尝试将 MediaPlayer 进度绑定到进度栏时 这是一个问题 我继续
  • 如何管理循环器和线程(线程不再消亡!)

    我创建了一个扩展 Thread 的类 以通过非 ui 线程中的 LocationManager 检索用户位置 我将其实现为一个线程 因为它必须根据请求启动并仅在有限的时间内完成其工作 顺便说一句 我必须在线程中添加一个 Looper 对象
  • 为什么 Kotlin 数据类对象有反引号?

    这是我使用 Kotlin 数据类创建器插件创建的数据类 data class ResponseHealthInisghts val data List
  • nginx 匹配位置中的特定单词

    我在匹配 nginx request body 变量中的特定单词时遇到问题 如果正文请求中有特殊单词 我想代理传递 所以我的方法是这样的 location php if request body proxy pass http test p
  • Android Studio同时为同一个项目构建两个应用程序

    我正在使用 Android Studio v0 5 9 制作一个应用程序 它有一个图书馆项目作为依赖 但是 每次我运行该项目时 都会将两个具有相同名称和图标的 APK 部署到我的设备上 第一个 apk app 包含我的主模块 而第二个是库项
  • smoothScrollToPosition() 在 Android ICS 中只能滚动到一半?

    在 Gingerbread 中 我使用 smoothScrollToPosition 一次滚动数十个项目没有任何问题 在我的 Nexus S 升级到 Ice Cream Sandwich 后 我注意到无论我在 smoothScrollToP
  • Gradle 找不到 Android Compose 编译器

    我对这个问题感到非常困惑 我的 gradle 文件中有以下几行 implementation androidx compose runtime runtime 1 0 0 alpha04 implementation androidx co
  • ContactsContract.CommonDataKinds.Phone.CONTENT_URI 与 ContactsContract.Contacts.CONTENT_URI

    In 如何在android中检索联系人列表 https stackoverflow com questions 16124034 how to retrieve the list of contacts in android我看到代码允许您

随机推荐

  • ZipInputStream.getNextEntry() 如何工作?

    假设我们有这样的代码 File file new File zip1 zip ZipInputStream zis new ZipInputStream new FileInputStream file 假设您有一个包含以下内容的 zip
  • 如何检查 Google 地图是否已完全加载?

    我正在将 Google 地图嵌入到我的网站中 加载 Google 地图后 我需要启动一些 JavaScript 进程 有没有办法自动检测 Google 地图何时完全加载 包括图块下载等 A tilesloaded 存在应该完全完成此任务的方
  • 使用 CURL post 方法的 Google 翻译 API

    有人有过使用 Google 翻译 API v2 在 POST 方法上使用 PHP CURL 翻译 HTML 的经验吗 我已经尝试了 github 上的几个代码和库 但没有一个适合我 我发现的是 GET 方法 由于通过 GET 或查询字符串解
  • 在测试中检查 CLI 的退出代码

    我正在为命令行工具编写自动化测试 本质上 我想使用各种选项调用 CLI 并测试退出代码和 或输出 我的测试如下所示 from mymodule cli tool import main def test args capfd with py
  • Heroku 缺少必需的标志:-a,

    我目前正在做一个项目 但我在使用 Heroku 时遇到了问题 这是当我尝试使用 heroku 命令时总是出现的错误 问题中的错误 https i stack imgur com bEQ0m png 请问有同样错误的朋友 可能是什么原因造成的
  • Golang xml.Unmarshal 接口类型

    使用xml我在解组非同质类型列表时遇到问题 考虑以下 XML 文档 其嵌套元素是非同质类型的列表
  • py2exe + sqlalchemy + sqlite 问题

    在进入全速开发模式之前 我正在尝试让一些基本的东西在 Python 中工作 具体如下 Python 2 5 4 PyQt4 4 4 3 SqlAlchemy 0 5 2 py2exe 0 6 9 setuptools 0 6c9 pysql
  • String 对象上的“tap”方法未返回预期结果

    在对 String 类型的对象使用 tap 方法时 我遇到了一个有趣的问题 abc tap o o xyz this line returns abc instead of xyz tap 方法适用于其他类型的对象 tap o o lt l
  • 将自定义路由添加到 Rails 应用程序

    我已经读过导轨指南 http guides rubyonrails org routing html 我想要设置的是路由到 配置文件 控制器的以下路由 GET profiles charities 应显示所有慈善机构 GET profile
  • 在 SQL 中查找日期范围重叠的记录

    我有以下表格和数据 CREATE TABLE customer wer id customer NUMBER name VARCHAR2 10 surname VARCHAR2 20 date from DATE date to DATE
  • 验证 PDF 文档中的数字签名

    我正在尝试验证 PDF 数字签名 我知道 当 PDF 被签名时 会定义一个字节范围 嵌入证书 并且根据我的阅读 签名的消息摘要和时间戳也存储在 PDF 中 我已经可以提取证书并验证它们 现在我正在尝试验证 pdf 的完整性 但我的问题是我不
  • 从该共享库中查找加载的共享库的位置?

    从共享库中的函数 在正在运行的进程 用 C 编写 内 我如何发现该共享库是从哪里加载的 我找到的所有答案都涉及使用诸如ldd在命令行中 或者通过查看 proc self maps 在 Win32 上 我只需使用GetModuleFileNa
  • useSelector 解构与多次调用

    最近我在阅读react redux 文档https react redux js org next api hooks https react redux js org next api hooks还有一个与平等比较和更新相关的部分 其中写
  • 设置 C# 可选参数的默认值

    每当我尝试将可选参数的默认值设置为资源文件中的某些内容时 我都会收到以下编译时错误 message 的默认参数值必须是编译时常量 有什么方法可以改变资源文件的工作方式来实现这一点吗 public void ValidationError s
  • 用于更改可为空和非空数据类型的数据注释是什么?

    我认为这对于有经验的程序员来说应该很简单 但事实就是如此 我正在开发一个首先使用实体 框架代码的项目 我还启用了迁移并设置为自动 可爱的功能 我愚蠢地在我的实体类中声明了一种错误的数据类型 现在我意识到它不适用于我想要做的事情 一定是自动完
  • 导出“函数”类对象的 S3 方法

    函数对象似乎与 S3 方法的调度配合得很好 但由于某种原因 它们无法导出到 NAMESPACE 文件中 下面的代码适用于调度到 function method as abc function x UseMethod as abc as ab
  • 错误:“会员中心没有注册任何设备”- UDID 无效?

    我收到错误 找不到匹配的配置文件 针对您的 UDID 所选团队没有 iOS 开发者计划成员资格 是的 它有 它处于活动状态 和 无法创建配置文件 因为您的团队没有在会员中心注册设备 请连接设备并启用开发 然后将其添加到会员中心 我已经在会员
  • 正确设置 DataGridCell 样式

    这是我之前的问题之后的一个问题 你可以在那里找到它 https stackoverflow com questions 7092145 styling a textblock autogenerated in a contentpresen
  • 如何在ubuntu服务器上安装android SDK

    我在 ubuntu 服务器中有一个 React Native 项目 我想构建一个用于生产的 Android 应用程序 为此 我首先必须生成 Gradle Wrapper 文件 因此我在中运行此命令android目录 gradle wrapp
  • 使用正则表达式解析HLS m3u8文件

    我想解析 HLS master m3u8 文件并从中获取带宽 分辨率和文件名 目前我正在使用字符串解析来搜索字符串中的某些模式并执行子字符串来获取值 示例文件 EXTM3U EXT X STREAM INF PROGRAM ID 1 BAN