Got my video camera and mic connected into the pipeline.
But the streaming performance is awful - compared to just using gstreamer to send UDP packets to my AWS server and then proxying them into my browser.
This is my WebRTC pipeline with bad performance:
char* pipestring1 =
"webrtcbin bundle-policy=max-bundle name=sendrecv "
STUN_SERVER
"rpicamsrc preview=false bitrate=3000000 keyframe-interval=30 !
video/x-h264, framerate=15/1, profile=baseline, width=640, height=480 ! h264parse !
rtph264pay config-interval=1 ! "
"application/x-rtp,media=video,encoding-name=H264,payload=96 ! sendrecv. "
"alsasrc device=\"plughw\" provide-clock=true do-timestamp=true buffer-time=150000 !
capsfilter caps=\"audio/x-raw, format=S32LE, rate=48000\" ! audioconvert ! opusenc ! rtpopuspay ! "
"application/x-rtp,media=audio,encoding-name=OPUS,payload=97 ! sendrecv. ";
And this is the good pipeline that streams video and audio with low lag and no dropouts or lag:
gst-launch-1.0 rpicamsrc preview=false bitrate=2000000 keyframe-interval=30 !
video/x-h264, framerate=25/1, profile=baseline, width=640, height=480 ! h264parse !
rtph264pay config-interval=1 pt=96 mtu=500000 !
udpsink host=MYAWSBOX port=10008
and
gst-launch-1.0 alsasrc device="plughw" provide-clock=true do-timestamp=true buffer-time=50000 !
capsfilter caps="audio/x-raw, format=S32LE, rate=48000" ! audioconvert ! opusenc ! rtpopuspay pt=98 !
udpsink host=MYAWSBOX port=10008
Hey! Fixed!
sudo dpkg -r --force-depends "openssl"
Makes it work. After building my own OpenSSL 1.1.1k from source and installing it.
It seems to generate valid fingerprints and thus valid ICE candidates!
Now people can actually use WebRTC on the latest Raspberry Pi! If they read this story.
Now onto the next problems... my pipeline isn't getting video or something...
Aha, debug level=2 tells me more:
export GST_DEBUG=2 && ./webrtc-sendrecv 2> log.txt
0:00:11.397291339 31087 0x1690e90 WARN dtlsagent gstdtlsagent.c:190:gst_dtls_agent_init:<GstDtlsAgent@0xb2819650> Error creating SSL Context: error:14187180:SSL routines:ssl_do_config:bad value
AHA! It's a Buster issue!
"Buster version returns error error:14187180:SSL routines:ssl_do_config:bad value while stretch works fine. However if openssl package is removed from apt-get install command then buster also works fine."
https://gist.github.com/feymartynov/fdfa1a9691d77f2ef9bd7468ba9b8710
That's me:
cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
OpenSSL DTLS test seems happy:
./dtlstest certs/rootCA.pem certs/rootCA.key
1..4
# Subtest: test_dtls_unprocessed
1..2
---- START OF PACKET ----
*---- START OF RECORD ----
** Record Content-type: 22
** Record Version: feff
** Record Epoch: 0
** Record Sequence: 000000000000
** Record Length: 122
**---- START OF HANDSHAKE MESSAGE FRAGMENT ----
....
ok 22 - iteration 22
ok 2 - test_dtls_drop_records
ok 3 - test_cookie
ok 4 - test_dtls_duplicate_records
although this test had trouble with versions:
./ssl_ctx_test
1..1
# Subtest: test_set_min_max_version
1..5
ok 1 - iteration 1
ok 2 - iteration 2
ok 3 - iteration 3
# ERROR: (int) 'SSL_CTX_set_max_proto_version(ctx, t.max_version) == t.max_ok' failed @ test/ssl_ctx_test.c:48
# [1] compared to [0]
not ok 4 - iteration 4
# ERROR: (int) 'SSL_CTX_get_min_proto_version(ctx) == t.expected_min' failed @ test/ssl_ctx_test.c:50
# [771] compared to [0]
not ok 5 - iteration 5
not ok 1 - test_set_min_max_version
It is loading the latest stable OpenSSL, but still the error:
printf("OpenSSL version: %s\n", OPENSSL_VERSION_TEXT);
./webrtc-sendrecv
OpenSSL version: OpenSSL 1.1.1k 25 Mar 2021
Connecting to server...
I build OpenSSL v.1.1.1k from source, but I still get the DTLS error:
Device 08:~/Desktop/Teleport/src/gstreamer/openssl $ git checkout OpenSSL_1_1_1k
HEAD is now at fd78df59b0 Prepare for 1.1.1k release
Device 08:~/Desktop/Teleport/src/gstreamer/openssl $ ./config
Operating system: armv6l-whatever-linux2
Configuring OpenSSL version 1.1.1k (0x101010bfL) for linux-armv4
Using os-specific seed configuration
Creating configdata.pm
Creating Makefile
Device 08:~/Desktop/Teleport/src/gstreamer $ pkg-config --libs --cflags openssl
-I/usr/local/include -L/usr/local/lib -lssl -lcrypto
Device 08:~/Desktop/Teleport/src/gstreamer $ which openssl
/usr/local/bin/openssl
Device 08:~/Desktop/Teleport/src/gstreamer $ openssl version
OpenSSL 1.1.1k 25 Mar 2021 (Library: OpenSSL 1.1.1d 10 Sep 2019)
although it says Library: is still 1.1.1d ?
Device 08:~/Desktop/Teleport/src/gstreamer $ make
gcc -O0 -ggdb -Wall -fno-omit-frame-pointer -pthread -I/usr/include/gstreamer-1.0 -I/usr/include/json-glib-1.0 -I/usr/include/libsoup-2.4 -I/usr/include/libxml2 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/uuid -I/usr/include/glib-2.0 -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include webrtc-sendrecv.c -pthread -I/usr/include/gstreamer-1.0 -I/usr/include/json-glib-1.0 -I/usr/include/libsoup-2.4 -I/usr/include/libxml2 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/uuid -I/usr/include/glib-2.0 -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -lgstsdp-1.0 -lgstwebrtc-1.0 -lgstbase-1.0 -lgstreamer-1.0 -ljson-glib-1.0 -lsoup-2.4 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -o webrtc-sendrecv
Device 08:~/Desktop/Teleport/src/gstreamer $ ./webrtc-sendrecv
Connecting to server...
> GET HTTP/1.1
> Soup-Debug-Timestamp: 1617565063
> Soup-Debug: SoupSession 1 (0x1fe08f0), SoupMessage 1 (0x1e791f0), SoupSocket 1 (0x226f4a8)
> Host: 52.86.170.26:8443
> Upgrade: websocket
> Connection: Upgrade
> Sec-WebSocket-Key: 4wJlFJ9acnLp+3ONbpy1Bg==
> Sec-WebSocket-Version: 13
> Accept-Encoding: gzip, deflate
< HTTP/1.1 101 Switching Protocols
< Soup-Debug-Timestamp: 1617565063
< Soup-Debug: SoupMessage 1 (0x1e791f0)
< Upgrade: websocket
< Connection: Upgrade
< Sec-WebSocket-Accept: tHgNsGdUtpSKbvENxs3e+/VrRtw=
< Date: Sun, 04 Apr 2021 19:37:43 GMT
< Server: Python/3.6 websockets/8.1
Connected to signalling server
Registering id 123 with server
Registered with server
Waiting for connection from peer (our-id: 123)
Received OFFER_REQUEST, sending offer
PIPELINE: webrtcbin bundle-policy=max-bundle name=sendrecv stun-server=stun://stun.l.google.com:19302 rpicamsrc preview=false bitrate=2000000 keyframe-interval=30 ! video/x-h264, framerate=30/1, profile=baseline, width=1280, height=720 ! h264parse ! rtph264pay config-interval=1 pt=96 mtu=500000 ! application/x-rtp,media=video,encoding-name=H264,payload=96 ! sendrecv. audiotestsrc is-live=true wave=red-noise ! audioconvert ! audioresample ! queue ! opusenc ! rtpopuspay ! queue ! application/x-rtp,media=audio,encoding-name=OPUS,payload=97 ! sendrecv.
(webrtc-sendrecv:21884): GLib-GObject-WARNING **: 20:37:56.668: ../../../gobject/gsignal.c:3492: signal name 'create-data-channel' is invalid for instance '0x2290318' of type 'GstWebRTCBin'
Could not create data channel, is usrsctp available?
(webrtc-sendrecv:21884): GLib-GObject-WARNING **: 20:37:56.676: ../../../gobject/gsignal.c:2523: signal 'on-data-channel' is invalid for instance '0x2290318' of type 'GstWebRTCBin'
Starting pipeline
** (webrtc-sendrecv:21884): CRITICAL **: 20:38:09.796: file gstdtlsagent.c: line 192 (gst_dtls_agent_init): should not be reached
** (webrtc-sendrecv:21884): CRITICAL **: 20:38:09.804: gst_dtls_agent_set_property: assertion 'self->priv->ssl_context' failed
** (webrtc-sendrecv:21884): CRITICAL **: 20:38:09.812: gst_dtls_connection_set_property: assertion 'priv->ssl' failed
** (webrtc-sendrecv:21884): CRITICAL **: 20:38:09.843: gst_dtls_connection_set_property: assertion 'priv->ssl' failed
** (webrtc-sendrecv:21884): CRITICAL **: 20:38:10.047: gst_dtls_agent_get_certificate_pem: assertion 'GST_IS_DTLS_CERTIFICATE (self->priv->certificate)' failed
** (webrtc-sendrecv:21884): CRITICAL **: 20:38:10.051: _generate_fingerprint_from_certificate: assertion 'certificate != NULL' failed
** (webrtc-sendrecv:21884): CRITICAL **: 20:38:10.087: gst_dtls_connection_set_property: assertion 'priv->ssl' failed
** (webrtc-sendrecv:21884): CRITICAL **: 20:38:10.119: gst_dtls_connection_set_property: assertion 'priv->ssl' failed
** (webrtc-sendrecv:21884): CRITICAL **: 20:38:10.254: gst_dtls_agent_get_certificate_pem: assertion 'GST_IS_DTLS_CERTIFICATE (self->priv->certificate)' failed
** (webrtc-sendrecv:21884): CRITICAL **: 20:38:10.289: _generate_fingerprint_from_certificate: assertion 'certificate != NULL' failed
Sending offer:
v=0
o=- 8145895947794724179 0 IN IP4 0.0.0.0
s=-
t=0 0
a=ice-options:trickle
a=msid-semantic:WMS sendrecv
m=video 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=setup:actpass
a=ice-ufrag:YCXQ2GwYQkUD6R9s7aa7uzLjeKTE2FWF
a=ice-pwd:Yd9awlFiW7964jtwLs1uHmFw/atiFjRP
a=sendrecv
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 H264/90000
a=rtcp-fb:96 nack pli
a=framerate:30
a=fmtp:96 packetization-mode=1;profile-level-id=428028;sprop-parameter-sets=J0KAKJWgFAFugHiRNQ==,KM4CXIA=
a=ssrc:522581031 msid:user2982217941@host-7815b7f0 webrtctransceiver2
a=ssrc:522581031 cname:user2982217941@host-7815b7f0
a=mid:video0
a=fingerprint:sha-256 (null)
m=audio 9 UDP/TLS/RTP/SAVPF 97
c=IN IP4 0.0.0.0
a=setup:actpass
a=ice-ufrag:FIODlVktfelp5747lQsErGM84PoEQtIF
a=ice-pwd:s+qT0X4RngfLYHnB2q3RzSRzv8YDEKBN
a=sendrecv
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:97 OPUS/48000/2
a=rtcp-fb:97 nack pli
a=fmtp:97 sprop-maxcapturerate=48000;sprop-stereo=0
a=ssrc:813507912 msid:user2982217941@host-7815b7f0 webrtctransceiver3
a=ssrc:813507912 cname:user2982217941@host-7815b7f0
a=mid:audio1
a=fingerprint:sha-256 (null)
ICE gathering state changed to complete
Oh! I see. Thanks! I'll try building openssl from source, as I only have v1.1.1d - released Sept 2019, not too old, but I'll try to upgrade to v1.1.1k or v3.0.0 (the version after k).
DTLS fixes include:
Oh sorry, I see. Yes indeed it is, I took the log from the wrong place.
I have marked the self signed certificate as "Always Trust" in Keychain.
After reinstalling openSSL, and setting disable_ssl = TRUE in webrtc-sendrecv.c, making, I ran webrtc-sendrecv again, I still get the gstdtlsagent.c gst_dtls_agent_init error:
So I guess SSL_CTX_new (DTLS_method ());
is failing somehow? But I want to try even without any SSL/certs.
** (webrtc-sendrecv:16948): CRITICAL **: 18:52:51.656: file gstdtlsagent.c: line 192 (gst_dtls_agent_init): should not be reached
** (webrtc-sendrecv:16948): CRITICAL **: 18:52:51.661: gst_dtls_agent_set_property: assertion 'self->priv->ssl_context' failed
** (webrtc-sendrecv:16948): CRITICAL **: 18:52:51.666: gst_dtls_connection_set_property: assertion 'priv->ssl' failed
** (webrtc-sendrecv:16948): CRITICAL **: 18:52:51.691: gst_dtls_connection_set_property: assertion 'priv->ssl' failed
** (webrtc-sendrecv:16948): CRITICAL **: 18:52:51.813: gst_dtls_agent_get_certificate_pem: assertion 'GST_IS_DTLS_CERTIFICATE (self->priv->certificate)' failed
** (webrtc-sendrecv:16948): CRITICAL **: 18:52:51.816: _generate_fingerprint_from_certificate: assertion 'certificate != NULL' failed
Sending offer:
v=0
o=- 615161999720491601 0 IN IP4 0.0.0.0
s=-
t=0 0
a=ice-options:trickle
a=msid-semantic:WMS sendrecv
m=video 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=setup:actpass
a=ice-ufrag:Uo/U9rhjJMAo71ihc7vKLLN8YVVLSXaX
a=ice-pwd:5l6+Ca9tmywU6snf74M2TdoXp20C7yF8
a=sendrecv
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 H264/90000
a=rtcp-fb:96 nack pli
a=framerate:30
a=fmtp:96 packetization-mode=1;profile-level-id=428028;sprop-parameter-sets=J0KAKJWgFAFugHiRNQ==,KM4CXIA=
a=ssrc:3309971177 msid:user4082025218@host-a4443fa7 webrtctransceiver2
a=ssrc:3309971177 cname:user4082025218@host-a4443fa7
a=mid:video0
a=fingerprint:sha-256 (null)
ICE gathering state changed to complete
Or is there a way to bypass TLS wss:// , just use ws:// ? - I just want to see the example work, not concerned with secure sockets just yet...
Thanks for looking into this.
So, I did:
sudo apt remove openssl
sudo apt update
sudo apt install openssl
openssl version
OpenSSL 1.1.1d 10 Sep 2019
python3 simple_server.py
Starting server...
Using TLS with keys in ''
Listening on https://:8443
but still
SSL handshake failed
protocol: <asyncio.sslproto.SSLProtocol object at 0xb6650d10>
transport: <_SelectorSocketTransport fd=8 read=polling write=<idle, bufsize=0>>
Traceback (most recent call last):
File "/usr/lib/python3.7/asyncio/sslproto.py", line 625, in _on_handshake_complete
raise handshake_exc
File "/usr/lib/python3.7/asyncio/sslproto.py", line 189, in feed_ssldata
self._sslobj.do_handshake()
File "/usr/lib/python3.7/ssl.py", line 763, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] sslv3 alert certificate unknown (_ssl.c:1056)
SSL error in data received
protocol: <asyncio.sslproto.SSLProtocol object at 0xb6650d10>
transport: <_SelectorSocketTransport closing fd=8 read=idle write=<idle, bufsize=0>>
Traceback (most recent call last):
File "/usr/lib/python3.7/asyncio/sslproto.py", line 526, in data_received
ssldata, appdata = self._sslpipe.feed_ssldata(data)
File "/usr/lib/python3.7/asyncio/sslproto.py", line 189, in feed_ssldata
self._sslobj.do_handshake()
File "/usr/lib/python3.7/ssl.py", line 763, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] sslv3 alert certificate unknown (_ssl.c:1056)
Connected to ('127.0.0.1', 34168)
Registered peer '123' at ('127.0.0.1', 34168)
SSL handshake failed
protocol: <asyncio.sslproto.SSLProtocol object at 0xb602b350>
transport: <_SelectorSocketTransport fd=10 read=polling write=<idle, bufsize=0>>
Traceback (most recent call last):
File "/usr/lib/python3.7/asyncio/sslproto.py", line 625, in _on_handshake_complete
raise handshake_exc
File "/usr/lib/python3.7/asyncio/sslproto.py", line 189, in feed_ssldata
self._sslobj.do_handshake()
File "/usr/lib/python3.7/ssl.py", line 763, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] sslv3 alert certificate unknown (_ssl.c:1056)
SSL error in data received
protocol: <asyncio.sslproto.SSLProtocol object at 0xb602b350>
transport: <_SelectorSocketTransport closing fd=10 read=idle write=<idle, bufsize=0>>
Traceback (most recent call last):
File "/usr/lib/python3.7/asyncio/sslproto.py", line 526, in data_received
ssldata, appdata = self._sslpipe.feed_ssldata(data)
File "/usr/lib/python3.7/asyncio/sslproto.py", line 189, in feed_ssldata
self._sslobj.do_handshake()
File "/usr/lib/python3.7/ssl.py", line 763, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] sslv3 alert certificate unknown (_ssl.c:1056)
Sending keepalive ping to ('127.0.0.1', 34168) in recv
Ah, so I guess these errors hold some clue:
** (webrtc-sendrecv:9550): CRITICAL **: 00:19:49.812: file gstdtlsagent.c: line 192 (gst_dtls_agent_init): should not be reached
** (webrtc-sendrecv:9550): CRITICAL **: 00:19:49.825: gst_dtls_agent_set_property: assertion 'self->priv->ssl_context' failed
** (webrtc-sendrecv:9550): CRITICAL **: 00:19:49.830: gst_dtls_connection_set_property: assertion 'priv->ssl' failed
** (webrtc-sendrecv:9550): CRITICAL **: 00:19:49.851: gst_dtls_connection_set_property: assertion 'priv->ssl' failed
** (webrtc-sendrecv:9550): CRITICAL **: 00:19:49.997: gst_dtls_connection_set_property: assertion 'priv->ssl' failed
** (webrtc-sendrecv:9550): CRITICAL **: 00:19:50.021: gst_dtls_connection_set_property: assertion 'priv->ssl' failed
** (webrtc-sendrecv:9550): CRITICAL **: 00:19:50.133: gst_dtls_connection_set_property: assertion 'priv->ssl' failed
** (webrtc-sendrecv:9550): CRITICAL **: 00:19:50.165: gst_dtls_connection_set_property: assertion 'priv->ssl' failed
ICE gathering state changed to complete
** (webrtc-sendrecv:9550): CRITICAL **: 00:19:51.176: gst_dtls_agent_get_certificate_pem: assertion 'GST_IS_DTLS_CERTIFICATE (self->priv->certificate)' failed
** (webrtc-sendrecv:9550): CRITICAL **: 00:19:51.197: _generate_fingerprint_from_certificate: assertion 'certificate != NULL' failed
** (webrtc-sendrecv:9550): CRITICAL **: 00:19:51.252: gst_dtls_agent_get_certificate_pem: assertion 'GST_IS_DTLS_CERTIFICATE (self->priv->certificate)' failed
** (webrtc-sendrecv:9550): CRITICAL **: 00:19:51.314: _generate_fingerprint_from_certificate: assertion 'certificate != NULL' failed
Ok so I guess it doesn't like that "a=fingerprint:sha-256 (null)" in the SDP.
Let's see why that's null, doesn't seem like it should be. Probably something to do with the certificate again.
Do I need a description in the candidate?
https://stackoverflow.com/questions/38198751/domexception-error-processing-ice-candidate
When I launch Chrome in the console, I do get:
[87667:775:0328/202651.041810:ERROR:webrtc_sdp.cc(397)] Failed to parse: "a=fingerprint:sha-256 (null)". Reason: Failed to create fingerprint from the digest.
[87667:775:0328/202651.041862:ERROR:rtc_peer_connection.cc(1343)] ReportSetSdpUsage called on SDP that failed parsing
[87667:775:0328/202651.041904:ERROR:rtc_peer_connection_handler.cc(1485)] "Failed to parse SessionDescription. a=fingerprint:sha-256 (null) Failed to create fingerprint from the digest."
[87667:35075:0328/202651.042735:ERROR:sdp_offer_answer.cc(2280)] AddIceCandidate: ICE candidates can't be added without any remote session description.
I'll try figuring out how to add a "remote session description" in webrtc-sendrecv.c
WebRTC isn't connecting. Any ideas?
My setup is:
static const gchar *server_url = "wss://127.0.0.1:8443"
python3 simple_server.py
./webrtc-sendrecv --our-id 123
Connecting to server...
> GET HTTP/1.1
> Soup-Debug-Timestamp: 1616971576
> Soup-Debug: SoupSession 1 (0x1ae28f0), SoupMessage 1 (0x197c1f0), SoupSocket 1 (0x1da7c68)
> Host: 127.0.0.1:8443
> Upgrade: websocket
> Connection: Upgrade
> Sec-WebSocket-Key: cms8c65Fhp24ax//kUvRKQ==
> Sec-WebSocket-Version: 13
> Accept-Encoding: gzip, deflate
< HTTP/1.1 101 Switching Protocols
< Soup-Debug-Timestamp: 1616971576
< Soup-Debug: SoupMessage 1 (0x197c1f0)
< Upgrade: websocket
< Connection: Upgrade
< Sec-WebSocket-Accept: 8WEcVW/9WOe/xO0flHQXS4ObZ7E=
< Date: Sun, 28 Mar 2021 22:46:16 GMT
< Server: Python/3.7 websockets/8.1
Connected to signalling server
Registering id 123 with server
Registered with server
Waiting for connection from peer (our-id: 123)
Chrome 89 console:
webrtc.js:75 Registering with server
webrtc.js:141 Received HELLO
webrtc.js:75 Registered with server, waiting for call
webrtc.js:141 Received SESSION_OK
webrtc.js:75 Starting negotiation
webrtc.js:320 Creating RTCPeerConnection
webrtc.js:221 {"video":true,"audio":true}
webrtc.js:332 Adding local stream
webrtc.js:122 Got local description: {"type":"offer","sdp":"v=0\r\no=- 2173910550347905728 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1 2\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS ReAj57ZTLER3kE7SwQXcKVrTvm3noxxK9g8Y\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 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:Qr0R\r\na=ice-pwd:8D4gbhnwyIZN30tICgEXSPPB\r\na=ice-options:trickle\r\na=fingerprint:sha-256 49:AD:3E:E2:F6:FA:59:A9:EF:20:27:0C:AD:6E:62:9C:54:93:91:37:ED:83:44:C7:15:B3:7B:8D:49:09:C3:98\r\na=setup:actpass\r\na=mid:0\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=sendrecv\r\na=msid:ReAj57ZTLER3kE7SwQXcKVrTvm3noxxK9g8Y ae76891f-d433-4f17-92f6-22e71eaf81cb\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: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:3080386841 cname:1+pCByf+RuJ3t/F+\r\na=ssrc:3080386841 msid:ReAj57ZTLER3kE7SwQXcKVrTvm3noxxK9g8Y ae76891f-d433-4f17-92f6-22e71eaf81cb\r\na=ssrc:3080386841 mslabel:ReAj57ZTLER3kE7SwQXcKVrTvm3noxxK9g8Y\r\na=ssrc:3080386841 label:ae76891f-d433-4f17-92f6-22e71eaf81cb\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 118 114 115 116\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:Qr0R\r\na=ice-pwd:8D4gbhnwyIZN30tICgEXSPPB\r\na=ice-options:trickle\r\na=fingerprint:sha-256 49:AD:3E:E2:F6:FA:59:A9:EF:20:27:0C:AD:6E:62:9C:54:93:91:37:ED:83:44:C7:15:B3:7B:8D:49:09:C3:98\r\na=setup:actpass\r\na=mid:1\r\na=extmap:14 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:13 urn:3gpp:video-orientation\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:11 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=sendrecv\r\na=msid:ReAj57ZTLER3kE7SwQXcKVrTvm3noxxK9g8Y 57d31c79-7099-479f-b46e-c906c1083480\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 VP9/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 profile-id=2\r\na=rtpmap:101 rtx/90000\r\na=fmtp:101 apt=100\r\na=rtpmap:102 H264/90000\r\na=rtcp-fb:102 goog-remb\r\na=rtcp-fb:102 transport-cc\r\na=rtcp-fb:102 ccm fir\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:121 rtx/90000\r\na=fmtp:121 apt=102\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:120 rtx/90000\r\na=fmtp:120 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:107 rtx/90000\r\na=fmtp:107 apt=125\r\na=rtpmap:108 H264/90000\r\na=rtcp-fb:108 goog-remb\r\na=rtcp-fb:108 transport-cc\r\na=rtcp-fb:108 ccm fir\r\na=rtcp-fb:108 nack\r\na=rtcp-fb:108 nack pli\r\na=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\na=rtpmap:109 rtx/90000\r\na=fmtp:109 apt=108\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=1;profile-level-id=4d0032\r\na=rtpmap:119 rtx/90000\r\na=fmtp:119 apt=124\r\na=rtpmap:123 H264/90000\r\na=rtcp-fb:123 goog-remb\r\na=rtcp-fb:123 transport-cc\r\na=rtcp-fb:123 ccm fir\r\na=rtcp-fb:123 nack\r\na=rtcp-fb:123 nack pli\r\na=fmtp:123 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640032\r\na=rtpmap:118 rtx/90000\r\na=fmtp:118 apt=123\r\na=rtpmap:114 red/90000\r\na=rtpmap:115 rtx/90000\r\na=fmtp:115 apt=114\r\na=rtpmap:116 ulpfec/90000\r\na=ssrc-group:FID 3967799615 3821374536\r\na=ssrc:3967799615 cname:1+pCByf+RuJ3t/F+\r\na=ssrc:3967799615 msid:ReAj57ZTLER3kE7SwQXcKVrTvm3noxxK9g8Y 57d31c79-7099-479f-b46e-c906c1083480\r\na=ssrc:3967799615 mslabel:ReAj57ZTLER3kE7SwQXcKVrTvm3noxxK9g8Y\r\na=ssrc:3967799615 label:57d31c79-7099-479f-b46e-c906c1083480\r\na=ssrc:3821374536 cname:1+pCByf+RuJ3t/F+\r\na=ssrc:3821374536 msid:ReAj57ZTLER3kE7SwQXcKVrTvm3noxxK9g8Y 57d31c79-7099-479f-b46e-c906c1083480\r\na=ssrc:3821374536 mslabel:ReAj57ZTLER3kE7SwQXcKVrTvm3noxxK9g8Y\r\na=ssrc:3821374536 label:57d31c79-7099-479f-b46e-c906c1083480\r\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:Qr0R\r\na=ice-pwd:8D4gbhnwyIZN30tICgEXSPPB\r\na=ice-options:trickle\r\na=fingerprint:sha-256 49:AD:3E:E2:F6:FA:59:A9:EF:20:27:0C:AD:6E:62:9C:54:93:91:37:ED:83:44:C7:15:B3:7B:8D:49:09:C3:98\r\na=setup:actpass\r\na=mid:2\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n"}
webrtc.js:75 Sending SDP offer
webrtc.js:141 Received {"ice":{"candidate":"candidate:1 1 UDP 2013266431 fe80::ba27:ebff:fea7:63f0 39369 typ host","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:2 1 TCP 1015023359 fe80::ba27:ebff:fea7:63f0 9 typ host tcptype active","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:3 1 TCP 1010829055 fe80::ba27:ebff:fea7:63f0 37141 typ host tcptype passive","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:4 1 UDP 2013266430 fe80::ba27:ebff:fea7:63f0 40808 typ host","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:5 1 TCP 1015023358 fe80::ba27:ebff:fea7:63f0 9 typ host tcptype active","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:6 1 TCP 1010829054 fe80::ba27:ebff:fea7:63f0 41213 typ host tcptype passive","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:7 1 UDP 2013266429 192.168.1.1 59705 typ host","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:8 1 TCP 1015022335 192.168.1.1 9 typ host tcptype active","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:9 1 TCP 1010828031 192.168.1.1 45029 typ host tcptype passive","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:10 1 UDP 2013266428 192.168.1.42 40922 typ host","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:11 1 TCP 1015022591 192.168.1.42 9 typ host tcptype active","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:12 1 TCP 1010828287 192.168.1.42 51771 typ host tcptype passive","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:1 2 UDP 2013266430 fe80::ba27:ebff:fea7:63f0 39779 typ host","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:2 2 TCP 1015023358 fe80::ba27:ebff:fea7:63f0 9 typ host tcptype active","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:3 2 TCP 1010829054 fe80::ba27:ebff:fea7:63f0 53769 typ host tcptype passive","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:4 2 UDP 2013266429 fe80::ba27:ebff:fea7:63f0 45628 typ host","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:5 2 TCP 1015023357 fe80::ba27:ebff:fea7:63f0 9 typ host tcptype active","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:6 2 TCP 1010829053 fe80::ba27:ebff:fea7:63f0 54381 typ host tcptype passive","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:7 2 UDP 2013266428 192.168.1.1 42064 typ host","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:8 2 TCP 1015022334 192.168.1.1 9 typ host tcptype active","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:9 2 TCP 1010828030 192.168.1.1 54695 typ host tcptype passive","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:10 2 UDP 2013266427 192.168.1.42 58674 typ host","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:11 2 TCP 1015022590 192.168.1.42 9 typ host tcptype active","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:12 2 TCP 1010828286 192.168.1.42 39995 typ host tcptype passive","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:13 1 UDP 1677722111 98.115.20.22 59705 typ srflx raddr 192.168.1.1 rport 59705","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:14 1 TCP 847250175 98.115.20.22 9 typ srflx raddr 192.168.1.1 rport 9 tcptype active","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:15 1 TCP 843055871 98.115.20.22 45029 typ srflx raddr 192.168.1.1 rport 45029 tcptype passive","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:16 1 UDP 1677722110 98.115.20.22 40922 typ srflx raddr 192.168.1.42 rport 40922","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:17 1 TCP 847250431 98.115.20.22 9 typ srflx raddr 192.168.1.42 rport 9 tcptype active","sdpMLineIndex":0}}
webrtc.js:83 DOMException: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': Error processing ICE candidate
setError @ webrtc.js:83
Promise.catch (async)
onIncomingICE @ webrtc.js:137
onServerMessage @ webrtc.js:185
webrtc.js:141 Received {"ice":{"candidate":"candidate:1 1 UDP 2013266431 fe80::ba27:ebff:fea7:63f0 38969 typ host","sdpMLineIndex":1}}
Session from '1948' (('192.168.1.69', 64134)) to '123' (('127.0.0.1', 59928))
1948 -> 123: {"sdp":{"type":"offer","sdp":"v=0\r\no=- 7118768580569837897 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1 2\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS uItLKSLFVM7b7l3lcCFt8ypBRw3Q0XWIzLnI\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 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:w9mG\r\na=ice-pwd:G8UTZgayO3sjAO9MDytS8PHt\r\na=ice-options:trickle\r\na=fingerprint:sha-256 96:4D:54:10:48:7C:2B:B9:C1:9C:74:A7:61:34:CA:7D:DA:B1:40:AA:DC:CE:B6:90:6E:ED:D3:98:30:1F:89:15\r\na=setup:actpass\r\na=mid:0\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=sendrecv\r\na=msid:uItLKSLFVM7b7l3lcCFt8ypBRw3Q0XWIzLnI 2ce7dda9-834d-4284-a5f2-197c201235a5\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: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:2878184343 cname:ydyeYEclWg+edTmm\r\na=ssrc:2878184343 msid:uItLKSLFVM7b7l3lcCFt8ypBRw3Q0XWIzLnI 2ce7dda9-834d-4284-a5f2-197c201235a5\r\na=ssrc:2878184343 mslabel:uItLKSLFVM7b7l3lcCFt8ypBRw3Q0XWIzLnI\r\na=ssrc:2878184343 label:2ce7dda9-834d-4284-a5f2-197c201235a5\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 118 114 115 116\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:w9mG\r\na=ice-pwd:G8UTZgayO3sjAO9MDytS8PHt\r\na=ice-options:trickle\r\na=fingerprint:sha-256 96:4D:54:10:48:7C:2B:B9:C1:9C:74:A7:61:34:CA:7D:DA:B1:40:AA:DC:CE:B6:90:6E:ED:D3:98:30:1F:89:15\r\na=setup:actpass\r\na=mid:1\r\na=extmap:14 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:13 urn:3gpp:video-orientation\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:11 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=sendrecv\r\na=msid:uItLKSLFVM7b7l3lcCFt8ypBRw3Q0XWIzLnI e4256668-6872-4049-a703-d4f1fdf216da\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 VP9/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 profile-id=2\r\na=rtpmap:101 rtx/90000\r\na=fmtp:101 apt=100\r\na=rtpmap:102 H264/90000\r\na=rtcp-fb:102 goog-remb\r\na=rtcp-fb:102 transport-cc\r\na=rtcp-fb:102 ccm fir\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:121 rtx/90000\r\na=fmtp:121 apt=102\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:120 rtx/90000\r\na=fmtp:120 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:107 rtx/90000\r\na=fmtp:107 apt=125\r\na=rtpmap:108 H264/90000\r\na=rtcp-fb:108 goog-remb\r\na=rtcp-fb:108 transport-cc\r\na=rtcp-fb:108 ccm fir\r\na=rtcp-fb:108 nack\r\na=rtcp-fb:108 nack pli\r\na=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\na=rtpmap:109 rtx/90000\r\na=fmtp:109 apt=108\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=1;profile-level-id=4d0032\r\na=rtpmap:119 rtx/90000\r\na=fmtp:119 apt=124\r\na=rtpmap:123 H264/90000\r\na=rtcp-fb:123 goog-remb\r\na=rtcp-fb:123 transport-cc\r\na=rtcp-fb:123 ccm fir\r\na=rtcp-fb:123 nack\r\na=rtcp-fb:123 nack pli\r\na=fmtp:123 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640032\r\na=rtpmap:118 rtx/90000\r\na=fmtp:118 apt=123\r\na=rtpmap:114 red/90000\r\na=rtpmap:115 rtx/90000\r\na=fmtp:115 apt=114\r\na=rtpmap:116 ulpfec/90000\r\na=ssrc-group:FID 1081473563 999497463\r\na=ssrc:1081473563 cname:ydyeYEclWg+edTmm\r\na=ssrc:1081473563 msid:uItLKSLFVM7b7l3lcCFt8ypBRw3Q0XWIzLnI e4256668-6872-4049-a703-d4f1fdf216da\r\na=ssrc:1081473563 mslabel:uItLKSLFVM7b7l3lcCFt8ypBRw3Q0XWIzLnI\r\na=ssrc:1081473563 label:e4256668-6872-4049-a703-d4f1fdf216da\r\na=ssrc:999497463 cname:ydyeYEclWg+edTmm\r\na=ssrc:999497463 msid:uItLKSLFVM7b7l3lcCFt8ypBRw3Q0XWIzLnI e4256668-6872-4049-a703-d4f1fdf216da\r\na=ssrc:999497463 mslabel:uItLKSLFVM7b7l3lcCFt8ypBRw3Q0XWIzLnI\r\na=ssrc:999497463 label:e4256668-6872-4049-a703-d4f1fdf216da\r\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:w9mG\r\na=ice-pwd:G8UTZgayO3sjAO9MDytS8PHt\r\na=ice-options:trickle\r\na=fingerprint:sha-256 96:4D:54:10:48:7C:2B:B9:C1:9C:74:A7:61:34:CA:7D:DA:B1:40:AA:DC:CE:B6:90:6E:ED:D3:98:30:1F:89:15\r\na=setup:actpass\r\na=mid:2\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n"}}
1948 -> 123: {"ice":{"candidate":"candidate:1008872818 1 udp 2113937151 32c89431-1e55-4ad7-9b93-79e6acc4a3f3.local 55462 typ host generation 0 ufrag w9mG network-cost 999","sdpMid":"0","sdpMLineIndex":0}}
1948 -> 123: {"ice":{"candidate":"candidate:1008872818 1 udp 2113937151 32c89431-1e55-4ad7-9b93-79e6acc4a3f3.local 51506 typ host generation 0 ufrag w9mG network-cost 999","sdpMid":"1","sdpMLineIndex":1}}
1948 -> 123: {"ice":{"candidate":"candidate:1008872818 1 udp 2113937151 32c89431-1e55-4ad7-9b93-79e6acc4a3f3.local 52153 typ host generation 0 ufrag w9mG network-cost 999","sdpMid":"2","sdpMLineIndex":2}}
1948 -> 123: {"ice":{"candidate":"candidate:842163049 1 udp 1677729535 98.115.20.22 52153 typ srflx raddr 0.0.0.0 rport 0 generation 0 ufrag w9mG network-cost 999","sdpMid":"2","sdpMLineIndex":2}}
1948 -> 123: {"ice":{"candidate":"candidate:842163049 1 udp 1677729535 98.115.20.22 51506 typ srflx raddr 0.0.0.0 rport 0 generation 0 ufrag w9mG network-cost 999","sdpMid":"1","sdpMLineIndex":1}}
1948 -> 123: {"ice":{"candidate":"candidate:842163049 1 udp 1677729535 98.115.20.22 55462 typ srflx raddr 0.0.0.0 rport 0 generation 0 ufrag w9mG network-cost 999","sdpMid":"0","sdpMLineIndex":0}}
Sending keepalive ping to ('127.0.0.1', 59928) in recv
123 -> 1948: {"ice":{"candidate":"candidate:1 1 UDP 2013266431 fe80::ba27:ebff:fea7:63f0 48318 typ host","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:2 1 TCP 1015023359 fe80::ba27:ebff:fea7:63f0 9 typ host tcptype active","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:3 1 TCP 1010829055 fe80::ba27:ebff:fea7:63f0 41353 typ host tcptype passive","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:4 1 UDP 2013266430 fe80::ba27:ebff:fea7:63f0 46798 typ host","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:5 1 TCP 1015023358 fe80::ba27:ebff:fea7:63f0 9 typ host tcptype active","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:6 1 TCP 1010829054 fe80::ba27:ebff:fea7:63f0 52601 typ host tcptype passive","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:7 1 UDP 2013266429 192.168.1.1 48467 typ host","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:8 1 TCP 1015022335 192.168.1.1 9 typ host tcptype active","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:9 1 TCP 1010828031 192.168.1.1 37799 typ host tcptype passive","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:10 1 UDP 2013266428 192.168.1.42 38759 typ host","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:11 1 TCP 1015022591 192.168.1.42 9 typ host tcptype active","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:12 1 TCP 1010828287 192.168.1.42 51663 typ host tcptype passive","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:1 2 UDP 2013266430 fe80::ba27:ebff:fea7:63f0 52795 typ host","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:2 2 TCP 1015023358 fe80::ba27:ebff:fea7:63f0 9 typ host tcptype active","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:3 2 TCP 1010829054 fe80::ba27:ebff:fea7:63f0 54125 typ host tcptype passive","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:4 2 UDP 2013266429 fe80::ba27:ebff:fea7:63f0 46755 typ host","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:5 2 TCP 1015023357 fe80::ba27:ebff:fea7:63f0 9 typ host tcptype active","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:6 2 TCP 1010829053 fe80::ba27:ebff:fea7:63f0 60513 typ host tcptype passive","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:7 2 UDP 2013266428 192.168.1.1 48616 typ host","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:8 2 TCP 1015022334 192.168.1.1 9 typ host tcptype active","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:9 2 TCP 1010828030 192.168.1.1 53695 typ host tcptype passive","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:10 2 UDP 2013266427 192.168.1.42 46392 typ host","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:11 2 TCP 1015022590 192.168.1.42 9 typ host tcptype active","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:12 2 TCP 1010828286 192.168.1.42 60141 typ host tcptype passive","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:1 1 UDP 2013266431 fe80::ba27:ebff:fea7:63f0 55611 typ host","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:2 1 TCP 1015023359 fe80::ba27:ebff:fea7:63f0 9 typ host tcptype active","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:3 1 TCP 1010829055 fe80::ba27:ebff:fea7:63f0 51635 typ host tcptype passive","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:4 1 UDP 2013266430 fe80::ba27:ebff:fea7:63f0 49275 typ host","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:5 1 TCP 1015023358 fe80::ba27:ebff:fea7:63f0 9 typ host tcptype active","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:6 1 TCP 1010829054 fe80::ba27:ebff:fea7:63f0 60767 typ host tcptype passive","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:13 1 UDP 1677722111 98.115.20.22 48467 typ srflx raddr 192.168.1.1 rport 48467","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:14 1 TCP 847250175 98.115.20.22 9 typ srflx raddr 192.168.1.1 rport 9 tcptype active","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:7 1 UDP 2013266429 192.168.1.1 46826 typ host","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:13 2 UDP 1677722110 98.115.20.22 57146 typ srflx raddr 192.168.1.1 rport 57146","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:14 2 TCP 847250174 98.115.20.22 9 typ srflx raddr 192.168.1.1 rport 9 tcptype active","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:15 2 TCP 843055870 98.115.20.22 59885 typ srflx raddr 192.168.1.1 rport 59885 tcptype passive","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:13 2 UDP 1677722110 98.115.20.22 48616 typ srflx raddr 192.168.1.1 rport 48616","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:13 1 UDP 1677722111 98.115.20.22 46826 typ srflx raddr 192.168.1.1 rport 46826","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:14 1 TCP 847250175 98.115.20.22 9 typ srflx raddr 192.168.1.1 rport 9 tcptype active","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:15 1 TCP 843055871 98.115.20.22 41259 typ srflx raddr 192.168.1.1 rport 41259 tcptype passive","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:15 1 TCP 843055871 98.115.20.22 37799 typ srflx raddr 192.168.1.1 rport 37799 tcptype passive","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:14 2 TCP 847250174 98.115.20.22 9 typ srflx raddr 192.168.1.1 rport 9 tcptype active","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:8 1 TCP 1015022335 192.168.1.1 9 typ host tcptype active","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:15 2 TCP 843055870 98.115.20.22 53695 typ srflx raddr 192.168.1.1 rport 53695 tcptype passive","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:16 1 UDP 1677722110 98.115.20.22 38759 typ srflx raddr 192.168.1.42 rport 38759","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:17 1 TCP 847250431 98.115.20.22 9 typ srflx raddr 192.168.1.42 rport 9 tcptype active","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:18 1 TCP 843056127 98.115.20.22 51663 typ srflx raddr 192.168.1.42 rport 51663 tcptype passive","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:9 1 TCP 1010828031 192.168.1.1 41259 typ host tcptype passive","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:10 1 UDP 2013266428 192.168.1.42 53109 typ host","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:11 1 TCP 1015022591 192.168.1.42 9 typ host tcptype active","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:12 1 TCP 1010828287 192.168.1.42 36193 typ host tcptype passive","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:1 2 UDP 2013266430 fe80::ba27:ebff:fea7:63f0 53469 typ host","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:2 2 TCP 1015023358 fe80::ba27:ebff:fea7:63f0 9 typ host tcptype active","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:3 2 TCP 1010829054 fe80::ba27:ebff:fea7:63f0 34791 typ host tcptype passive","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:4 2 UDP 2013266429 fe80::ba27:ebff:fea7:63f0 43304 typ host","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:5 2 TCP 1015023357 fe80::ba27:ebff:fea7:63f0 9 typ host tcptype active","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:6 2 TCP 1010829053 fe80::ba27:ebff:fea7:63f0 46019 typ host tcptype passive","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:7 2 UDP 2013266428 192.168.1.1 57146 typ host","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:8 2 TCP 1015022334 192.168.1.1 9 typ host tcptype active","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:9 2 TCP 1010828030 192.168.1.1 59885 typ host tcptype passive","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:10 2 UDP 2013266427 192.168.1.42 58645 typ host","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:16 1 UDP 1677722110 98.115.20.22 53109 typ srflx raddr 192.168.1.42 rport 53109","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:17 1 TCP 847250431 98.115.20.22 9 typ srflx raddr 192.168.1.42 rport 9 tcptype active","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:11 2 TCP 1015022590 192.168.1.42 9 typ host tcptype active","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:18 1 TCP 843056127 98.115.20.22 36193 typ srflx raddr 192.168.1.42 rport 36193 tcptype passive","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:16 2 UDP 1677722109 98.115.20.22 46392 typ srflx raddr 192.168.1.42 rport 46392","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:17 2 TCP 847250430 98.115.20.22 9 typ srflx raddr 192.168.1.42 rport 9 tcptype active","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:18 2 TCP 843056126 98.115.20.22 60141 typ srflx raddr 192.168.1.42 rport 60141 tcptype passive","sdpMLineIndex":0}}
123 -> 1948: {"ice":{"candidate":"candidate:16 2 UDP 1677722109 98.115.20.22 58645 typ srflx raddr 192.168.1.42 rport 58645","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:17 2 TCP 847250430 98.115.20.22 9 typ srflx raddr 192.168.1.42 rport 9 tcptype active","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:18 2 TCP 843056126 98.115.20.22 41135 typ srflx raddr 192.168.1.42 rport 41135 tcptype passive","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:12 2 TCP 1010828286 192.168.1.42 41135 typ host tcptype passive","sdpMLineIndex":1}}
123 -> 1948: {"ice":{"candidate":"candidate:1 1 UDP 2013266431 fe80::ba27:ebff:fea7:63f0 33780 typ host","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:2 1 TCP 1015023359 fe80::ba27:ebff:fea7:63f0 9 typ host tcptype active","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:3 1 TCP 1010829055 fe80::ba27:ebff:fea7:63f0 40575 typ host tcptype passive","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:4 1 UDP 2013266430 fe80::ba27:ebff:fea7:63f0 54087 typ host","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:5 1 TCP 1015023358 fe80::ba27:ebff:fea7:63f0 9 typ host tcptype active","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:6 1 TCP 1010829054 fe80::ba27:ebff:fea7:63f0 51669 typ host tcptype passive","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:7 1 UDP 2013266429 192.168.1.1 42143 typ host","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:8 1 TCP 1015022335 192.168.1.1 9 typ host tcptype active","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:9 1 TCP 1010828031 192.168.1.1 60925 typ host tcptype passive","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:10 1 UDP 2013266428 192.168.1.42 40751 typ host","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:11 1 TCP 1015022591 192.168.1.42 9 typ host tcptype active","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:12 1 TCP 1010828287 192.168.1.42 43695 typ host tcptype passive","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:1 2 UDP 2013266430 fe80::ba27:ebff:fea7:63f0 34576 typ host","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:2 2 TCP 1015023358 fe80::ba27:ebff:fea7:63f0 9 typ host tcptype active","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:3 2 TCP 1010829054 fe80::ba27:ebff:fea7:63f0 42691 typ host tcptype passive","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:4 2 UDP 2013266429 fe80::ba27:ebff:fea7:63f0 59267 typ host","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:5 2 TCP 1015023357 fe80::ba27:ebff:fea7:63f0 9 typ host tcptype active","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:6 2 TCP 1010829053 fe80::ba27:ebff:fea7:63f0 41013 typ host tcptype passive","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:7 2 UDP 2013266428 192.168.1.1 51682 typ host","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:8 2 TCP 1015022334 192.168.1.1 9 typ host tcptype active","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:9 2 TCP 1010828030 192.168.1.1 53365 typ host tcptype passive","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:10 2 UDP 2013266427 192.168.1.42 38455 typ host","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:11 2 TCP 1015022590 192.168.1.42 9 typ host tcptype active","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:12 2 TCP 1010828286 192.168.1.42 59119 typ host tcptype passive","sdpMLineIndex":2}}
123 -> 1948: {"sdp":{"type":"answer","sdp":"v=0\r\no=- 7118768580569837897 0 IN IP4 0.0.0.0\r\ns=-\r\nt=0 0\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:tkifcqK7soUoyuSB50tU7/IJ4KIMT1jV\r\na=ice-pwd:MaTNFhuY+GMvEBPk8TA/yEKkB/klYEtC\r\na=mid:0\r\na=rtcp-mux\r\na=rtpmap:111 OPUS/48000/2\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=recvonly\r\na=setup:active\r\na=fingerprint:sha-256 (null)\r\nm=video 9 UDP/TLS/RTP/SAVPF 96\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:8rc1hAL36bLp78H+pp3jLIw8vdFW1SJS\r\na=ice-pwd:XaqwQb5kEM6nF/oIAUTDoyDZi5PFyvZz\r\na=mid:1\r\na=rtcp-mux\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 nack pli\r\na=rtcp-fb:96 ccm fir\r\na=framerate:30\r\na=ssrc:2368936019 msid:user148832059@host-43c9a763 webrtctransceiver0\r\na=ssrc:2368936019 cname:user148832059@host-43c9a763\r\na=sendrecv\r\na=setup:active\r\na=fingerprint:sha-256 (null)\r\nm=application 0 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:w9mG\r\na=ice-pwd:G8UTZgayO3sjAO9MDytS8PHt\r\na=ice-options:trickle\r\na=fingerprint:sha-256 96:4D:54:10:48:7C:2B:B9:C1:9C:74:A7:61:34:CA:7D:DA:B1:40:AA:DC:CE:B6:90:6E:ED:D3:98:30:1F:89:15\r\na=setup:actpass\r\na=mid:2\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n"}}
123 -> 1948: {"ice":{"candidate":"candidate:13 1 UDP 1677722111 98.115.20.22 42143 typ srflx raddr 192.168.1.1 rport 42143","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:14 1 TCP 847250175 98.115.20.22 9 typ srflx raddr 192.168.1.1 rport 9 tcptype active","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:15 1 TCP 843055871 98.115.20.22 60925 typ srflx raddr 192.168.1.1 rport 60925 tcptype passive","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:16 1 UDP 1677722110 98.115.20.22 40751 typ srflx raddr 192.168.1.42 rport 40751","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:17 1 TCP 847250431 98.115.20.22 9 typ srflx raddr 192.168.1.42 rport 9 tcptype active","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:18 1 TCP 843056127 98.115.20.22 43695 typ srflx raddr 192.168.1.42 rport 43695 tcptype passive","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:13 2 UDP 1677722110 98.115.20.22 51682 typ srflx raddr 192.168.1.1 rport 51682","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:14 2 TCP 847250174 98.115.20.22 9 typ srflx raddr 192.168.1.1 rport 9 tcptype active","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:15 2 TCP 843055870 98.115.20.22 53365 typ srflx raddr 192.168.1.1 rport 53365 tcptype passive","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:16 2 UDP 1677722109 98.115.20.22 38455 typ srflx raddr 192.168.1.42 rport 38455","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:17 2 TCP 847250430 98.115.20.22 9 typ srflx raddr 192.168.1.42 rport 9 tcptype active","sdpMLineIndex":2}}
123 -> 1948: {"ice":{"candidate":"candidate:18 2 TCP 843056126 98.115.20.22 59119 typ srflx raddr 192.168.1.42 rport 59119 tcptype passive","sdpMLineIndex":2}}
When I run:
generate_cert.sh
python3 simple_server.py
Starting server...
Using TLS with keys in ''
Listening on https://:8443
Then go to:
https://192.168.1.1:8443/
I get the classic:
Your connection is not private
NET::ERR_CERT_INVALID
...the website sent back unusual and incorrect credentials. This may happen when an attacker is trying to pretend to be 192.168.1.1, or a Wi-Fi sign-in screen has interrupted the connection. Your information is still secure because Google Chrome stopped the connection before any data was exchanged.
You cannot visit 192.168.1.1 at the moment because the website sent scrambled credentials that Google Chrome cannot process. Network errors and attacks are usually temporary, so this page will probably work later.
And in the console:
SSL handshake failed
protocol: <asyncio.sslproto.SSLProtocol object at 0xb607b2f0>
transport: <_SelectorSocketTransport fd=8 read=polling write=<idle, bufsize=0>>
Traceback (most recent call last):
File "/usr/lib/python3.7/asyncio/sslproto.py", line 625, in _on_handshake_complete
raise handshake_exc
File "/usr/lib/python3.7/asyncio/sslproto.py", line 189, in feed_ssldata
self._sslobj.do_handshake()
File "/usr/lib/python3.7/ssl.py", line 763, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] sslv3 alert certificate unknown (_ssl.c:1056)
The cert seems fine:
-rw------- 1 pi pi 3272 Mar 28 16:38 key.pem
-rw-r--r-- 1 pi pi 1814 Mar 28 16:38 cert.pem
-----BEGIN CERTIFICATE-----
MIIFDTCCAvWgAwIBAgIUWd+RmgJ
...etc
-----BEGIN PRIVATE KEY-----
MIIJQgIBADANBgkqhkiG9w0BAQEFAA
...etc
Python 3.7 SSL:
>>> print(ssl)
<module 'ssl' from '/usr/lib/python3.7/ssl.py'>
Chrome 89 for Mac.
Why is this?
Ok so chrome (and Safari) don't like the cut of the jib of the generated example.com cert:
example.com Root certificate not trusted
I tried this and generated:
update-ca-certificates
sudo apt-get install ca-certificates
I had to open Keychain access, click Certificates, and importing the cert.pem in there and then setting it to "Always trust"
It worked, but still Chrome complained that it doesn't have any Subject Alternative Names, but at least it works now.
When I run:
generate_cert.sh
python3 simple_server.py
Starting server...
Using TLS with keys in ''
Listening on https://:8443
Then go to:
https://192.168.1.1:8443/
I get the classic:
Your connection is not private
NET::ERR_CERT_INVALID
...the website sent back unusual and incorrect credentials. This may happen when an attacker is trying to pretend to be 192.168.1.1, or a Wi-Fi sign-in screen has interrupted the connection. Your information is still secure because Google Chrome stopped the connection before any data was exchanged.
You cannot visit 192.168.1.1 at the moment because the website sent scrambled credentials that Google Chrome cannot process. Network errors and attacks are usually temporary, so this page will probably work later.
And in the console:
SSL handshake failed
protocol: <asyncio.sslproto.SSLProtocol object at 0xb607b2f0>
transport: <_SelectorSocketTransport fd=8 read=polling write=<idle, bufsize=0>>
Traceback (most recent call last):
File "/usr/lib/python3.7/asyncio/sslproto.py", line 625, in _on_handshake_complete
raise handshake_exc
File "/usr/lib/python3.7/asyncio/sslproto.py", line 189, in feed_ssldata
self._sslobj.do_handshake()
File "/usr/lib/python3.7/ssl.py", line 763, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] sslv3 alert certificate unknown (_ssl.c:1056)
The cert seems fine:
-rw------- 1 pi pi 3272 Mar 28 16:38 key.pem
-rw-r--r-- 1 pi pi 1814 Mar 28 16:38 cert.pem
-----BEGIN CERTIFICATE-----
MIIFDTCCAvWgAwIBAgIUWd+RmgJ
...etc
-----BEGIN PRIVATE KEY-----
MIIJQgIBADANBgkqhkiG9w0BAQEFAA
...etc
Python 3.7 SSL:
>>> print(ssl)
<module 'ssl' from '/usr/lib/python3.7/ssl.py'>
Chrome 89 for Mac.
Why is this?