dusty-nv / jetson-containers

Machine Learning Containers for NVIDIA Jetson and JetPack-L4T
MIT License
2.41k stars 485 forks source link

local_llm: no way to change or disable ICE server for webrtc #535

Open TadayukiOkada opened 6 months ago

TadayukiOkada commented 6 months ago

I'd like to run live llava completely locally on Jetson including a web browser. However, if I turn off wifi before starting live llava, the video won't play on the browser. If I turn off wifi after starting it, the video continues to play. I'm guessing this is because the default ICE server is set to google's STUN server. I tried to find a way to change or disable it but it seems there's no way to change it using option flags right now. I'm willing to create a PR for this, but not sure what's the cleanest way to set it.

dusty-nv commented 6 months ago

@TadayukiOkada it looks like these can be disabled like this: https://stackoverflow.com/questions/30742431/webrtc-on-isolated-lan-without-ice-stun-turn-server

That is on the javascript/client side. However on the server side, I'm not sure if gstreamer webrtcbin will work without STUN server. Here are the references to it in jetson_utils: https://github.com/search?q=repo%3Adusty-nv%2Fjetson-utils%20stun&type=code

I would get jetson_utils working first without STUN, and then the javascript in NanoLLM can be updated to reflect it. It may be tricky however to support both ways.

manhntm3 commented 6 months ago

Hi @dusty-nv,

I've tried to disable STUN server on both javascript and gstreamer by commenting out the STUN part and it works when the server(gstreamer) side is not connected to Internet.

However, it still fails to connect when viewed from a PC (same LAN) that doesn't connect to the Internet.

TadayukiOkada commented 6 months ago

@manhntm3 have you tried setting up a local TURN/STUN server such as coturn? It shouldn't be necessary but it might be helpful to move forward.

POLROTY commented 6 months ago

@manhntm3 I am having the same problem, I can't view the video from an other device on the lan if not connected to internet. My jetson also crashes because the queue frames fills up all the RAM. Have you found a fix?

Rz-Rz commented 5 months ago

@manhntm3 I am also having the same problem. This is very problematic.

dusty-nv commented 5 months ago

Can you try this attempted fix from jetson-utils? https://github.com/dusty-nv/jetson-utils/commit/72c4e095f0575091992a5803d79af08e138e3369

video-viewer /dev/video0 webrtc://@:8554/output --stun-server disabled

Then navigate your browser to http://JETSON_IP:8554

When it is set to disabled, I set the ice-servers in the built-in HTML/Javascript to empty array as suggested here:

https://groups.google.com/g/discuss-webrtc/c/s7WsDPjHIj4/m/v8a6jPWtF8QJ

It worked for me both with it disabled and the default server (stun.l.google.com:19302)

The web-side changes are only for the jetson-utils built-in debug viewer on port 8554 so far.

manhntm3 commented 5 months ago

For me, it only works when the computer that views Jetson's webpage is connected to the Internet. If we disable the Internet from the laptop that runs the browser and see Jetson's webpage through port 8554, it still doesn't work.

Screenshot 2024-06-24 at 13 15 52
dusty-nv commented 5 months ago

Can you confirm in the clientside HTML/Javascript that the ICE stun servers are in fact being set to empty?


