diff --git a/server/main.cpp b/server/main.cpp index e70ed504..75264ff3 100644 --- a/server/main.cpp +++ b/server/main.cpp @@ -209,7 +209,6 @@ static void inline listen_shell_input(){ //全局变量,在WebApi中用于保存配置文件用 string g_ini_file; -extern void test_sdp(); int start_main(int argc,char *argv[]) { { CMD_main cmd_main; @@ -267,7 +266,6 @@ int start_main(int argc,char *argv[]) { }); } - test_sdp(); uint16_t shellPort = mINI::Instance()[Shell::kPort]; uint16_t rtspPort = mINI::Instance()[Rtsp::kPort]; uint16_t rtspsPort = mINI::Instance()[Rtsp::kSSLPort]; diff --git a/webrtc/Sdp.cpp b/webrtc/Sdp.cpp index b0aae5b5..a6b548fd 100644 --- a/webrtc/Sdp.cpp +++ b/webrtc/Sdp.cpp @@ -719,152 +719,6 @@ string SdpAttrCandidate::toString() const { return SdpItem::toString(); } -void test_sdp(){ - char str1[] = "v=0\n" - "o=- 380154348540553537 2 IN IP4 127.0.0.1\n" - "s=-\n" - "b=CT:1900\n" - "t=0 0\n" - "a=group:BUNDLE video\n" - "a=msid-semantic: WMS\n" - "m=video 9 RTP/SAVPF 96\n" - "c=IN IP4 0.0.0.0\n" - "a=rtcp:9 IN IP4 0.0.0.0\n" - "a=ice-ufrag:1ZFN\n" - "a=ice-pwd:70P3H0jPlGz1fiJl5XZfXMZH\n" - "a=ice-options:trickle\n" - "a=fingerprint:sha-256 3E:10:35:6B:9A:9E:B0:55:AC:2A:88:F5:74:C1:70:32:B5:8D:88:1D:37:B0:9C:69:A6:DD:07:10:73:27:1A:16\n" - "a=setup:active\n" - "a=mid:video\n" - "a=recvonly\n" - "a=rtcp-mux\n" - "a=rtpmap:96 H264/90000\n" - "a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f"; - char str2[] = "v=0\n" - "o=- 2584450093346841581 2 IN IP4 127.0.0.1\n" - "s=-\n" - "t=0 0\n" - "a=group:BUNDLE audio video data\n" - "a=msid-semantic: WMS 616cfbb1-33a3-4d8c-8275-a199d6005549\n" - "m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126\n" - "c=IN IP4 0.0.0.0\n" - "a=rtcp:9 IN IP4 0.0.0.0\n" - "a=ice-ufrag:sXJ3\n" - "a=ice-pwd:yEclOTrLg1gEubBFefOqtmyV\n" - "a=fingerprint:sha-256 22:14:B5:AF:66:12:C7:C7:8D:EF:4B:DE:40:25:ED:5D:8F:17:54:DD:88:33:C0:13:2E:FD:1A:FA:7E:7A:1B:79\n" - "a=setup:actpass\n" - "a=mid:audio\n" - "a=extmap:1/sendonly urn:ietf:params:rtp-hdrext:ssrc-audio-level\n" - "a=sendrecv\n" - "a=rtcp-mux\n" - "a=rtpmap:111 opus/48000/2\n" - "a=rtcp-fb:111 transport-cc\n" - "a=fmtp:111 minptime=10;useinbandfec=1\n" - "a=rtpmap:103 ISAC/16000\n" - "a=rtpmap:104 ISAC/32000\n" - "a=rtpmap:9 G722/8000\n" - "a=rtpmap:0 PCMU/8000\n" - "a=rtpmap:8 PCMA/8000\n" - "a=rtpmap:106 CN/32000\n" - "a=rtpmap:105 CN/16000\n" - "a=rtpmap:13 CN/8000\n" - "a=rtpmap:110 telephone-event/48000\n" - "a=rtpmap:112 telephone-event/32000\n" - "a=rtpmap:113 telephone-event/16000\n" - "a=rtpmap:126 telephone-event/8000\n" - "a=ssrc:120276603 cname:iSkJ2vn5cYYubTve\n" - "a=ssrc:120276603 msid:616cfbb1-33a3-4d8c-8275-a199d6005549 1da3d329-7399-4fe9-b20f-69606bebd363\n" - "a=ssrc:120276603 mslabel:616cfbb1-33a3-4d8c-8275-a199d6005549\n" - "a=ssrc:120276603 label:1da3d329-7399-4fe9-b20f-69606bebd363\n" - "m=video 9 UDP/TLS/RTP/SAVPF 96 98 100 102 127 97 99 101 125\n" - "c=IN IP4 0.0.0.0\n" - "a=rtcp:9 IN IP4 0.0.0.0\n" - "a=ice-ufrag:sXJ3\n" - "a=ice-pwd:yEclOTrLg1gEubBFefOqtmyV\n" - "a=fingerprint:sha-256 22:14:B5:AF:66:12:C7:C7:8D:EF:4B:DE:40:25:ED:5D:8F:17:54:DD:88:33:C0:13:2E:FD:1A:FA:7E:7A:1B:79\n" - "a=setup:actpass\n" - "a=mid:video\n" - "a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n" - "a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\n" - "a=extmap:4 urn:3gpp:video-orientation\n" - "a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\n" - "a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\n" - "a=sendrecv\n" - "a=rtcp-mux\n" - "a=rtcp-rsize\n" - "a=rtpmap:96 VP8/90000\n" - "a=rtcp-fb:96 ccm fir\n" - "a=rtcp-fb:96 nack\n" - "a=rtcp-fb:96 nack pli\n" - "a=rtcp-fb:96 goog-remb\n" - "a=rtcp-fb:96 transport-cc\n" - "a=rtpmap:98 VP9/90000\n" - "a=rtcp-fb:98 ccm fir\n" - "a=rtcp-fb:98 nack\n" - "a=rtcp-fb:98 nack pli\n" - "a=rtcp-fb:98 goog-remb\n" - "a=rtcp-fb:98 transport-cc\n" - "a=rtpmap:100 H264/90000\n" - "a=rtcp-fb:100 ccm fir\n" - "a=rtcp-fb:100 nack\n" - "a=rtcp-fb:100 nack pli\n" - "a=rtcp-fb:100 goog-remb\n" - "a=rtcp-fb:100 transport-cc\n" - "a=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\n" - "a=rtpmap:102 red/90000\n" - "a=rtpmap:127 ulpfec/90000\n" - "a=rtpmap:97 rtx/90000\n" - "a=fmtp:97 apt=96\n" - "a=rtpmap:99 rtx/90000\n" - "a=fmtp:99 apt=98\n" - "a=rtpmap:101 rtx/90000\n" - "a=fmtp:101 apt=100\n" - "a=rtpmap:125 rtx/90000\n" - "a=fmtp:125 apt=102\n" - "a=ssrc-group:FID 2580761338 611523443\n" - "a=ssrc:2580761338 cname:iSkJ2vn5cYYubTve\n" - "a=ssrc:2580761338 msid:616cfbb1-33a3-4d8c-8275-a199d6005549 bf270496-a23e-47b5-b901-ef23096cd961\n" - "a=ssrc:2580761338 mslabel:616cfbb1-33a3-4d8c-8275-a199d6005549\n" - "a=ssrc:2580761338 label:bf270496-a23e-47b5-b901-ef23096cd961\n" - "a=ssrc:611523443 cname:iSkJ2vn5cYYubTve\n" - "a=ssrc:611523443 msid:616cfbb1-33a3-4d8c-8275-a199d6005549 bf270496-a23e-47b5-b901-ef23096cd961\n" - "a=ssrc:611523443 mslabel:616cfbb1-33a3-4d8c-8275-a199d6005549\n" - "a=ssrc:611523443 label:bf270496-a23e-47b5-b901-ef23096cd961\n" - "a=candidate:3575467457 1 udp 2113937151 10.15.83.23 57857 typ host generation 0 ufrag 6R0z network-cost 999\n" - "m=application 9 DTLS/SCTP 5000\n" - "c=IN IP4 0.0.0.0\n" - "a=ice-ufrag:sXJ3\n" - "a=ice-pwd:yEclOTrLg1gEubBFefOqtmyV\n" - "a=fingerprint:sha-256 22:14:B5:AF:66:12:C7:C7:8D:EF:4B:DE:40:25:ED:5D:8F:17:54:DD:88:33:C0:13:2E:FD:1A:FA:7E:7A:1B:79\n" - "a=setup:actpass\n" - "a=mid:data\n" - "a=sctpmap:5000 webrtc-datachannel 1024\n" - "a=sctp-port:5000"; - - RtcSessionSdp sdp1; - sdp1.parse(str1); - - RtcSessionSdp sdp2; - sdp2.parse(str2); - - for (auto media : sdp1.medias) { - InfoL << getRtpDirectionString(media.getDirection()); - } - for (auto media : sdp2.medias) { - InfoL << getRtpDirectionString(media.getDirection()); - } - InfoL << sdp1.toString(); - InfoL << sdp2.toString(); - - RtcSession session1; - session1.loadFrom(str1); - - RtcSession session2; - session2.loadFrom(str2); - DebugL << session1.toString(); - DebugL << session2.toString(); -} - void RtcSession::loadFrom(const string &str) { RtcSessionSdp sdp; sdp.parse(str); @@ -1294,7 +1148,6 @@ void RtcConfigure::setDefaultSetting(string ice_ufrag, DtlsRole role, RtpDirection direction, const SdpAttrFingerprint &fingerprint) { - video.setDefaultSetting(TrackVideo); audio.setDefaultSetting(TrackAudio); application.setDefaultSetting(TrackApplication); @@ -1321,9 +1174,15 @@ void RtcConfigure::addCandidate(const SdpAttrCandidate &candidate, TrackType typ break; } default: { - audio.candidate.emplace_back(candidate); - video.candidate.emplace_back(candidate); - application.candidate.emplace_back(candidate); + if (audio.group_bundle) { + audio.candidate.emplace_back(candidate); + } + if (video.group_bundle) { + video.candidate.emplace_back(candidate); + } + if (application.group_bundle) { + application.candidate.emplace_back(candidate); + } break; } } diff --git a/webrtc/Sdp.h b/webrtc/Sdp.h index 8a373d82..bfdf01d4 100644 --- a/webrtc/Sdp.h +++ b/webrtc/Sdp.h @@ -431,6 +431,7 @@ public: //a=candidate:4 1 udp 2 192.168.1.7 58107 typ host //a=candidate:
typ string foundation; + //传输媒体的类型,1代表RTP;2代表 RTCP。 uint32_t component; string transport {"udp"}; uint32_t priority;