将 SDP(字符串)拆分为 m 行以更改视频编解码器

2024-03-19

我希望最后有一个方法可以将 VP9 或 H.264 设置为 SDP 中的首选视频编解码器。

所以我正在我的 SDP 中寻找 m 行:

m=video 9 UDP/TLS/RTP/SAVPF 96 98 100 102 127 97 99 101 125

我的 SDP 的控制台日志:

在这种情况下,我将获取并使用 VP8 (96) 作为视频编解码器,而不是 VP9 (98)。所以我想检查 98/VP9 是否可能/可用,并想将其设置在开始/第一个位置以实际使用它。

到目前为止我得到了什么:

if(sdpOrigin == 'local') {
    let lines = sdp.split('\n').map(l => l.trim());
    lines.forEach(function(line) {
        if (line.indexOf('m=video') === 0) {
            let parts = line.substr(28); // Should be avoided!
            let vp9_order = parts.indexOf("98");
            let array = parts.split(/\s+/);
            console.log("array", array); // 96 98 100 102 127 97 99 101 125
            if (vp9_order > 0) {
                array.splice(vp9_order, 1);
                array.unshift("98");
            }
            console.log("array-new", array); // 98 96 100 102 127 97 99 101 125

            // How do I update my SDP now with the new codec order?

        }
    })
}

在我看来,这种方法很糟糕,因为我得到了想要的 m 行,但我在位置“28”处做了修复子字符串,因此如果之前发生更改,它会中断。

最后,我的 SDP 中应该有以下“m 行”:

m=video 9 UDP/TLS/RTP/SAVPF 98 96 100 102 127 97 99 101 125

有人可以帮我吗?


您应该首先按空格分割该行,然后将其分成适当的字段SDP规范 https://www.rfc-editor.org/rfc/rfc4566:

