flutter-webrtc / flutter-webrtc-demo

Demo for flutter-webrtc
MIT License
1.15k stars 417 forks source link

在windows上奇怪的连接失败 #129

Closed FourLeafTec closed 3 years ago

FourLeafTec commented 3 years ago

过程有点复杂,我有点担心自己的英文描述不清楚,先中文描述了,如果需要英文开发者处理的话我再尝试用英文描述一遍

在对demo做多平台测试,环境方面使用两台Windows 10,一台x86的macMini,两台Android,分别并且分别在win10和mac上启动chrome浏览器做web测试,所有被测设备及flutter-webrtc-server处于同一个Wifi下, 使用检出的版本,现象如下:

  1. Windows 10呼叫任何平台都失败
  2. Android,macOS,chrome呼叫Windows 10成功
  3. 除win10外,其他设备互相呼叫均可成功

查看状态变化日志及chrome://webrtc-internals控制台检查后,做出猜测,简单尝试给部分动作添加Future.delay包裹

  1. Future.delay(Duration(second:1),(){_send("offer",....)});修改后win10呼叫android成功,但挂断时程序有概率会无日志崩溃.
  2. pc.onIceCandidate回调的cadidate不再直接发送,而是添加到临时队列,使用一个Timer每秒向被呼叫每秒发送一个_send("candidate",...),进行此修改后,win10呼叫chrome及macOS成功

目前win10呼叫win10始终无法成功

  1. 在呼叫端接到第一个audio的IceCandidate后IceConnect进入checking状态,同时能监听到AddStream触发,此stream同时包含audio和video
  2. 呼叫端状态会一直处在checking状态,大概30秒后进入complete状态,但此时连接并未成功建立
  3. 此时应答端的状态一直维持在Gathering 推测原因和未经修改的demo呼叫chrome情况类似,是IceConnect timeout,然后直接关闭了,并且推测是video的连接建立失败 并且应答端只会监听到一个pc.onIceCandidate的触发只能触发到audio后续的video cadidate无法得到

现象非常的怪异,如果方便的话,希望能先帮我找到win10呼叫win10的失败原因,并且解决一下,这样我就能做这个选型了

