使用正则表达式解析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文件 的相关文章

  • StrictMode 策略违规:我的应用程序中存在 android.os.strictmode.LeakedClosableViolation?

    Android 开发新手 第一次在我的应用程序上尝试 StrictMode 我注意到以下内容 并想知道这是否是我的应用程序或库中的问题 我不太清楚 谢谢你 D StrictMode StrictMode policy violation a
  • 卸载后 Web 应用程序不显示“添加到主屏幕”

    这是我第一次创建网络应用程序 我设法解决了这个问题 所以我得到了实际的 chrome 提示 将其添加到主屏幕 然后我从手机上卸载了该网络应用程序 因为我想将其展示给我的同事 但是 屏幕上不再出现提示 问题 这是有意为之的行为还是我的应用程序
  • Android 后退按钮无法与 Flutter 选项卡内的导航器配合使用

    我需要在每个选项卡内有一个导航器 因此当我推送新的小部件时 选项卡栏会保留在屏幕上 代码运行得很好 但是 android 后退按钮正在关闭应用程序而不是运行 Navigator pop import package flutter mate
  • 无法获取log.d或输出Robolectrict + gradle

    有没有人能够将 System out 或 Log d 跟踪从 robolectric 测试输出到 gradle 控制台 我在用Robolectric Gradle 测试插件 https github com robolectric robo
  • 如何以编程方式检查 AndroidManifest.xml 中是否声明了服务?

    我正在编写一个库 该库提供了一项服务 其他开发人员可以通过将其包含在他们的项目中来使用该服务 因此 我无法控制 AndroidManifest xml 我在文档中解释了要做什么 但一个常见的问题是人们忽略了将适当的 标记添加到其清单中 或者
  • android xamarin 中的 reCaptcha

    我想在 Xamarin android 应用程序中实现验证码 我抓住了这个在 Android 中集成 googles reCaptcha 验证 https www c sharpcorner com article how to integ
  • 是否必须删除 Intent extra?

    这可能是一个愚蠢的问题 但是是否有一条规则规定消费活动必须显式删除 Intent 额外内容 或者只有在回收 Intent 对象时才如此 换句话说 如果我总是通过执行以下操作来链接到下一个活动 Intent i new Intent MyCu
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • 如何使用 Cordova 获取当前安装的应用程序的版本?

    我已经找到了应用程序可用性插件 https github com ohh2ahh AppAvailability它主要检查用户是否在其设备上安装了某个应用程序 是否有可能获得应用程序的当前版本 开发者名称 重要 以及所有可能的信息 一般来说
  • 如何使用 IF 检查 TextView 可见性

    我有一个 onCheckedChangeListener 来根据选择的单选按钮显示文本视图 我有 1 个疑问和 1 个难题 想知道是否有人可以帮助我 问题 您能否将单选组默认检查值设置为 否 单选按钮 以便一开始就不会检查任何内容 问题 如
  • Ubuntu 16.04 - Genymotion:找不到 /dev/hw_random

    I install Genymotion on the Ubuntu 16 04 64Bit I created a virtual emulator for Android 6 0 then I run this emulator but
  • Google 云端硬盘身份验证异常 - 需要许可吗? (v2)

    我一直在尝试将 Google Drive v2 添加到我的 Android 应用程序中 但无法获得授权 我收到 UserRecoverableAuthIOException 并显示消息 NeedPermission 我感觉 Google A
  • 如何默认在 ActionOpenDocument 意图中显示“内部存储”选项

    我需要用户选择一个自定义文件类型的文件 并将其从 Windows 文件资源管理器拖到 Android 设备上 但默认情况下内部存储选项不可用 当我使用以下命令启动意图时 var libraryIntent new Intent Intent
  • 正则表达式 - 从 markdown 字符串中提取所有标题

    我在用灰质 https www npmjs com package gray matter 以便将文件系统中的 MD 文件解析为字符串 解析器产生的结果是这样的字符串 n Clean er ReactJS Code Conditional
  • 如何根据 gradle 风格设置变量

    我想传递一个变量test我为每种风格设置了不同的值作为 NDK 的定义 但出于某种原因 他总是忽略了最后味道的价值 这是 build gradle apply plugin com android library def test andr
  • 在activity_main.xml中注释

    我是安卓新手 据我所知 XML 中的注释与 HTML 中的注释相同 使用 形式 我想在 Android 项目的 Activity main xml 配置文件中写一些注释 但它给了我错误 值得注意的是 我使用的是 Eclipse 但目前 我直
  • 如何确定对手机号码的呼叫是本地呼叫还是 STD 或 ISD

    我正在为 Android 开发某种应用程序 但不知道如何获取被叫号码是本地或 STD 的号码的数据 即手机号码检查器等应用程序从哪里获取数据 注意 我说的是手机号码 而不是固定电话 固定电话号码 你得到的数字是字符串类型 因此 您可以获取号
  • 实现滚动选择 ListView 中的项目

    我想使用 ListView 您可以在其中滚动列表来选择一个项目 它应该像一个 Seekbar 但拇指应该是固定的 并且您必须使用该栏来调整它 我面临的一个问题是 我不知道这种小部件是如何调用的 这使得我很难搜索 所以我制作了下面这张图片 以
  • Javascript Replace() 和 $1 问题

    我正在尝试创建一个脚本来搜索文本中的模式并在它找到的字符串周围包裹一个标签 shop attributes td each function this html function i html return html replace E 0
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 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