let fields = line.split(/\s+/);
if (fields[0] === 'm=video') {
    let [ type, port, proto, ...formats] = fields;

    let vp9_order = formats.indexOf("98");
    if (vp9_order > 0) {
        formats.splice(vp9_order, 1);  // remove from existing position
        formats.unshift("98");         // and prepend
    }
    line = [ type, port, proto, ...formats].join(' ');
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 SDP(字符串)拆分为 m 行以更改视频编解码器 的相关文章

随机推荐

  • 如何格式化 Multimarkdown 表格?

    我正在按照以下表格部分下的指南编写 Multimarkdown 表格语法指南 http fletcherpenney net multimarkdown users guide multimarkdown syntax guide 我希望使
  • 将根据数量复制记录的查询

    我正在使用 SQL Server 2008 并寻找一个将根据数量复制记录的查询 表具有 QTY 和 PartNumber 列 需要为每个数量添加一条附加记录 假设零件编号的数量为 3 我需要包含该零件编号的三行 任何帮助将不胜感激 谢谢 测
  • 如何删除注册表中损坏的符号链接

    我正在对注册表进行一些编辑原型 以创建从一个区域到另一个区域的符号链接 我使用了以下代码 HKEY hkFS HKEY hkSOFTWARE DWORD dwDisposition LSTATUS result result RegOpen
  • 比较函数指针

    如何比较 C 中的函数指针 稳定吗 例如 这样的事情是否有效 if pFnc myFnc Do something C 03 5 10 1 expr eq 等于 和 不等于 运算符具有相同的作用 语义限制 转换和结果类型作为关系 运算符 但
  • postgresSQL中NOT IN和NOT EXISTS的区别

    Here s my table 当我使用 NOT IN 执行以下查询时 它给出了 namal 和 Ann SELECT firstname FROM info student info WHERE firstname NOT IN SELE
  • ClickOnce 或 InstallShield 能否安装 SQL Server 或 SQL Server Express?

    可以 ClickOnce 或 InstallShield 设置或配置 SQL Server 或 SQL Server Express 专门添加sa密码 启用命名管道 授予从文件夹读取的权限 添加主数据库 mdf我的客户端应用程序所需的文件
  • Swift SpriteKit SKSpriteNode 的“有时”不出现

    我正在使用 Swift 和 SpriteKit 制作 iOS 但是 我的应用程序运行时遇到不规则现象 有时船舶 SKSpriteNodes 不会出现在屏幕上 有时子弹的 SKSpriteNodes 不会出现 有时一切都显示良好 我将子弹添加
  • AlertDialog 中的资源 ID #0x0

    我添加一个AlertDialog在 kotlin 文件中 但出现异常 btnLogin setOnClickListener view gt login fun login val builder AlertDialog Builder t
  • 如何对整数字符串进行排序?

    我在对具有整数值的字符串列表进行排序时遇到一个奇怪的问题 然而 某些值可以以某些字符作为前缀 e g B1 5 50 A10 7 72 B3 A1 A2 基本上有页码 应该按如下方式排序 A1 A2 A10 B1 B3 5 7 50 72
  • 我们可以让聊天机器人先说问候语,而不仅仅是作为反应吗

    我正在使用 Microsoftt Bot Framework 和 LUIS 认知服务开发聊天机器人 我想要一条初始欢迎消息 例如 你好 用户 你好吗 我的机器人一启动 在 MessageController 中可以做任何事情 public
  • 在 gitlab-ci.yml 上动态设置工件路径/文件夹结构

    我有以下内容gitlab ci yml读取的文件package json使用jq https stedolan github io jq 处理器动态设置工件文件夹的变量名称 类似于 image node latest stages buil
  • Angular 2 - FormGroup ValueChanges 取消订阅

    我有一个带有 ValueChanges 事件的 FormGroup 当用户从组件的路由移动到另一个组件然后返回到该组件时 该事件不会从内存中释放 这意味着 如果用户离开组件然后返回组件 5 次 则 onFormChange 方法会触发 5
  • 在 IE 和 Chrome 中动态加载 jQuery

    我正在创建一个使用 jQuery 的外部小部件 而不是让用户单独包含它 我想检查它是否已加载 如果没有加载 则动态加载它 问题是我需要等到它加载后才能执行脚本的其余部分 这需要 IE 和 FF Chrome 处理不同的事件处理程序 如果我这
  • 帮助处理 Android 库项目中的自定义视图属性

    我在 Android 库项目中有一个自定义 PieTimer 视图 package com mysite android library pietimer public class PieTimerView extends View 我还有
  • Intel 指令文档中未使用 XMM 寄存器 0

    在 Intel x64 手册中 它说 32 位 SSE2 模式下有 XMM 寄存器 0 7 那么为什么 95 使用这些寄存器的指令会跳过 0 并使用 1 4 例如Intel的vol 2手册entry https www felixclout
  • 如何使用CSS为html字符添加边框颜色?

    我目前的任务是在显示某些数据时在不同颜色的 pandas DataFrame 表内创建检查 我找到了以下内容 p I will display span style color green 10004 span p p I will dis
  • 使用数组 eltype 实现采样器

    钩入rand过去更容易 我想我遵循了描述在文档中 https docs julialang org en v1 stdlib Random A simple sampler without pre computed data 1 但它似乎不
  • 禁止在 robots.txt 中使用动态 URL

    我们的网址是 http example com kitchen knife collection maitre universal cutting boards rana parsley chopper cheese slicer vege
  • 导出 Vim 折叠?

    如何从文件中导出 vim 折叠 以便将其传输到另一台机器 例如 假设我在文件中创建折叠并将其保存在本地计算机上 折叠 元数据去了哪里 我可以将其复制到另一台机器上 还是必须再次手动重新创建折叠 编辑 嗯 我注意到这可能是一个重复的问题 但仍
  • 将 SDP(字符串)拆分为 m 行以更改视频编解码器

    我希望最后有一个方法可以将 VP9 或 H 264 设置为 SDP 中的首选视频编解码器 所以我正在我的 SDP 中寻找 m 行 m video 9 UDP TLS RTP SAVPF 96 98 100 102 127 97 99 101