附日志如下: ``` Launching lib\main.dart on Windows in debug mode... Building Windows application... Debug service listening on ws://127.0.0.1:58860/-E5SG4DaPj8=/ws Syncing files to device Windows... flutter: connect to https://172.16.10.180:8086/ws flutter: getTurnCredential: Allow self-signed certificate => 172.16.10.180:8086. flutter: getTurnCredential:response => {"username":"1616561656:flutter-webrtc","password":"LD8RnCDEg1bC/QU29J90tfaE2GA","ttl":86400,"uris":["turn:172.16.10.180:19303?transport=udp","turn:172.16.10.180:19302?transport=tcp"]} . flutter: SimpleWebSocket: Allow self-signed certificate => 172.16.10.180:8086. flutter: onOpen flutter: send: {"type":"new","data":{"name":"DESKTOP-DN34BSV(windows)","id":"073716","user_agent":"flutter-webrtc/windows-plugin 0.0.1"}} flutter: Received data: {"type":"peers","data":[{"id":"180","name":"DESKTOP-71LI36L(windows)","user_agent":"flutter-webrtc/windows-plugin 0.0.1"},{"id":"073716","name":"DESKTOP-DN34BSV(windows)","user_agent":"flutter-webrtc/windows-plugin 0.0.1"},{"id":"admin12345678-m","name":"localhost(android)","user_agent":"flutter-webrtc/android-plugin 0.0.1"}]} flutter: {iceServers: [{urls: turn:172.16.10.180:19303?transport=udp, username: 1616561656:flutter-webrtc, credential: LD8RnCDEg1bC/QU29J90tfaE2GA}]} flutter: signaling state:RTCSignalingState.RTCSignalingStateHaveLocalOffer flutter: send: {"type":"offer","data":{"to":"180","from":"073716","description":{"sdp":"v=0\r\no=- 3623022519663236880 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video\r\na=msid-semantic: WMS\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:tcIk\r\na=ice-pwd:BnRH15RPtsO6hP+ix4mvKgQw\r\na=ice-options:trickle\r\na=fingerprint:sha-256 63:AE:C2:EC:21:D9:B5:9E:E5:56:96:F9:2A:A4:67:33:61:A0:4C:6E:8F:92:83:C8:1B:B5:1B:C0:09:CB:3A:D8\r\na=setup:actpass\r\na=mid:audio\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:104 ISAC/32000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:102 ILBC/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:106 CN/32000\r\na=rtpmap:105 CN/16000\r\na=rtpmap:13 CN/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:112 telephone-event/32000\r\na=rtpmap:113 telephone-event/16000\r\na=rtpmap:126 telephone-event/8000\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 127 122 125 121 124 107 108 109 123\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:tcIk\r\na=ice-pwd:BnRH15RPtsO6hP+ix4mvKgQw\r\na=ice-options:trickle\r\na=fingerprint:sha-256 63:AE:C2:EC:21:D9:B5:9E:E5:56:96:F9:2A:A4:67:33:61:A0:4C:6E:8F:92:83:C8:1B:B5:1B:C0:09:CB:3A:D8\r\na=setup:actpass\r\na=mid:video\r\na=extmap:2 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:4 urn:3gpp:video-orientation\r\na=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:10 http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07\r\na=recvonly\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 goog-remb\r\na=rtcp-fb:96 transport-cc\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=rtpmap:98 VP9/90000\r\na=rtcp-fb:98 goog-remb\r\na=rtcp-fb:98 transport-cc\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=fmtp:98 profile-id=0\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=98\r\na=rtpmap:100 H264/90000\r\na=rtcp-fb:100 goog-remb\r\na=rtcp-fb:100 transport-cc\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:101 rtx/90000\r\na=fmtp:101 apt=100\r\na=rtpmap:127 H264/90000\r\na=rtcp-fb:127 goog-remb\r\na=rtcp-fb:127 transport-cc\r\na=rtcp-fb:127 ccm fir\r\na=rtcp-fb:127 nack\r\na=rtcp-fb:127 nack pli\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\r\na=rtpmap:122 rtx/90000\r\na=fmtp:122 apt=127\r\na=rtpmap:125 H264/90000\r\na=rtcp-fb:125 goog-remb\r\na=rtcp-fb:125 transport-cc\r\na=rtcp-fb:125 ccm fir\r\na=rtcp-fb:125 nack\r\na=rtcp-fb:125 nack pli\r\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:121 rtx/90000\r\na=fmtp:121 apt=125\r\na=rtpmap:124 H264/90000\r\na=rtcp-fb:124 goog-remb\r\na=rtcp-fb:124 transport-cc\r\na=rtcp-fb:124 ccm fir\r\na=rtcp-fb:124 nack\r\na=rtcp-fb:124 nack pli\r\na=fmtp:124 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\na=rtpmap:107 rtx/90000\r\na=fmtp:107 apt=124\r\na=rtpmap:108 red/90000\r\na=rtpmap:109 rtx/90000\r\na=fmtp:109 apt=108\r\na=rtpmap:123 ulpfec/90000\r\n","type":"offer"},"session_id":"073716-180","media":"video"}} flutter: gather state:RTCIceGatheringState.RTCIceGatheringStateGathering flutter: candidate]]]]]]]]]]]]]:candidate:3717615912 1 udp 2122260223 192.168.200.166 61713 typ host generation 0 ufrag tcIk network-id 2 network-cost 50 flutter: candidate]]]]]]]]]]]]]:candidate:1447065330 1 udp 2122194687 172.16.10.163 61714 typ host generation 0 ufrag tcIk network-id 1 flutter: candidate]]]]]]]]]]]]]:candidate:3717615912 1 udp 2122260223 192.168.200.166 61715 typ host generation 0 ufrag tcIk network-id 2 network-cost 50 flutter: send: {"type":"candidate","data":{"to":"180","from":"073716","candidate":{"sdpMLineIndex":1,"sdpMid":"video","candidate":"candidate:3717615912 1 udp 2122260223 192.168.200.166 61715 typ host generation 0 ufrag tcIk network-id 2 network-cost 50"},"session_id":"073716-180"}} flutter: candidate]]]]]]]]]]]]]:candidate:1447065330 1 udp 2122194687 172.16.10.163 61716 typ host generation 0 ufrag tcIk network-id 1 flutter: send: {"type":"candidate","data":{"to":"180","from":"073716","candidate":{"sdpMLineIndex":1,"sdpMid":"video","candidate":"candidate:1447065330 1 udp 2122194687 172.16.10.163 61716 typ host generation 0 ufrag tcIk network-id 1"},"session_id":"073716-180"}} flutter: candidate]]]]]]]]]]]]]:candidate:2262204151 1 udp 41819903 172.16.10.180 58466 typ relay raddr 172.16.10.163 rport 61714 generation 0 ufrag tcIk network-id 1 flutter: candidate]]]]]]]]]]]]]:candidate:2262204151 1 udp 41819903 172.16.10.180 58467 typ relay raddr 172.16.10.163 rport 61716 generation 0 ufrag tcIk network-id 1 flutter: send: {"type":"candidate","data":{"to":"180","from":"073716","candidate":{"sdpMLineIndex":1,"sdpMid":"video","candidate":"candidate:2262204151 1 udp 41819903 172.16.10.180 58467 typ relay raddr 172.16.10.163 rport 61716 generation 0 ufrag tcIk network-id 1"},"session_id":"073716-180"}} flutter: Received data: {} flutter: Received data: {} flutter: Received data: {"type":"answer","data":{"to":"073716","from":"180","description":{"sdp":"v=0\r\no=- 549949327756781945 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video\r\na=msid-semantic: WMS 85D5544E-D96C-480C-B8FA-92EE672D0880\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:drYf\r\na=ice-pwd:KtzjSL8ocj+3IO0I3WvHTx3S\r\na=ice-options:trickle\r\na=fingerprint:sha-256 2B:2D:2F:60:F4:3A:84:25:85:E8:01:AE:A9:80:85:C4:A5:D0:1A:B9:57:EA:79:3A:85:DB:65:6D:1C:58:FF:2E\r\na=setup:active\r\na=mid:audio\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=sendonly\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:104 ISAC/32000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:102 ILBC/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:106 CN/32000\r\na=rtpmap:105 CN/16000\r\na=rtpmap:13 CN/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:112 telephone-event/32000\r\na=rtpmap:113 telephone-event/16000\r\na=rtpmap:126 telephone-event/8000\r\na=ssrc:1753353405 cname:NmTG6gZ2yYMQpCWb\r\na=ssrc:1753353405 msid:85D5544E-D96C-480C-B8FA-92EE672D0880 8B0DA547-A311-475E-BB13-6640C41358C2\r\na=ssrc:1753353405 mslabel:85D5544E-D96C-480C-B8FA-92EE672D0880\r\na=ssrc:1753353405 label:8B0DA547-A311-475E-BB13-6640C41358C2\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 127 122 125 121 124 107 108 109 123\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:drYf\r\na=ice-pwd:KtzjSL8ocj+3IO0I3WvHTx3S\r\na=ice-options:trickle\r\na=fingerprint:sha-256 2B:2D:2F:60:F4:3A:84:25:85:E8:01:AE:A9:80:85:C4:A5:D0:1A:B9:57:EA:79:3A:85:DB:65:6D:1C:58:FF:2E\r\na=setup:active\r\na=mid:video\r\na=extmap:2 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:4 urn:3gpp:video-orientation\r\na=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:10 http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07\r\na=sendonly\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 goog-remb\r\na=rtcp-fb:96 transport-cc\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=rtpmap:98 VP9/90000\r\na=rtcp-fb:98 goog-remb\r\na=rtcp-fb:98 transport-cc\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=fmtp:98 profile-id=0\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=98\r\na=rtpmap:100 H264/90000\r\na=rtcp-fb:100 goog-remb\r\na=rtcp-fb:100 transport-cc\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:101 rtx/90000\r\na=fmtp:101 apt=100\r\na=rtpmap:127 H264/90000\r\na=rtcp-fb:127 goog-remb\r\na=rtcp-fb:127 transport-cc\r\na=rtcp-fb:127 ccm fir\r\na=rtcp-fb:127 nack\r\na=rtcp-fb:127 nack pli\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\r\na=rtpmap:122 rtx/90000\r\na=fmtp:122 apt=127\r\na=rtpmap:125 H264/90000\r\na=rtcp-fb:125 goog-remb\r\na=rtcp-fb:125 transport-cc\r\na=rtcp-fb:125 ccm fir\r\na=rtcp-fb:125 nack\r\na=rtcp-fb:125 nack pli\r\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:121 rtx/90000\r\na=fmtp:121 apt=125\r\na=rtpmap:124 H264/90000\r\na=rtcp-fb:124 goog-remb\r\na=rtcp-fb:124 transport-cc\r\na=rtcp-fb:124 ccm fir\r\na=rtcp-fb:124 nack\r\na=rtcp-fb:124 nack pli\r\na=fmtp:124 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\na=rtpmap:107 rtx/90000\r\na=fmtp:107 apt=124\r\na=rtpmap:108 red/90000\r\na=rtpmap:109 rtx/90000\r\na=fmtp:109 apt=108\r\na=rtpmap:123 ulpfec/90000\r\na=ssrc-group:FID 1274675730 1813864954\r\na=ssrc:1274675730 cname:NmTG6gZ2yYMQpCWb\r\na=ssrc:1274675730 msid:85D5544E-D96C-480C-B8FA-92EE672D0880 5C880296-1A5E-486F-BF8E-910F0A530CC2\r\na=ssrc:1274675730 mslabel:85D5544E-D96C-480C-B8FA-92EE672D0880\r\na=ssrc:1274675730 label:5C880296-1A5E-486F-BF8E-910F0A530CC2\r\na=ssrc:1813864954 cname:NmTG6gZ2yYMQpCWb\r\na=ssrc:1813864954 msid:85D5544E-D96C-480C-B8FA-92EE672D0880 5C880296-1A5E-486F-BF8E-910F0A530CC2\r\na=ssrc:1813864954 mslabel:85D5544E-D96C-480C-B8FA-92EE672D0880\r\na=ssrc:1813864954 label:5C880296-1A5E-486F-BF8E-910F0A530CC2\r\n","type":"answer"},"session_id":"073716-180"}} flutter: signaling state:RTCSignalingState.RTCSignalingStateStable flutter: Received data: {"type":"candidate","data":{"to":"073716","from":"180","candidate":{"sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:2262204151 1 udp 41819903 172.16.10.180 58472 typ relay raddr 0.0.0.0 rport 0 generation 0 ufrag drYf network-id 1"},"session_id":"073716-180"}} flutter: ice state:RTCIceConnectionState.RTCIceConnectionStateChecking flutter: on add stream:[Track(id: 8B0DA547-A311-475E-BB13-6640C41358C2, kind: audio, label: 8B0DA547-A311-475E-BB13-6640C41358C2, enabled: true, muted: false), Track(id: 5C880296-1A5E-486F-BF8E-910F0A530CC2, kind: video, label: 5C880296-1A5E-486F-BF8E-910F0A530CC2, enabled: true, muted: false)] flutter: Received data: {} flutter: Received data: {} flutter: Received data: {} flutter: Received data: {} flutter: Received data: {} flutter: Received data: {} flutter: gather state:RTCIceGatheringState.RTCIceGatheringStateComplete ```
cloudwebrtc commented 3 years ago

