【问题标题】:How change SDP(string) file content?如何更改 SDP(string) 文件内容?
【发布时间】:2020-07-04 22:57:26
【问题描述】:

如果我有 SDP 文件并想更改它的内容:

    v=0
    o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
    s=SDP Seminar
    i=A Seminar on the session description protocol
    u=http://www.example.com/seminars/sdp.pdf
    e=j.doe@example.com (Jane Doe)
    c=IN IP4 224.2.17.12/127
    t=2873397496 2873404696
    a=recvonly
    m=audio 49170 RTP/AVP 0
    m=video 51372 RTP/AVP 99
    a=rtpmap:99 h263-1998/90000

如何更改每行中的内容,例如我可以更改该行中的 49170('m' 的内容)。

【问题讨论】:

  • 请更具体一点:您使用的是什么编程语言以及什么平台(我猜您正在尝试在 node.js 中使用 JS,但我不能确定)。你能举一个转换后的文件的例子吗?
  • 是的,我在 VS 中使用了 javascript 和 node.js,我在程序下面标​​记了

标签: javascript sdp


【解决方案1】:
 function change_Ip_Port(new_sdp_file){
    let lines = new_sdp_file.split('\n').map(l => l.trim());
    lines.forEach(function(line) {
        if (line.indexOf('m=video') === 0) {
          console.log(line);
        }
        else if (line.indexOf('m=audio') === 0) {
          console.log(line);
        }
        if(line.indexOf('c=IN')===0) {
          console.log(line);
        }
    });
  }

【讨论】:

  • 问题是这样的,我需要更改每一行,我可以提取更改端口,就像我在问题下面添加的那样......我仍然错过了那部分!
  • 如果我是你,我会在原始问题的答案中移动代码,然后我会删除这个答案。
  • 我可以建议您使用正则表达式来查找和替换有趣的值吗?我相信您可以轻松找到正则表达式教程,例如w3schools.com/js/js_regexp.asp
  • 我尝试使用“replaceAt”但没有给我答案@Dan
  • 请帮我解决我的问题 :( @Dan 我添加了我实现的新代码
【解决方案2】:
    let lines = new_sdp_file.split('\n').map(l => l.trim());
    lines.forEach(function(line) {
      if (line.indexOf('m=video') === 0) {
        setDefaultCodec(line, ServicesPort);
        }
      else if (line.indexOf('m=audio') === 0) {
          console.log(line);
        }
        if(line.indexOf('c=IN')===0) {
        }
    });
  }
  function setDefaultCodec(mLine, payloud) {
    var elements = mLine.split(' ');
    for (var i = 1; i < elements.length; i++) {
      if (elements[1] !== payloud) {
      //In here I should add replace inestead of 49170 for example R = 1180
        console.log(mLine);
      }
    }
    return elements.join(' ');
  }

【讨论】:

    【解决方案3】:

    这是一个代码序列,可帮助您解析以“m=audio”开头的行,然后生成新行。您必须自己将其集成到您的代码中,然后将更新的行写回文件中。 您必须自己编写代码来处理其他行。

    var regex = new RegExp( "^m=audio(\\s+)(\\d+)(\\s+)([A-Z]+/[A-Z]+)(\\s+)(\\d+)$" );
    var line = "m=audio 49170 RTP/AVP 0";
    var match = regex.exec( line );
    // You should replace the field0, field1 and field2 names with
    // actual names for the fields in the file.
    var field0 = match[ 2 ];
    var field1 = match[ 4 ];
    var field2 = match[ 6 ];
    var field0NewValue = 40000;
    var newLine = "m=audio " + field0NewValue + " " + field1 + " " + field2;
    

    【讨论】:

      【解决方案4】:

      我已采纳您的答案,并添加到其中。这是一个有用的问题,这是我的看法:

      function setBandwidth(sdp) {
          let lines = sdp.split('\r\n').map(l => l.trim());
          let returnSdp = '';
          let audioBandwidth = '64';
          let videoBandwidth = '1280';
          lines.forEach(function(line, index) {
              if (line.indexOf('m=audio') === 0) {
                  lines[index] = line + '\r\nb=AS:' + audioBandwidth;
              }
              if (line.indexOf('m=video') === 0) {
                  lines[index] = line + '\r\nb=AS:' + videoBandwidth;
              }
              returnSdp = returnSdp + lines[index];
              if (index < lines.length - 1) {
                  returnSdp = returnSdp + '\r\n';
              }
          });
          return returnSdp;
      }
      

      对我来说,找到该行,然后将其添加到下一行是最简单的,因为首先不存在 b:as 行,而这些是我要添加的行。

      另外,请注意在 sip 行的末尾不应该有额外的换行符,因此我编写了代码以防止这种情况发生。

      【讨论】:

        猜你喜欢
        • 2018-02-05
        • 2012-09-22
        • 1970-01-01
        • 2016-04-27
        • 2013-05-05
        • 1970-01-01
        • 2022-11-28
        • 1970-01-01
        • 2020-12-25
        相关资源
        最近更新 更多