From: Manh Nguyen @.> Sent: Monday, June 24, 2024 2:18:21 AM To: dusty-nv/jetson-containers @.> Cc: Dustin Franklin @.>; Mention @.> Subject: Re: [dusty-nv/jetson-containers] local_llm: no way to change or disable ICE server for webrtc (Issue #535)

For me, it only works when the computer that views Jetson's webpage is connected to the Internet. If we disable the Internet from the laptop that runs the browser and see Jetson's webpage through port 8554, it still doesn't work. Screenshot.2024-06-24.at.13.15.52.png (view on web)https://github.com/dusty-nv/jetson-containers/assets/53960609/a21f44f0-ea48-4201-9883-3037224456f7

— Reply to this email directly, view it on GitHubhttps://github.com/dusty-nv/jetson-containers/issues/535#issuecomment-2185698667, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ADVEGK5HQVZV2W56CYZQUNLZI6223AVCNFSM6AAAAABIEEFNGSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCOBVGY4TQNRWG4. You are receiving this because you were mentioned.Message ID: @.***>

POLROTY commented 5 months ago

It seems to be working for me, I made a new connection mechanism client side directly with a websocket and with a local adapter-latest.js, as I think this import doesn't work without access to the internet : line 44 of WebrtcServer.cpp

manhntm3 commented 5 months ago

Can you confirm in the clientside HTML/Javascript that the ICE stun servers are in fact being set to empty? ____ From: Manh Nguyen @.> Sent: Monday, June 24, 2024 2:18:21 AM To: dusty-nv/jetson-containers @.> Cc: Dustin Franklin @.>; Mention @.> Subject: Re: [dusty-nv/jetson-containers] local_llm: no way to change or disable ICE server for webrtc (Issue #535) For me, it only works when the computer that views Jetson's webpage is connected to the Internet. If we disable the Internet from the laptop that runs the browser and see Jetson's webpage through port 8554, it still doesn't work. Screenshot.2024-06-24.at.13.15.52.png (view on web)https://github.com/dusty-nv/jetson-containers/assets/53960609/a21f44f0-ea48-4201-9883-3037224456f7 — Reply to this email directly, view it on GitHub<#535 (comment)>, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ADVEGK5HQVZV2W56CYZQUNLZI6223AVCNFSM6AAAAABIEEFNGSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCOBVGY4TQNRWG4. You are receiving this because you were mentioned.Message ID: @.***>

Yes, I can confirm the clientside HTML/Javascript is being set to empty. Screenshot 2024-06-26 at 17 56 49

What I did to stop Internet from my laptop and keep the LAN connection is change to static IP and empty the router box. It might affect only on my side. On your side, does the WebRTC video work when you disable Internet on the client machine or both Jetson and client?

POLROTY commented 5 months ago

Update, I tried again by connecting the jetson and and other computer with an ethernet cable and without an internet connection on either side and it doesn't seem to work offline in this configuration... I have this in the logs: root@ubuntu:/jetson-utils/build/aarch64/bin# video-viewer /dev/video0 webrtc://@:8554/output --stun-server disabled [gstreamer] initialized gstreamer, version 1.16.3.0 [gstreamer] gstCamera -- attempting to create device v4l2:///dev/video0 [gstreamer] gstCamera -- found v4l2 device: USB3.0 Capture: USB3.0 Capture [gstreamer] v4l2-proplist, device.path=(string)/dev/video0, udev-probed=(boolean)false, device.api=(string)v4l2, v4l2.device.driver=(string)uvcvideo, v4l2.device.card=(string)"USB3.0\ Capture:\ USB3.0\ Capture", v4l2.device.bus_info=(string)usb-3610000.xhci-3.4, v4l2.device.version=(uint)330432, v4l2.device.capabilities=(uint)2225078273, v4l2.device.device_caps=(uint)69206017; [gstreamer] gstCamera -- found 22 caps for v4l2 device /dev/video0 [gstreamer] [0] video/x-raw, format=(string)YUY2, width=(int)2560, height=(int)1440, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 20/1, 10/1 }; [gstreamer] [1] video/x-raw, format=(string)YUY2, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] [2] video/x-raw, format=(string)YUY2, width=(int)1280, height=(int)1024, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] [3] video/x-raw, format=(string)YUY2, width=(int)1280, height=(int)960, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] [4] video/x-raw, format=(string)YUY2, width=(int)1360, height=(int)768, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] [5] video/x-raw, format=(string)YUY2, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] [6] video/x-raw, format=(string)YUY2, width=(int)1024, height=(int)768, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] [7] video/x-raw, format=(string)YUY2, width=(int)800, height=(int)600, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] [8] video/x-raw, format=(string)YUY2, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] [9] video/x-raw, format=(string)YUY2, width=(int)720, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] [10] video/x-raw, format=(string)YUY2, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] [11] image/jpeg, width=(int)2560, height=(int)1440, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 20/1, 10/1 }; [gstreamer] [12] image/jpeg, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] [13] image/jpeg, width=(int)1280, height=(int)1024, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] [14] image/jpeg, width=(int)1280, height=(int)960, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] [15] image/jpeg, width=(int)1360, height=(int)768, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] [16] image/jpeg, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] [17] image/jpeg, width=(int)1024, height=(int)768, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] [18] image/jpeg, width=(int)800, height=(int)600, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] [19] image/jpeg, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] [20] image/jpeg, width=(int)720, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] [21] image/jpeg, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 60/1, 50/1, 30/1, 20/1, 10/1 }; [gstreamer] gstCamera -- selected device profile: codec=raw format=yuyv width=1280 height=720 framerate=30 [gstreamer] gstCamera pipeline string: [gstreamer] v4l2src device=/dev/video0 do-timestamp=true ! video/x-raw, format=(string)YUY2, width=(int)1280, height=(int)720, framerate=30/1 ! appsink name=mysink sync=false [gstreamer] gstCamera successfully created device v4l2:///dev/video0 [video] created gstCamera from v4l2:///dev/video0

gstCamera video options:

-- URI: v4l2:///dev/video0

(video-viewer:427): GLib-GObject-WARNING **: 13:56:59.411: g_object_set_is_valid_property: object class 'GstWebRTCBin' has no property named 'latency'

(video-viewer:427): GLib-GObject-WARNING **: 13:56:59.412: g_object_set_is_valid_property: object class 'WebRTCTransceiver' has no property named 'direction' [gstreamer] gstreamer changed state from NULL to READY ==> queue-0 [gstreamer] gstreamer stream status CREATE ==> src [gstreamer] gstreamer stream status ENTER ==> src [gstreamer] gstreamer changed state from READY to PAUSED ==> queue-0 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> queue-0 [gstreamer] gstreamer changed state from NULL to READY ==> rtpbin [gstreamer] gstreamer changed state from NULL to READY ==> webrtcbin-0 [gstreamer] gstreamer changed state from READY to PAUSED ==> rtpbin [gstreamer] gstreamer changed state from READY to PAUSED ==> webrtcbin-0 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> rtpbin [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> webrtcbin-0 [webrtc] negotiation offer created: v=0 o=- 5165330002172136569 0 IN IP4 0.0.0.0 s=- t=0 0 a=ice-options:trickle m=video 9 UDP/TLS/RTP/SAVPF 96 c=IN IP4 0.0.0.0 a=setup:actpass a=ice-ufrag:cKpqtlZMAwVNOmJ1U2/QN7bqCRwB33tv a=ice-pwd:wJwTmi7hWwjsEYsmaUMrpD/3fc0QFkfh a=rtcp-mux a=rtcp-rsize a=sendrecv a=rtpmap:96 H264/90000 a=rtcp-fb:96 nack pli a=framerate:30 a=fmtp:96 packetization-mode=1;sprop-parameter-sets=Z0JAH5ZUAoAt01AAAFQAAAMABAAAAwDyPCIRqA==,aM48gA== a=ssrc:429030689 msid:user1092243828@host-59c7f2be webrtctransceiver0 a=ssrc:429030689 cname:user1092243828@host-59c7f2be a=mid:video0 a=fingerprint:sha-256 F8:B7:4A:9E:57:47:26:82:9D:DE:2E:94:74:CA:7C:83:A0:08:AF:22:17:14:89:A3:C9:8C:1A:4B:6B:CB:AA:94

[webrtc] sending offer for /output to 192.168.1.3 (peer_id=0): {"type":"sdp","data":{"type":"offer","sdp":"v=0\r\no=- 5165330002172136569 0 IN IP4 0.0.0.0\r\ns=-\r\nt=0 0\r\na=ice-options:trickle\r\nm=video 9 UDP/TLS/RTP/SAVPF 96\r\nc=IN IP4 0.0.0.0\r\na=setup:actpass\r\na=ice-ufrag:cKpqtlZMAwVNOmJ1U2/QN7bqCRwB33tv\r\na=ice-pwd:wJwTmi7hWwjsEYsmaUMrpD/3fc0QFkfh\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=sendrecv\r\na=rtpmap:96 H264/90000\r\na=rtcp-fb:96 nack pli\r\na=framerate:30\r\na=fmtp:96 packetization-mode=1;sprop-parameter-sets=Z0JAH5ZUAoAt01AAAFQAAAMABAAAAwDyPCIRqA==,aM48gA==\r\na=ssrc:429030689 msid:user1092243828@host-59c7f2be webrtctransceiver0\r\na=ssrc:429030689 cname:user1092243828@host-59c7f2be\r\na=mid:video0\r\na=fingerprint:sha-256 F8:B7:4A:9E:57:47:26:82:9D:DE:2E:94:74:CA:7C:83:A0:08:AF:22:17:14:89:A3:C9:8C:1A:4B:6B:CB:AA:94\r\n"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:2 1 TCP 1015023871 fe80::1 9 typ host tcptype active"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:4 1 UDP 2013266431 fe80::9d20:9a85:984d:7677 38510 typ host"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:5 1 TCP 1015023870 fe80::9d20:9a85:984d:7677 9 typ host tcptype active"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:6 1 TCP 1010829567 fe80::9d20:9a85:984d:7677 45219 typ host tcptype passive"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:7 1 UDP 2013266430 172.17.0.1 35018 typ host"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:8 1 TCP 1015022335 172.17.0.1 9 typ host tcptype active"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:9 1 TCP 1010828031 172.17.0.1 36369 typ host tcptype passive"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:10 1 UDP 2013266429 172.18.0.1 53070 typ host"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:11 1 TCP 1015022591 172.18.0.1 9 typ host tcptype active"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:12 1 TCP 1010828287 172.18.0.1 57727 typ host tcptype passive"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:13 1 UDP 2013266428 192.168.55.1 45369 typ host"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:14 1 TCP 1015022847 192.168.55.1 9 typ host tcptype active"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:15 1 TCP 1010828543 192.168.55.1 59469 typ host tcptype passive"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:16 1 UDP 2013266427 192.168.1.2 43815 typ host"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:17 1 TCP 1015023103 192.168.1.2 9 typ host tcptype active"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:18 1 TCP 1010828799 192.168.1.2 55427 typ host tcptype passive"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:2 2 TCP 1015023870 fe80::1 9 typ host tcptype active"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:4 2 UDP 2013266430 fe80::9d20:9a85:984d:7677 44483 typ host"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:5 2 TCP 1015023869 fe80::9d20:9a85:984d:7677 9 typ host tcptype active"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:6 2 TCP 1010829566 fe80::9d20:9a85:984d:7677 42245 typ host tcptype passive"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:7 2 UDP 2013266429 172.17.0.1 40655 typ host"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:8 2 TCP 1015022334 172.17.0.1 9 typ host tcptype active"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:9 2 TCP 1010828030 172.17.0.1 43297 typ host tcptype passive"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:10 2 UDP 2013266428 172.18.0.1 57644 typ host"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:11 2 TCP 1015022590 172.18.0.1 9 typ host tcptype active"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:12 2 TCP 1010828286 172.18.0.1 55323 typ host tcptype passive"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:13 2 UDP 2013266427 192.168.55.1 59382 typ host"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:14 2 TCP 1015022846 192.168.55.1 9 typ host tcptype active"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:15 2 TCP 1010828542 192.168.55.1 44499 typ host tcptype passive"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:16 2 UDP 2013266426 192.168.1.2 44148 typ host"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:17 2 TCP 1015023102 192.168.1.2 9 typ host tcptype active"}} [webrtc] sending ICE candidate for /output to 192.168.1.3 (peer_id=0): {"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:18 2 TCP 1010828798 192.168.1.2 49517 typ host tcptype passive"}} [gstreamer] gstreamer changed state from NULL to READY ==> rtpssrcdemux0 [gstreamer] gstreamer changed state from READY to PAUSED ==> rtpssrcdemux0 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> rtpssrcdemux0 [gstreamer] gstreamer changed state from NULL to READY ==> rtpsession0 [gstreamer] gstreamer changed state from READY to PAUSED ==> rtpsession0 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> rtpsession0 [gstreamer] gstreamer changed state from NULL to READY ==> rtpstorage0 [gstreamer] gstreamer changed state from READY to PAUSED ==> rtpstorage0 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> rtpstorage0 [gstreamer] gstreamer changed state from NULL to READY ==> nicesink1 [gstreamer] gstreamer changed state from NULL to READY ==> nicesink0 [gstreamer] gstreamer changed state from NULL to READY ==> outputselector0 [gstreamer] gstreamer changed state from NULL to READY ==> transportsendbin0 [gstreamer] gstreamer changed state from READY to PAUSED ==> nicesink1 [gstreamer] gstreamer changed state from READY to PAUSED ==> nicesink0 [gstreamer] gstreamer changed state from READY to PAUSED ==> outputselector0 [gstreamer] gstreamer changed state from READY to PAUSED ==> transportsendbin0 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> nicesink1 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> nicesink0 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> outputselector0 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> transportsendbin0 [gstreamer] gstreamer changed state from NULL to READY ==> nicesrc0 [gstreamer] gstreamer stream status CREATE ==> src [gstreamer] gstreamer changed state from READY to PAUSED ==> nicesrc0 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> nicesrc0 [gstreamer] gstreamer changed state from NULL to READY ==> nicesrc1 [gstreamer] gstreamer stream status CREATE ==> src [gstreamer] gstreamer changed state from READY to PAUSED ==> nicesrc1 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> nicesrc1 [gstreamer] gstreamer changed state from NULL to READY ==> funnel4 [gstreamer] gstreamer changed state from NULL to READY ==> funnel3 [gstreamer] gstreamer changed state from NULL to READY ==> funnel2 [gstreamer] gstreamer stream status ENTER ==> src [gstreamer] gstreamer changed state from NULL to READY ==> srtpdec0 [gstreamer] gstreamer changed state from NULL to READY ==> dtlsdec0 [gstreamer] gstreamer changed state from NULL to READY ==> dtlssrtpdemux0 [gstreamer] gstreamer changed state from NULL to READY ==> dtlssrtpdec0 [gstreamer] gstreamer changed state from NULL to READY ==> srtpdec1 [gstreamer] gstreamer changed state from NULL to READY ==> dtlsdec1 [gstreamer] gstreamer stream status ENTER ==> src [gstreamer] gstreamer changed state from NULL to READY ==> dtlssrtpdemux1 [gstreamer] gstreamer changed state from NULL to READY ==> dtlssrtpdec1 [gstreamer] gstreamer changed state from NULL to READY ==> queue1 [gstreamer] gstreamer changed state from NULL to READY ==> queue2 [gstreamer] gstreamer changed state from NULL to READY ==> capsfilter4 [gstreamer] gstreamer changed state from NULL to READY ==> capsfilter5 [gstreamer] gstreamer changed state from NULL to READY ==> transportreceivebin0 [gstreamer] gstreamer changed state from READY to PAUSED ==> funnel4 [gstreamer] gstreamer changed state from READY to PAUSED ==> funnel3 [gstreamer] gstreamer changed state from READY to PAUSED ==> funnel2 [gstreamer] gstreamer changed state from READY to PAUSED ==> srtpdec0 [gstreamer] gstreamer changed state from READY to PAUSED ==> dtlsdec0 [gstreamer] gstreamer changed state from READY to PAUSED ==> dtlssrtpdemux0 [gstreamer] gstreamer changed state from READY to PAUSED ==> dtlssrtpdec0 [gstreamer] gstreamer changed state from READY to PAUSED ==> srtpdec1 [gstreamer] gstreamer changed state from READY to PAUSED ==> dtlsdec1 [gstreamer] gstreamer changed state from READY to PAUSED ==> dtlssrtpdemux1 [gstreamer] gstreamer changed state from READY to PAUSED ==> dtlssrtpdec1 [gstreamer] gstreamer stream status CREATE ==> src [gstreamer] gstreamer changed state from READY to PAUSED ==> queue1 [gstreamer] gstreamer stream status CREATE ==> src [gstreamer] gstreamer changed state from READY to PAUSED ==> queue2 [gstreamer] gstreamer changed state from READY to PAUSED ==> capsfilter4 [gstreamer] gstreamer stream status ENTER ==> src [gstreamer] gstreamer changed state from READY to PAUSED ==> capsfilter5 [gstreamer] gstreamer changed state from READY to PAUSED ==> transportreceivebin0 [gstreamer] gstreamer stream status ENTER ==> src [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> funnel4 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> funnel3 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> funnel2 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> srtpdec0 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlsdec0 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlssrtpdemux0 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlssrtpdec0 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> srtpdec1 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlsdec1 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlssrtpdemux1 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlssrtpdec1 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> queue1 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> queue2 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> capsfilter4 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> capsfilter5 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> transportreceivebin0 [webrtc] websocket /output -- recieved message from 192.168.1.3 (peer_id=0) (639 bytes) [webrtc] received SDP message for /output from 192.168.1.3 (peer_id=0) v=0 o=- 5229930509654848782 2 IN IP4 127.0.0.1 s=- t=0 0 a=msid-semantic: WMS m=video 9 UDP/TLS/RTP/SAVPF 96 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:YlRT a=ice-pwd:Sojju+H7eB3uz2eEkUC7k3KV a=ice-options:trickle a=fingerprint:sha-256 83:F5:70:B0:84:8C:23:97:8E:68:AF:69:31:88:F1:87:7A:82:BC:CE:C5:78:29:2C:12:1F:2E:BA:47:FC:C2:6D a=setup:active a=mid:video0 a=recvonly a=rtcp-mux a=rtcp-rsize a=rtpmap:96 H264/90000 a=rtcp-fb:96 nack pli a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f

(video-viewer:427): GLib-CRITICAL **: 13:56:59.529: g_atomic_ref_count_dec: assertion 'g_atomic_int_get (arc) > 0' failed [gstreamer] gstreamer changed state from NULL to READY ==> funnel0 [gstreamer] gstreamer changed state from NULL to READY ==> dtlsenc0 [gstreamer] gstreamer changed state from NULL to READY ==> srtpenc0 [gstreamer] gstreamer changed state from NULL to READY ==> dtlssrtpenc0 [gstreamer] gstreamer changed state from READY to PAUSED ==> funnel0 [gstreamer] gstreamer stream status CREATE ==> src [gstreamer] gstreamer stream status ENTER ==> src [gstreamer] gstreamer changed state from READY to PAUSED ==> dtlsenc0 [gstreamer] gstreamer changed state from READY to PAUSED ==> srtpenc0 [gstreamer] gstreamer changed state from READY to PAUSED ==> dtlssrtpenc0 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> funnel0 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlsenc0 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> srtpenc0 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlssrtpenc0 [gstreamer] gstreamer changed state from NULL to READY ==> funnel1 [gstreamer] gstreamer changed state from NULL to READY ==> dtlsenc1 [gstreamer] gstreamer changed state from NULL to READY ==> srtpenc1 [gstreamer] gstreamer changed state from NULL to READY ==> dtlssrtpenc1 [gstreamer] gstreamer changed state from READY to PAUSED ==> funnel1 [gstreamer] gstreamer stream status CREATE ==> src [gstreamer] gstreamer stream status ENTER ==> src [gstreamer] gstreamer changed state from READY to PAUSED ==> dtlsenc1 [gstreamer] gstreamer changed state from READY to PAUSED ==> srtpenc1 [gstreamer] gstreamer changed state from READY to PAUSED ==> dtlssrtpenc1 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> funnel1 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlsenc1 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> srtpenc1 [gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlssrtpenc1 video-viewer: captured 100 frames (1280x720) video-viewer: captured 125 frames (1280x720) video-viewer: captured 150 frames (1280x720) video-viewer: captured 175 frames (1280x720) video-viewer: captured 200 frames (1280x720) video-viewer: captured 225 frames (1280x720) video-viewer: captured 250 frames (1280x720) video-viewer: captured 275 frames (1280x720)