我想问题应该出在 Windows 10 发起呼叫

cloudwebrtc commented 3 years ago

最好的办法是编译一个带debug 信息的libwebrtc.dll 库,使用vs 2019 启动原生调试,应该不会是大问题,很早的时候这个库就可以正常运行.

FourLeafTec commented 3 years ago

会不会是 rtc_peerconnection_impl.cc#L442 这段只把video description给到了webrtc库 而我观察到应答那边pc.onIceCandidate看上去像是连上一个才会给回调下一个,而上来给到的是个audio的candidate,然后就不再回调了

我对内部细节不是很熟,可以的话希望能给我一个调试思路

cloudwebrtc commented 3 years ago

使用本项目里的代码未做任何修改对吧。

FourLeafTec commented 3 years ago

对,win10 to win10的没做修改

应答端日志 ``` Launching lib\main.dart on Windows in debug mode... Building Windows application... Debug service listening on ws://127.0.0.1:51145/lhP0MtF1GSw=/ws Syncing files to device Windows... flutter: connect to https://172.16.10.180:8086/ws flutter: getTurnCredential: Allow self-signed certificate => 172.16.10.180:8086. flutter: getTurnCredential:response => {"username":"1616574609:flutter-webrtc","password":"Ut7pJw+4x9lbz2xk0BwBnRMA5WY","ttl":86400,"uris":["turn:172.16.10.180:19303?transport=udp","turn:172.16.10.180:19302?transport=tcp"]} . flutter: SimpleWebSocket: Allow self-signed certificate => 172.16.10.180:8086. flutter: onOpen flutter: send: {"type":"new","data":{"name":"DESKTOP-71LI36L(windows)","id":"180","user_agent":"flutter-webrtc/windows-plugin 0.0.1"}} flutter: Received data: {"type":"peers","data":[{"id":"180","name":"DESKTOP-71LI36L(windows)","user_agent":"flutter-webrtc/windows-plugin 0.0.1"},{"id":"350385","name":"DESKTOP-DN34BSV(windows)","user_agent":"flutter-webrtc/windows-plugin 0.0.1"}]} flutter: Received data: {} flutter: Received data: {"type":"offer","data":{"to":"180","from":"350385","description":{"sdp":"v=0\r\no=- 641595658257624925 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video\r\na=msid-semantic: WMS 12F3846A-17C5-4749-946B-194AEC450398\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:WGi4\r\na=ice-pwd:IRN3uexCd2ugarz9lcpMAhsq\r\na=ice-options:trickle\r\na=fingerprint:sha-256 56:FA:D2:69:26:12:6D:3E:D4:81:41:15:4A:B2:8B:F3:BB:6C:61:DA:BC:76:73:7C:D2:1C:A6:EE:17:6E:82:E7\r\na=setup:actpass\r\na=mid:audio\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=sendrecv\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:104 ISAC/32000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:102 ILBC/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:106 CN/32000\r\na=rtpmap:105 CN/16000\r\na=rtpmap:13 CN/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:112 telephone-event/32000\r\na=rtpmap:113 telephone-event/16000\r\na=rtpmap:126 telephone-event/8000\r\na=ssrc:2282861112 cname:lxeJCF7C9lM1FikS\r\na=ssrc:2282861112 msid:12F3846A-17C5-4749-946B-194AEC450398 9C3113F7-55C6-404D-BBD9-090A74DC29C3\r\na=ssrc:2282861112 mslabel:12F3846A-17C5-4749-946B-194AEC450398\r\na=ssrc:2282861112 label:9C3113F7-55C6-404D-BBD9-090A74DC29C3\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 127 122 125 121 124 107 108 109 123\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:WGi4\r\na=ice-pwd:IRN3uexCd2ugarz9lcpMAhsq\r\na=ice-options:trickle\r\na=fingerprint:sha-256 56:FA:D2:69:26:12:6D:3E:D4:81:41:15:4A:B2:8B:F3:BB:6C:61:DA:BC:76:73:7C:D2:1C:A6:EE:17:6E:82:E7\r\na=setup:actpass\r\na=mid:video\r\na=extmap:2 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:4 urn:3gpp:video-orientation\r\na=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:10 http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07\r\na=sendrecv\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 goog-remb\r\na=rtcp-fb:96 transport-cc\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=rtpmap:98 VP9/90000\r\na=rtcp-fb:98 goog-remb\r\na=rtcp-fb:98 transport-cc\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=fmtp:98 profile-id=0\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=98\r\na=rtpmap:100 H264/90000\r\na=rtcp-fb:100 goog-remb\r\na=rtcp-fb:100 transport-cc\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:101 rtx/90000\r\na=fmtp:101 apt=100\r\na=rtpmap:127 H264/90000\r\na=rtcp-fb:127 goog-remb\r\na=rtcp-fb:127 transport-cc\r\na=rtcp-fb:127 ccm fir\r\na=rtcp-fb:127 nack\r\na=rtcp-fb:127 nack pli\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\r\na=rtpmap:122 rtx/90000\r\na=fmtp:122 apt=127\r\na=rtpmap:125 H264/90000\r\na=rtcp-fb:125 goog-remb\r\na=rtcp-fb:125 transport-cc\r\na=rtcp-fb:125 ccm fir\r\na=rtcp-fb:125 nack\r\na=rtcp-fb:125 nack pli\r\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:121 rtx/90000\r\na=fmtp:121 apt=125\r\na=rtpmap:124 H264/90000\r\na=rtcp-fb:124 goog-remb\r\na=rtcp-fb:124 transport-cc\r\na=rtcp-fb:124 ccm fir\r\na=rtcp-fb:124 nack\r\na=rtcp-fb:124 nack pli\r\na=fmtp:124 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\na=rtpmap:107 rtx/90000\r\na=fmtp:107 apt=124\r\na=rtpmap:108 red/90000\r\na=rtpmap:109 rtx/90000\r\na=fmtp:109 apt=108\r\na=rtpmap:123 ulpfec/90000\r\na=ssrc-group:FID 1673139811 3004039376\r\na=ssrc:1673139811 cname:lxeJCF7C9lM1FikS\r\na=ssrc:1673139811 msid:12F3846A-17C5-4749-946B-194AEC450398 F270DB96-82CA-4F9A-915D-453631AE715E\r\na=ssrc:1673139811 mslabel:12F3846A-17C5-4749-946B-194AEC450398\r\na=ssrc:1673139811 label:F270DB96-82CA-4F9A-915D-453631AE715E\r\na=ssrc:3004039376 cname:lxeJCF7C9lM1FikS\r\na=ssrc:3004039376 msid:12F3846A-17C5-4749-946B-194AEC450398 F270DB96-82CA-4F9A-915D-453631AE715E\r\na=ssrc:3004039376 mslabel:12F3846A-17C5-4749-946B-194AEC450398\r\na=ssrc:3004039376 label:F270DB96-82CA-4F9A-915D-453631AE715E\r\n","type":"offer"},"session_id":"350385-180","media":"video"}} flutter: Received data: {"type":"candidate","data":{"to":"180","from":"350385","candidate":{"sdpMLineIndex":1,"sdpMid":"video","candidate":"candidate:3717615912 1 udp 2122260223 192.168.200.166 62205 typ host generation 0 ufrag WGi4 network-id 2 network-cost 50"},"session_id":"350385-180"}} flutter: Received data: {"type":"candidate","data":{"to":"180","from":"350385","candidate":{"sdpMLineIndex":1,"sdpMid":"video","candidate":"candidate:1447065330 1 udp 2122194687 172.16.10.163 62206 typ host generation 0 ufrag WGi4 network-id 1"},"session_id":"350385-180"}} flutter: Received data: {} flutter: {iceServers: [{urls: turn:172.16.10.180:19303?transport=udp, username: 1616574609:flutter-webrtc, credential: Ut7pJw+4x9lbz2xk0BwBnRMA5WY}]} flutter: onSignalingStateRTCSignalingState.RTCSignalingStateHaveRemoteOffer SetRemoteDescription Success CreateOffer Success flutter: onSignalingStateRTCSignalingState.RTCSignalingStateStable SetLocalDescription Success flutter: send: {"type":"answer","data":{"to":"350385","from":"180","description":{"sdp":"v=0\r\no=- 8860979392987094583 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video\r\na=msid-semantic: WMS 3841BA61-3DF9-4E14-A168-F67BE1113DAE\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:DUxd\r\na=ice-pwd:gH1E2kLMOjXR9pRSXF05XuPt\r\na=ice-options:trickle\r\na=fingerprint:sha-256 28:11:B8:B5:37:CF:97:8D:8F:18:B8:57:17:F7:86:D8:61:2A:4E:30:FE:31:2B:86:FE:2D:A6:B4:61:BE:55:FD\r\na=setup:active\r\na=mid:audio\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=sendrecv\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:104 ISAC/32000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:102 ILBC/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:106 CN/32000\r\na=rtpmap:105 CN/16000\r\na=rtpmap:13 CN/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:112 telephone-event/32000\r\na=rtpmap:113 telephone-event/16000\r\na=rtpmap:126 telephone-event/8000\r\na=ssrc:918344825 cname:20nCk/Z3gu+j/Ny3\r\na=ssrc:918344825 msid:3841BA61-3DF9-4E14-A168-F67BE1113DAE CAE18345-737B-4807-8942-4191FE031EB9\r\na=ssrc:918344825 mslabel:3841BA61-3DF9-4E14-A168-F67BE1113DAE\r\na=ssrc:918344825 label:CAE18345-737B-4807-8942-4191FE031EB9\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 127 122 125 121 124 107 108 109 123\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:DUxd\r\na=ice-pwd:gH1E2kLMOjXR9pRSXF05XuPt\r\na=ice-options:trickle\r\na=fingerprint:sha-256 28:11:B8:B5:37:CF:97:8D:8F:18:B8:57:17:F7:86:D8:61:2A:4E:30:FE:31:2B:86:FE:2D:A6:B4:61:BE:55:FD\r\na=setup:active\r\na=mid:video\r\na=extmap:2 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:4 urn:3gpp:video-orientation\r\na=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:10 http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07\r\na=sendrecv\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 goog-remb\r\na=rtcp-fb:96 transport-cc\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=rtpmap:98 VP9/90000\r\na=rtcp-fb:98 goog-remb\r\na=rtcp-fb:98 transport-cc\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=fmtp:98 profile-id=0\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=98\r\na=rtpmap:100 H264/90000\r\na=rtcp-fb:100 goog-remb\r\na=rtcp-fb:100 transport-cc\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:101 rtx/90000\r\na=fmtp:101 apt=100\r\na=rtpmap:127 H264/90000\r\na=rtcp-fb:127 goog-remb\r\na=rtcp-fb:127 transport-cc\r\na=rtcp-fb:127 ccm fir\r\na=rtcp-fb:127 nack\r\na=rtcp-fb:127 nack pli\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\r\na=rtpmap:122 rtx/90000\r\na=fmtp:122 apt=127\r\na=rtpmap:125 H264/90000\r\na=rtcp-fb:125 goog-remb\r\na=rtcp-fb:125 transport-cc\r\na=rtcp-fb:125 ccm fir\r\na=rtcp-fb:125 nack\r\na=rtcp-fb:125 nack pli\r\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:121 rtx/90000\r\na=fmtp:121 apt=125\r\na=rtpmap:124 H264/90000\r\na=rtcp-fb:124 goog-remb\r\na=rtcp-fb:124 transport-cc\r\na=rtcp-fb:124 ccm fir\r\na=rtcp-fb:124 nack\r\na=rtcp-fb:124 nack pli\r\na=fmtp:124 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\na=rtpmap:107 rtx/90000\r\na=fmtp:107 apt=124\r\na=rtpmap:108 red/90000\r\na=rtpmap:109 rtx/90000\r\na=fmtp:109 apt=108\r\na=rtpmap:123 ulpfec/90000\r\na=ssrc-group:FID 744473509 3799491734\r\na=ssrc:744473509 cname:20nCk/Z3gu+j/Ny3\r\na=ssrc:744473509 msid:3841BA61-3DF9-4E14-A168-F67BE1113DAE E77CC034-F35A-4394-9F98-B7A40F85D4A9\r\na=ssrc:744473509 mslabel:3841BA61-3DF9-4E14-A168-F67BE1113DAE\r\na=ssrc:744473509 label:E77CC034-F35A-4394-9F98-B7A40F85D4A9\r\na=ssrc:3799491734 cname:20nCk/Z3gu+j/Ny3\r\na=ssrc:3799491734 msid:3841BA61-3DF9-4E14-A168-F67BE1113DAE E77CC034-F35A-4394-9F98-B7A40F85D4A9\r\na=ssrc:3799491734 mslabel:3841BA61-3DF9-4E14-A168-F67BE1113DAE\r\na=ssrc:3799491734 label:E77CC034-F35A-4394-9F98-B7A40F85D4A9\r\n","type":"answer"},"session_id":"350385-180"}} flutter: onIceGatheringStateRTCIceGatheringState.RTCIceGatheringStateGathering flutter: onIceCandidate:audio:candidate:4224018301 1 udp 2122260223 172.16.10.180 49891 typ host generation 0 ufrag DUxd network-id 1 flutter: send: {"type":"candidate","data":{"to":"350385","from":"180","candidate":{"sdpMLineIndex":0,"sdpMid":"audio","candidate":"candidate:4224018301 1 udp 2122260223 172.16.10.180 49891 typ host generation 0 ufrag DUxd network-id 1"},"session_id":"350385-180"}} flutter: Received data: {} flutter: Received data: {} flutter: Received data: {} flutter: Received data: {} flutter: Received data: {} flutter: Received data: {} flutter: Received data: {} flutter: Received data: {} ```
cloudwebrtc commented 3 years ago

