Przeglądaj źródła

使用正则动态修改sdp以支持不同音频格式编码

kindring 2 lat temu
rodzic
commit
e28a9420b7
1 zmienionych plików z 41 dodań i 23 usunięć
  1. 41 23
      web_src/src/assets/ZLMRTCClient.js

+ 41 - 23
web_src/src/assets/ZLMRTCClient.js

@@ -15,24 +15,32 @@ let ZLMRTCClient = (function (exports) {
 	  CAPTURE_STREAM_FAILED: 'CAPTURE_STREAM_FAILED'
 	};
 
+  /// ^rtpmap:\d+ PCMU\/8000(\r\n|\n)?$/g
+  // 替换replaceStr
   const audioEncoding = {
-    0:{
+    0: {
       name: "PCMU",
-      replaceStr:"a=rtpmap:0 PCMU/8000\n"
+      replaceStr: /a=rtpmap:0 PCMU\/8000(\r\n|\r|\n)/
     },
-    8:{
+    8: {
       name: "PCMA",
-      replaceStr:"a=rtpmap:8 PCMA/8000\n"
+      replaceStr: /a=rtpmap:8 PCMA\/8000(\r\n|\r|\n)/
     },
-    9:{
+    9: {
       name: "G722",
-      replaceStr:"a=rtpmap:9 G722/8000\n"
+      replaceStr: /a=rtpmap:9 G722\/8000(\r\n|\r|\n)/
     },
-    13:{
+    13: {
       name: "CN",
-      replaceStr:"a=rtpmap:13 CN/8000\n"
+      replaceStr: /a=rtpmap:13 CN\/8000(\r\n|\r|\n)/
     }
-  }
+  };
+
+  // const audioEncoding = {
+  //   0:{ name: "PCMU", replaceStr:/a=rtpmap:0 PCMU/8000/ },
+  //   8:{ name: "PCMA", replaceStr:/a=rtpmap:8 PCMA/8000/ },
+  //   9:{ name: "G722", replaceStr:/a=rtpmap:9 G722/8000/ },
+  //   13:{ name: "CN", replaceStr:/a=rtpmap:13 CN/8000/ } }
 	const VERSION$1 = '1.0.1';
 	const BUILD_DATE = 'Mon Jul 04 2022 19:50:55 GMT+0800 (China Standard Time)';
 
@@ -7937,12 +7945,11 @@ let ZLMRTCClient = (function (exports) {
 	    }
 
 	    this.pc.createOffer().then(desc => {
-	      log(this.TAG, 'offer:', desc.sdp);
-        log(this.TAG, desc);
-        let sdp = this.reWriteAudioCodingSdp(desc.sdp);
+	      // log(this.TAG, 'offer:');
+        let sdp = this.reWriteAudioCodingSdp(desc.sdp.toString());
 
         // sdp = sdp.replace("a=rtpmap:9 G722/8000","");
-        log(this.Tag,"testSdp:",sdp)
+        log(this.Tag,"offer sdp:\n",sdp)
 	      this.pc.setLocalDescription(desc).then(() => {
 	        axios({
 	          method: 'post',
@@ -8056,9 +8063,10 @@ let ZLMRTCClient = (function (exports) {
 
 
 	      this.pc.createOffer().then(desc => {
-	        log(this.TAG, 'offer:', desc.sdp);
-          let sdp = this.reWriteAudioCodingSdp(desc.sdp);
-          log(this.TAG, 'new offer                            :', sdp);
+	        // log(this.TAG, 'offer:', desc.sdp);
+          // console.log(desc.sdp.replace("a=rtpmap:0 PCMU/8000\n",""));
+          let sdp = this.reWriteAudioCodingSdp(desc.sdp.toString());
+          log(this.TAG, 'offer sdp                           :', sdp);
 
           this.pc.setLocalDescription(desc).then(() => {
 	          axios({
@@ -8206,20 +8214,30 @@ let ZLMRTCClient = (function (exports) {
       let _sdp = sdp;
       let audioEncodingKeys = Object.keys(audioEncoding);
       console.log(audioEncoding);
-      console.log(audioEncodingKeys);
+      // console.log(audioEncodingKeys);
+      let ptReg = /m=audio\s9\sUDP\/TLS\/RTP\/SAVPF(\s\d+)+/
 
+      _sdp=_sdp.replace(ptReg,`m=audio 9 UDP/TLS/RTP/SAVPF 111 63 9 ${this.options.enableCodings.join(' ')}`)
+      // _sdp=_sdp.replace(ptReg,`m=audio 9 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126`)
+      // _sdp=_sdp.replace("a=group:BUNDLE 0","a=group:BUNDLE 8")
       for(let key of audioEncodingKeys){
         if(this.options.enableCodings.includes(key)){
-          console.log("已经启用的音频编码");
+          console.log(`已经启用的音频编码 ${audioEncoding[key].name}`);
           // continue;
         }else{
-          console.log(key);
-          console.log(audioEncoding[key]);
-          console.log(audioEncoding[key].replaceStr);
-          _sdp = _sdp.replace(audioEncoding[key].replaceStr,"");
+          // console.log(key);
+          // console.log(audioEncoding[key]);
+          // console.log(audioEncoding[key].replaceStr);
+          // console.log(_sdp)
+          // console.log(_sdp.replace(new RegExp(audioEncoding[key].replaceStr,"g"),""))
+          // console.log(_sdp.replace("a=rtpmap:0 PCMU/8000\n",""));
+          //
+          // console.log(Function.prototype.toString.call(_sdp.replace))
+          _sdp = _sdp.replace(new RegExp(audioEncoding[key].replaceStr,"g"),"");
+          // console.log(_sdp)
         }
       }
-      console.log(_sdp);
+      // console.log(_sdp);
       return _sdp;
     }