MixedReality-WebRTC is a collection of components to help mixed reality app developers integrate audio and video real-time communication into their application and improve their collaborative experience
Describe the bug
I'm running the VideoChatDemo from the sample package in unity on two different computers in the same network. So my setup looks like this:
-MyNetwork
--PC A
----Node-dss
----Unity in play mode
--PC B
----Unity in play mode
1. Variant:
If I hit the "CreateOffer"-Btn for the first time on A, B gets an offer and A an answer. But there is no stream getting established.
So If I hit a second time "CreateOffer" on A, B gets two Offers and A an answer. Now the stream works.
2. Variant:
If I hit the "CreateOffer"-Btn for the first time on A and then once on B, stream gets established.
3. Variant:
If I do what I did in the second variant and then disconnect for example B. Then reconnect and press "CreateOffer" once, the stream gets establised.
My Question:
So what is the right way? In the documentation I read the following quote and thought that doing "CreateOffer" once should be enough:
"The VideoChatDemo sample contains an example of creating a button and using the NodeDssSignalerUI.cs script to do that, but the task essentially boils down to one of the two peers, and one only, calling PeerConnection.StartConnection()."
I would understand if only one request is needed or a request is sent from computer A and computer B has to actively accept it. But since it seems that you can send a request from computer A twice and then a stream is established, I am confused.
To Reproduce
Steps to reproduce the behavior:
Create 2 new projects
Import WebRTC and Samples
Set them up with right peed Ids
Start node-dss
Hit play in project 1/PC A and 2/PC B
Try the variants from above
Expected behavior
Show stream after first CreateOffer.
SDP messages
So this is message I get from 1.variant, when clicking the first time
Describe the bug I'm running the VideoChatDemo from the sample package in unity on two different computers in the same network. So my setup looks like this: -MyNetwork --PC A ----Node-dss ----Unity in play mode --PC B ----Unity in play mode
1. Variant: If I hit the "CreateOffer"-Btn for the first time on A, B gets an offer and A an answer. But there is no stream getting established. So If I hit a second time "CreateOffer" on A, B gets two Offers and A an answer. Now the stream works. 2. Variant: If I hit the "CreateOffer"-Btn for the first time on A and then once on B, stream gets established. 3. Variant: If I do what I did in the second variant and then disconnect for example B. Then reconnect and press "CreateOffer" once, the stream gets establised.
My Question: So what is the right way? In the documentation I read the following quote and thought that doing "CreateOffer" once should be enough: "The VideoChatDemo sample contains an example of creating a button and using the NodeDssSignalerUI.cs script to do that, but the task essentially boils down to one of the two peers, and one only, calling PeerConnection.StartConnection()." I would understand if only one request is needed or a request is sent from computer A and computer B has to actively accept it. But since it seems that you can send a request from computer A twice and then a stream is established, I am confused.
To Reproduce Steps to reproduce the behavior:
Expected behavior Show stream after first CreateOffer.
SDP messages So this is message I get from 1.variant, when clicking the first time
Offer message
o=- 6081369092971484585 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE 0 1 a=msid-semantic: WMS m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:R9SD a=ice-pwd:0ncCtR6OGzSwuHsGFIN5P8Ml a=ice-options:trickle a=fingerprint:sha-256 9C:57:61:6B:AC:B5:3E:99:05:73:48:2A:40:BB:A2:A8:EC:48:71:D5:97:F5:79:57:09:2A:3F:10:99:48:AD:52 a=setup:actpass a=mid:0 a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid a=sendrecv a=msid:- 4d84d339-20a1-4506-89a0-dbd0ebea5e50 a=rtcp-mux a=rtpmap:111 opus/48000/2 a=rtcp-fb:111 transport-cc a=fmtp:111 minptime=10;useinbandfec=1 a=rtpmap:103 ISAC/16000 a=rtpmap:104 ISAC/32000 a=rtpmap:9 G722/8000 a=rtpmap:102 ILBC/8000 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=rtpmap:106 CN/32000 a=rtpmap:105 CN/16000 a=rtpmap:13 CN/8000 a=rtpmap:110 telephone-event/48000 a=rtpmap:112 telephone-event/32000 a=rtpmap:113 telephone-event/16000 a=rtpmap:126 telephone-event/8000 a=ssrc:1957108142 cname:SqqBEUZX6zc2d6h+ a=ssrc:1957108142 msid: 4d84d339-20a1-4506-89a0-dbd0ebea5e50 a=ssrc:1957108142 mslabel: a=ssrc:1957108142 label:4d84d339-20a1-4506-89a0-dbd0ebea5e50 m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 127 124 125 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:R9SD a=ice-pwd:0ncCtR6OGzSwuHsGFIN5P8Ml a=ice-options:trickle a=fingerprint:sha-256 9C:57:61:6B:AC:B5:3E:99:05:73:48:2A:40:BB:A2:A8:EC:48:71:D5:97:F5:79:57:09:2A:3F:10:99:48:AD:52 a=setup:actpass a=mid:1 a=extmap:2 urn:ietf:params:rtp-hdrext:toffset a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=extmap:4 urn:3gpp:video-orientation a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/video-timing a=extmap:10 http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07 a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid a=sendrecv a=msid:- e1af43fc-a90e-41b1-92c0-8b6a28012594 a=rtcp-mux a=rtcp-rsize a=rtpmap:96 VP8/90000 a=rtcp-fb:96 goog-remb a=rtcp-fb:96 transport-cc a=rtcp-fb:96 ccm fir a=rtcp-fb:96 nack a=rtcp-fb:96 nack pli a=rtpmap:97 rtx/90000 a=fmtp:97 apt=96 a=rtpmap:98 VP9/90000 a=rtcp-fb:98 goog-remb a=rtcp-fb:98 transport-cc a=rtcp-fb:98 ccm fir a=rtcp-fb:98 nack a=rtcp-fb:98 nack pli a=fmtp:98 x-google-profile-id=0 a=rtpmap:99 rtx/90000 a=fmtp:99 apt=98 a=rtpmap:100 multiplex/90000 a=rtcp-fb:100 goog-remb a=rtcp-fb:100 transport-cc a=rtcp-fb:100 ccm fir a=rtcp-fb:100 nack a=rtcp-fb:100 nack pli a=fmtp:100 acn=VP9;x-google-profile-id=0 a=rtpmap:101 rtx/90000 a=fmtp:101 apt=100 a=rtpmap:127 red/90000 a=rtpmap:124 rtx/90000 a=fmtp:124 apt=127 a=rtpmap:125 ulpfec/90000 a=ssrc-group:FID 2526988004 1987002857 a=ssrc:2526988004 cname:SqqBEUZX6zc2d6h+ a=ssrc:2526988004 msid: e1af43fc-a90e-41b1-92c0-8b6a28012594 a=ssrc:2526988004 mslabel: a=ssrc:2526988004 label:e1af43fc-a90e-41b1-92c0-8b6a28012594 a=ssrc:1987002857 cname:SqqBEUZX6zc2d6h+ a=ssrc:1987002857 msid: e1af43fc-a90e-41b1-92c0-8b6a28012594 a=ssrc:1987002857 mslabel: a=ssrc:1987002857 label:e1af43fc-a90e-41b1-92c0-8b6a28012594
Answer message
o=- 4381708066323527232 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE 0 1 a=msid-semantic: WMS m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:ge74 a=ice-pwd:UP1WjPiiGHQKEZwK65EyNlcw a=ice-options:trickle a=fingerprint:sha-256 11:89:04:4C:1B:57:9B:26:52:22:F5:3D:20:3F:AB:28:97:C2:01:36:1C:BA:61:BC:DA:AF:40:B2:0D:38:14:F4 a=setup:active a=mid:0 a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid a=sendrecv a=msid:- 4d2e006a-044f-4c78-b34e-79a70f4dd871 a=rtcp-mux a=rtpmap:111 opus/48000/2 a=rtcp-fb:111 transport-cc a=fmtp:111 minptime=10;useinbandfec=1 a=rtpmap:103 ISAC/16000 a=rtpmap:104 ISAC/32000 a=rtpmap:9 G722/8000 a=rtpmap:102 ILBC/8000 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=rtpmap:106 CN/32000 a=rtpmap:105 CN/16000 a=rtpmap:13 CN/8000 a=rtpmap:110 telephone-event/48000 a=rtpmap:112 telephone-event/32000 a=rtpmap:113 telephone-event/16000 a=rtpmap:126 telephone-event/8000 a=ssrc:2562680978 cname:3xHd24GAm0H3VsJ4 m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 127 124 125 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:ge74 a=ice-pwd:UP1WjPiiGHQKEZwK65EyNlcw a=ice-options:trickle a=fingerprint:sha-256 11:89:04:4C:1B:57:9B:26:52:22:F5:3D:20:3F:AB:28:97:C2:01:36:1C:BA:61:BC:DA:AF:40:B2:0D:38:14:F4 a=setup:active a=mid:1 a=extmap:2 urn:ietf:params:rtp-hdrext:toffset a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=extmap:4 urn:3gpp:video-orientation a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/video-timing a=extmap:10 http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07 a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid a=sendrecv a=msid:- 74ff09f8-d59d-43ab-92f4-f531bc50d1ba a=rtcp-mux a=rtcp-rsize a=rtpmap:96 VP8/90000 a=rtcp-fb:96 goog-remb a=rtcp-fb:96 transport-cc a=rtcp-fb:96 ccm fir a=rtcp-fb:96 nack a=rtcp-fb:96 nack pli a=rtpmap:97 rtx/90000 a=fmtp:97 apt=96 a=rtpmap:98 VP9/90000 a=rtcp-fb:98 goog-remb a=rtcp-fb:98 transport-cc a=rtcp-fb:98 ccm fir a=rtcp-fb:98 nack a=rtcp-fb:98 nack pli a=fmtp:98 x-google-profile-id=0 a=rtpmap:99 rtx/90000 a=fmtp:99 apt=98 a=rtpmap:100 multiplex/90000 a=rtcp-fb:100 goog-remb a=rtcp-fb:100 transport-cc a=rtcp-fb:100 ccm fir a=rtcp-fb:100 nack a=rtcp-fb:100 nack pli a=fmtp:100 acn=VP9;x-google-profile-id=0 a=rtpmap:101 rtx/90000 a=fmtp:101 apt=100 a=rtpmap:127 red/90000 a=rtpmap:124 rtx/90000 a=fmtp:124 apt=127 a=rtpmap:125 ulpfec/90000 a=ssrc-group:FID 2319012957 4196421515 a=ssrc:2319012957 cname:3xHd24GAm0H3VsJ4 a=ssrc:4196421515 cname:3xHd24GAm0H3VsJ4
Environment