我已经定位问题,尝试修复中.

cloudwebrtc commented 3 years ago

问题可能出现在windows 插件暂时未实现unified-plan 有关,当前windows 插件必须默认使用plan-b 发出offer,你可以尝试将windows 以外都设置成plan-b 检查是否可以正常通讯

FourLeafTec commented 3 years ago

非常抱歉近期可能没有足够的时间对plan-b进行测试了,pc这边我用web build外边加electron提交方案了 稍晚一段时间完成初步阶段后,会回来进行尝试 希望到时候能看到你那边的修复也完成了

在这个issue里额外提一个问题, 针对WIndows插件,我看demo和插件的C实现里对constraints都实现了一个叫optional的object,个人感觉这个部分似乎是advanced_constraints,是这样子么? 另外对optional basic constraints段的deviceId和mandatory段的sourceId似乎也是没有支持的感觉

我的工作里设备选择是必须的部分,另外因为只有三名开发人员,尽量希望多端统一,考虑Windows原生实现这块底层工作会比较多,所以也没敢选Windows原生实现,后续有机会的话也希望能对Windows原生实现这部分做出贡献

祝好运,稍后再见,这个issue我这边暂时挂起了

cloudwebrtc commented 3 years ago

flutter web + electron 确实是当前最快捷稳定的方式支持desktop

此插件最难的部分就是编写libwebrtc来支持windows/linux,由于webrtc source 编译出来的都是大量静态库,这些库没办法堆放在flutter-webrtc 中,这将导致库(静态.lib 压缩后200Mb+)得非常臃肿,下载安装都会变得困难,另google 官方的库编译出来依赖特定版本的libstdc++,因此无法做到任意环境下使用,因此不得不创建了libwebrtc 动态库(编译后仅12Mb)项目,这块库需要对现有webrtc 所有api 进行重新封装,导出无须依赖libstdc++的接口, 因此需要非常多的工作在libwebrtc 库上。

在这个issue里额外提一个问题, 针对WIndows插件,我看demo和插件的C实现里对constraints都实现了一个叫optional的object,个人感觉这个部分似乎是advanced_constraints,是这样子么? 另外对optional basic constraints段的deviceId和mandatory段的sourceId似乎也是没有支持的感觉

当前libwebrtc 只做了最基本api,还需要大量的PR,例如unfied-plan, RTCConfiguration 等等。

stale[bot] commented 3 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

xunhurried commented 3 years ago

Windows 10呼叫平台都失败 在最新flutter-webrtc-plugin 上有修复么?

xunhurried commented 3 years ago

@cloudwebrtc平台Windows 10 呼叫的问题 ,发现双方的udp 服务已开启,但是 发起方的udp socket 没有发送验证和数据请求 udp