dusty-nv / jetson-inference

Hello AI World guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and NVIDIA Jetson.
https://developer.nvidia.com/embedded/twodaystoademo
MIT License
7.53k stars 2.94k forks source link

WebRTC without Internet #1851

Open manhntm3 opened 1 month ago

manhntm3 commented 1 month ago

I'm building a server that runs on Orin and view it through a PC in the same LAN network. Orin is connected to Internet but PC is not. I ran video-viewer with a file as an input and webrtc output with this command: ./aarch64/bin/video-viewer file://helicopter.mp4 webrtc://@:8554/output

When opening the browser on an Internet-connected PC port 8554, it's running okay. When opening it on a no Internet PC browser(within the same LAN), it keeps connecting and spinning. Screenshot 2024-05-24 at 15 37 47

Here is the full log:

root@ubuntu:~/Software/ai_server/build# ./aarch64/bin/video-viewer file:///root/Software/cc/Videos/helofast.mp4 webrtc://@:8554/output
[gstreamer] initialized gstreamer, version 1.16.3.0
[gstreamer] gstDecoder -- creating decoder for /root/Software/cc/Videos/helofast.mp4
No EGL Display 
nvbufsurftransform: Could not get EGL display connection
nvbuf_utils: Could not get EGL display connection
nvbuf_utils: Could not get EGL display connection
Opening in BLOCKING MODE 
NvMMLiteOpen : Block : BlockType = 261 
NVMEDIA: Reading vendor.tegra.display-size : status: 6 
NvMMLiteBlockCreate : Block : BlockType = 261 
[gstreamer] gstDecoder -- discovered video resolution: 1920x1080  (framerate 29.970030 Hz)
[gstreamer] gstDecoder -- discovered video caps:  video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, level=(string)4, profile=(string)high, width=(int)1920, height=(int)1080, framerate=(fraction)30000/1001, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, parsed=(boolean)true
[gstreamer] gstDecoder -- pipeline string:
[gstreamer] filesrc location=/root/Software/cc/Videos/helofast.mp4 ! qtdemux ! queue ! h264parse ! nvv4l2decoder name=decoder enable-max-performance=1 ! video/x-raw(memory:NVMM) ! nvvidconv name=vidconv ! video/x-raw ! appsink name=mysink
[video]  created gstDecoder from file:///root/Software/cc/Videos/helofast.mp4
------------------------------------------------
gstDecoder video options:
------------------------------------------------
  -- URI: file:///root/Software/cc/Videos/helofast.mp4
     - protocol:  file
     - location:  /root/Software/cc/Videos/helofast.mp4
     - extension: mp4
  -- deviceType: file
  -- ioType:     input
  -- codec:      H264
  -- codecType:  v4l2
  -- width:      1920
  -- height:     1080
  -- frameRate:  29.97
  -- numBuffers: 4
  -- zeroCopy:   true
  -- flipMethod: none
  -- loop:       0
------------------------------------------------
[gstreamer] gstEncoder -- codec not specified, defaulting to H.264
failed to find/open file /proc/device-tree/model
[gstreamer] gstEncoder -- detected board 'Jetson-AGX'
[gstreamer] gstEncoder -- pipeline launch string:
[gstreamer] appsrc name=mysource is-live=true do-timestamp=true format=3 ! nvvidconv name=vidconv ! video/x-raw(memory:NVMM) ! nvv4l2h264enc name=encoder bitrate=4000000 insert-sps-pps=1 insert-vui=1 idrinterval=30 maxperf-enable=1 ! video/x-h264 ! rtph264pay config-interval=1 ! application/x-rtp,media=video,encoding-name=H264,clock-rate=90000,payload=96 ! tee name=videotee ! queue ! fakesink
[webrtc] WebRTC server started @ http://ubuntu:8554
[webrtc] WebRTC server thread running...
[webrtc] websocket route added /output
[video]  created gstEncoder from webrtc://@:8554/output
------------------------------------------------
gstEncoder video options:
------------------------------------------------
  -- URI: webrtc://@:8554/output
     - protocol:  webrtc
     - location:  0.0.0.0
     - port:      8554
  -- deviceType: ip
  -- ioType:     output
  -- codec:      H264
  -- codecType:  v4l2
  -- frameRate:  30
  -- bitRate:    4000000
  -- numBuffers: 4
  -- zeroCopy:   true
  -- latency     10
------------------------------------------------
[OpenGL] failed to open X11 server connection.
[OpenGL] failed to create X11 Window.
[gstreamer] opening gstDecoder for streaming, transitioning pipeline to GST_STATE_PLAYING
nvbuf_utils: Could not get EGL display connection
nvbuf_utils: Could not get EGL display connection
Opening in BLOCKING MODE 
[gstreamer] gstreamer changed state from NULL to READY ==> mysink
[gstreamer] gstreamer changed state from NULL to READY ==> capsfilter2
[gstreamer] gstreamer changed state from NULL to READY ==> vidconv
[gstreamer] gstreamer changed state from NULL to READY ==> capsfilter1
[gstreamer] gstreamer changed state from NULL to READY ==> decoder
[gstreamer] gstreamer changed state from NULL to READY ==> h264parse1
[gstreamer] gstreamer changed state from NULL to READY ==> queue0
[gstreamer] gstreamer changed state from NULL to READY ==> qtdemux1
[gstreamer] gstreamer changed state from NULL to READY ==> filesrc0
[gstreamer] gstreamer changed state from NULL to READY ==> pipeline0
[gstreamer] gstreamer changed state from READY to PAUSED ==> capsfilter2
[gstreamer] gstreamer changed state from READY to PAUSED ==> vidconv
[gstreamer] gstreamer changed state from READY to PAUSED ==> capsfilter1
[gstreamer] gstreamer changed state from READY to PAUSED ==> decoder
[gstreamer] gstreamer changed state from READY to PAUSED ==> h264parse1
[gstreamer] gstreamer stream status CREATE ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> queue0
[gstreamer] gstreamer stream status ENTER ==> src
[gstreamer] gstreamer stream status CREATE ==> sink
[gstreamer] gstreamer changed state from READY to PAUSED ==> qtdemux1
[gstreamer] gstreamer changed state from READY to PAUSED ==> filesrc0
[gstreamer] gstreamer stream status ENTER ==> sink
NvMMLiteOpen : Block : BlockType = 261 
NVMEDIA: Reading vendor.tegra.display-size : status: 6 
NvMMLiteBlockCreate : Block : BlockType = 261 
[gstreamer] gstreamer message stream-start ==> pipeline0
[gstreamer] gstreamer message duration-changed ==> h264parse1
[gstreamer] gstDecoder -- onPreroll()
[gstreamer] gstreamer stream status CREATE ==> src
[gstreamer] gstreamer stream status ENTER ==> src
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ /\ AVC", bitrate=(uint)3652048;
[gstreamer] gstreamer mysink taglist, encoder=(string)Lavf58.29.100, container-format=(string)"ISO\ MP4/M4A";
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(High\ Profile\)", bitrate=(uint)3652048;
[gstreamer] gstBufferManager -- map buffer size was less than max size (3110400 vs 3110407)
[gstreamer] gstBufferManager recieve caps:  video/x-raw, width=(int)1920, height=(int)1080, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30000/1001, format=(string)NV12
[gstreamer] gstBufferManager -- recieved first frame, codec=H264 format=nv12 width=1920 height=1080 size=3110407
[cuda]   allocated 4 ring buffers (3110407 bytes each, 12441628 bytes total)
[cuda]   allocated 4 ring buffers (8 bytes each, 32 bytes total)
[gstreamer] gstreamer changed state from READY to PAUSED ==> mysink
[gstreamer] gstreamer changed state from READY to PAUSED ==> pipeline0
[gstreamer] gstreamer message async-done ==> pipeline0
[gstreamer] gstreamer message new-clock ==> pipeline0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> mysink
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> capsfilter2
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> vidconv
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> capsfilter1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> decoder
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> h264parse1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> queue0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> qtdemux1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> filesrc0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> pipeline0
[cuda]   allocated 4 ring buffers (6220800 bytes each, 24883200 bytes total)
video-viewer:  captured 0 frames (1920x1080)
[cuda]   allocated 2 ring buffers (3110400 bytes each, 6220800 bytes total)
[gstreamer] gstEncoder -- starting pipeline, transitioning to GST_STATE_PLAYING
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(High\ Profile\)", bitrate=(uint)3652048, minimum-bitrate=(uint)5290789, maximum-bitrate=(uint)5290789;
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(High\ Profile\)", bitrate=(uint)3652048, minimum-bitrate=(uint)4087912, maximum-bitrate=(uint)5290789;
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(High\ Profile\)", bitrate=(uint)3652048, minimum-bitrate=(uint)2737582, maximum-bitrate=(uint)5290789;
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(High\ Profile\)", bitrate=(uint)3652048, minimum-bitrate=(uint)2185174, maximum-bitrate=(uint)5290789;
Opening in BLOCKING MODE 
[gstreamer] gstreamer changed state from NULL to READY ==> fakesink0
[gstreamer] gstreamer changed state from NULL to READY ==> queue1
[gstreamer] gstreamer changed state from NULL to READY ==> videotee
[gstreamer] gstreamer changed state from NULL to READY ==> capsfilter5
[gstreamer] gstreamer changed state from NULL to READY ==> rtph264pay0
[gstreamer] gstreamer changed state from NULL to READY ==> capsfilter4
[gstreamer] gstreamer changed state from NULL to READY ==> encoder
[gstreamer] gstreamer changed state from NULL to READY ==> capsfilter3
[gstreamer] gstreamer changed state from NULL to READY ==> vidconv
[gstreamer] gstreamer changed state from NULL to READY ==> mysource
[gstreamer] gstreamer changed state from NULL to READY ==> pipeline1
[gstreamer] gstreamer stream status CREATE ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> queue1
[gstreamer] gstreamer changed state from READY to PAUSED ==> videotee
[gstreamer] gstreamer stream status ENTER ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> capsfilter5
[gstreamer] gstreamer changed state from READY to PAUSED ==> rtph264pay0
[gstreamer] gstreamer changed state from READY to PAUSED ==> capsfilter4
[gstreamer] gstreamer changed state from READY to PAUSED ==> encoder
[gstreamer] gstreamer changed state from READY to PAUSED ==> capsfilter3
[gstreamer] gstreamer changed state from READY to PAUSED ==> vidconv
[gstreamer] gstreamer stream status CREATE ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> mysource
[gstreamer] gstreamer changed state from READY to PAUSED ==> pipeline1
[gstreamer] gstreamer message new-clock ==> pipeline1
[gstreamer] gstreamer stream status ENTER ==> src
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> queue1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> videotee
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> capsfilter5
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> rtph264pay0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> capsfilter4
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> encoder
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> capsfilter3
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> vidconv
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> mysource
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(High\ Profile\)", bitrate=(uint)3652048, minimum-bitrate=(uint)2185174, maximum-bitrate=(uint)5306853;
[gstreamer] gstEncoder -- new caps: video/x-raw, width=1920, height=1080, format=(string)I420, framerate=30/1
video-viewer:  captured 1 frames (1920x1080)
NvMMLiteOpen : Block : BlockType = 4 
===== NVMEDIA: NVENC =====
NvMMLiteBlockCreate : Block : BlockType = 4 
[gstreamer] gstreamer message stream-start ==> pipeline1
[gstreamer] gstreamer message latency ==> encoder
video-viewer:  captured 2 frames (1920x1080)
H264: Profile = 66, Level = 0 
[gstreamer] gstreamer stream status CREATE ==> src
[gstreamer] gstreamer stream status ENTER ==> src
video-viewer:  captured 3 frames (1920x1080)
NVMEDIA: Need to set EMC bandwidth : 846000 
NVMEDIA: Need to set EMC bandwidth : 846000 
NVMEDIA_ENC: bBlitMode is set to TRUE 
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(High\ Profile\)", bitrate=(uint)3652048, minimum-bitrate=(uint)2185174, maximum-bitrate=(uint)5481878;
video-viewer:  captured 4 frames (1920x1080)
[gstreamer] gstreamer changed state from READY to PAUSED ==> fakesink0
[gstreamer] gstreamer message async-done ==> pipeline1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> fakesink0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> pipeline1
video-viewer:  captured 5 frames (1920x1080)
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(High\ Profile\)", bitrate=(uint)3652048, minimum-bitrate=(uint)2155684, maximum-bitrate=(uint)5481878;
video-viewer:  captured 6 frames (1920x1080)
video-viewer:  captured 7 frames (1920x1080)
video-viewer:  captured 8 frames (1920x1080)
video-viewer:  captured 9 frames (1920x1080)
video-viewer:  captured 10 frames (1920x1080)
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(High\ Profile\)", bitrate=(uint)3652048, minimum-bitrate=(uint)2087352, maximum-bitrate=(uint)5481878;
video-viewer:  captured 11 frames (1920x1080)
video-viewer:  captured 12 frames (1920x1080)
video-viewer:  captured 13 frames (1920x1080)
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(High\ Profile\)", bitrate=(uint)3652048, minimum-bitrate=(uint)1971788, maximum-bitrate=(uint)5481878;
video-viewer:  captured 14 frames (1920x1080)
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(High\ Profile\)", bitrate=(uint)3652048, minimum-bitrate=(uint)1971788, maximum-bitrate=(uint)5541818;
video-viewer:  captured 25 frames (1920x1080)
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(High\ Profile\)", bitrate=(uint)3652048, minimum-bitrate=(uint)1744255, maximum-bitrate=(uint)5541818;
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(High\ Profile\)", bitrate=(uint)3652048, minimum-bitrate=(uint)1686953, maximum-bitrate=(uint)5541818;
[webrtc] HTTP 192.168.68.102 GET '/'
[webrtc] /
[webrtc] HTTP 192.168.68.102 GET '/favicon.ico'
[webrtc] /favicon.ico
[webrtc] websocket /output -- new connection opened by 192.168.68.102 (peer_id=0)
[webrtc] new WebRTC peer connecting (192.168.68.102, peer_id=0)

(video-viewer:66): GLib-GObject-WARNING **: 08:00:23.123: g_object_set_is_valid_property: object class 'GstWebRTCBin' has no property named 'latency'

(video-viewer:66): GLib-GObject-WARNING **: 08:00:23.125: g_object_set_is_valid_property: object class 'WebRTCTransceiver' has no property named 'direction'
video-viewer:  captured 50 frames (1920x1080)
[gstreamer] gstreamer changed state from NULL to READY ==> queue-0
[gstreamer] gstreamer stream status CREATE ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> queue-0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> queue-0
[gstreamer] gstreamer stream status ENTER ==> src
[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
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(High\ Profile\)", bitrate=(uint)3652048, minimum-bitrate=(uint)1686953, maximum-bitrate=(uint)11799560;
[webrtc] negotiation offer created:
v=0
o=- 2027924866851923460 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:QVcPqKBt7rGASP5S/zpjHEiCphZxddql
a=ice-pwd:tDVQktZiyQj/eaiackyvENggHOb6pCGT
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=Z0JAKJZUA8ARPyzUAAADAQAAAwABAAADADyPCIRq,aM48gA==
a=ssrc:297423809 msid:user3412510997@host-70ea3d3c webrtctransceiver0
a=ssrc:297423809 cname:user3412510997@host-70ea3d3c
a=mid:video0
a=fingerprint:sha-256 5D:11:13:E5:B4:D5:35:9A:E3:29:65:F4:6B:D9:61:70:92:DB:97:B5:32:73:AE:6F:B9:0F:02:C7:E8:61:16:A8

[webrtc] sending offer for /output to 192.168.68.102 (peer_id=0): 
{"type":"sdp","data":{"type":"offer","sdp":"v=0\r\no=- 2027924866851923460 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:QVcPqKBt7rGASP5S/zpjHEiCphZxddql\r\na=ice-pwd:tDVQktZiyQj/eaiackyvENggHOb6pCGT\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=Z0JAKJZUA8ARPyzUAAADAQAAAwABAAADADyPCIRq,aM48gA==\r\na=ssrc:297423809 msid:user3412510997@host-70ea3d3c webrtctransceiver0\r\na=ssrc:297423809 cname:user3412510997@host-70ea3d3c\r\na=mid:video0\r\na=fingerprint:sha-256 5D:11:13:E5:B4:D5:35:9A:E3:29:65:F4:6B:D9:61:70:92:DB:97:B5:32:73:AE:6F:B9:0F:02:C7:E8:61:16:A8\r\n"}}
[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 stream status ENTER ==> src
[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 changed state from NULL to READY ==> dtlssrtpdemux1
[gstreamer] gstreamer changed state from NULL to READY ==> dtlssrtpdec1
[gstreamer] gstreamer changed state from NULL to READY ==> queue2
[gstreamer] gstreamer changed state from NULL to READY ==> queue3
[gstreamer] gstreamer changed state from NULL to READY ==> capsfilter6
[gstreamer] gstreamer changed state from NULL to READY ==> capsfilter7
[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 ==> queue2
[gstreamer] gstreamer stream status CREATE ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> queue3
[gstreamer] gstreamer changed state from READY to PAUSED ==> capsfilter6
[gstreamer] gstreamer changed state from READY to PAUSED ==> capsfilter7
[gstreamer] gstreamer stream status ENTER ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> transportreceivebin0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> funnel4
[gstreamer] gstreamer stream status ENTER ==> src
[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 ==> queue2
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> queue3
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> capsfilter6
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> capsfilter7
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> transportreceivebin0
[webrtc] websocket /output -- recieved message from 192.168.68.102 (peer_id=0) (639 bytes)
[webrtc] received SDP message for /output from 192.168.68.102 (peer_id=0)
v=0
o=- 5601809771705215534 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:reFX
a=ice-pwd:8tNaXiyZg1ZyIKCKmL7Jstqa
a=ice-options:trickle
a=fingerprint:sha-256 22:03:BF:30:34:5C:B9:47:A2:75:2B:85:09:43:B4:D5:84:68:0F:3A:1C:47:C8:30:90:8F:DB:EA:A2:EA:BE:26
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:66): GLib-CRITICAL **: 08:00:23.754: g_atomic_ref_count_dec: assertion 'g_atomic_int_get (arc) > 0' failed
[webrtc] sending ICE candidate for /output to 192.168.68.102 (peer_id=0): 
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:1 1 UDP 2013266431 fe80::fcdf:90e6:cf:f0eb 55309 typ host"}}
[webrtc] sending ICE candidate for /output to 192.168.68.102 (peer_id=0): 
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:2 1 TCP 1015023103 fe80::fcdf:90e6:cf:f0eb 9 typ host tcptype active"}}
[webrtc] sending ICE candidate for /output to 192.168.68.102 (peer_id=0): 
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:3 1 TCP 1010828799 fe80::fcdf:90e6:cf:f0eb 49569 typ host tcptype passive"}}
[webrtc] sending ICE candidate for /output to 192.168.68.102 (peer_id=0): 
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:4 1 UDP 2013266430 172.17.0.1 37975 typ host"}}
[webrtc] sending ICE candidate for /output to 192.168.68.102 (peer_id=0): 
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:5 1 TCP 1015022079 172.17.0.1 9 typ host tcptype active"}}
[webrtc] sending ICE candidate for /output to 192.168.68.102 (peer_id=0): 
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:6 1 TCP 1010827775 172.17.0.1 37007 typ host tcptype passive"}}
[webrtc] sending ICE candidate for /output to 192.168.68.102 (peer_id=0): 
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:7 1 UDP 2013266429 192.168.68.165 54154 typ host"}}
[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
[webrtc] sending ICE candidate for /output to 192.168.68.102 (peer_id=0): 
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:8 1 TCP 1015022335 192.168.68.165 9 typ host tcptype active"}}
[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
[webrtc] sending ICE candidate for /output to 192.168.68.102 (peer_id=0): 
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:9 1 TCP 1010828031 192.168.68.165 36339 typ host tcptype passive"}}
[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
[webrtc] sending ICE candidate for /output to 192.168.68.102 (peer_id=0): 
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:1 2 UDP 2013266430 fe80::fcdf:90e6:cf:f0eb 40782 typ host"}}
[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
[webrtc] sending ICE candidate for /output to 192.168.68.102 (peer_id=0): 
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:2 2 TCP 1015023102 fe80::fcdf:90e6:cf:f0eb 9 typ host tcptype active"}}
[webrtc] sending ICE candidate for /output to 192.168.68.102 (peer_id=0): 
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:3 2 TCP 1010828798 fe80::fcdf:90e6:cf:f0eb 39549 typ host tcptype passive"}}
[webrtc] sending ICE candidate for /output to 192.168.68.102 (peer_id=0): 
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:4 2 UDP 2013266429 172.17.0.1 39356 typ host"}}
[webrtc] sending ICE candidate for /output to 192.168.68.102 (peer_id=0): 
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:5 2 TCP 1015022078 172.17.0.1 9 typ host tcptype active"}}
[webrtc] sending ICE candidate for /output to 192.168.68.102 (peer_id=0): 
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:6 2 TCP 1010827774 172.17.0.1 50717 typ host tcptype passive"}}
[webrtc] sending ICE candidate for /output to 192.168.68.102 (peer_id=0): 
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:7 2 UDP 2013266428 192.168.68.165 52290 typ host"}}
[webrtc] sending ICE candidate for /output to 192.168.68.102 (peer_id=0): 
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:8 2 TCP 1015022334 192.168.68.165 9 typ host tcptype active"}}
[webrtc] sending ICE candidate for /output to 192.168.68.102 (peer_id=0): 
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:9 2 TCP 1010828030 192.168.68.165 45151 typ host tcptype passive"}}

Here is the log on client console:

GET https://webrtc.github.io/adapter/adapter-latest.js net::ERR_INTERNET_DISCONNECTED
(index):214 Video server URL: ws://192.168.68.165:8554/output
(index):17 Incoming SDP: (ws://192.168.68.165:8554/output){"type":"offer","sdp":"v=0\r\no=- 6308913028167847129 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:wYoWhUqWl1nlRXBNq+BtdwrbMG0Meu3b\r\na=ice-pwd:bperx7LJcsg6LEJnIwd2sOoRlHjLTUeq\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=ssrc:2924558052 msid:user102599614@host-3ad17c72 webrtctransceiver0\r\na=ssrc:2924558052 cname:user102599614@host-3ad17c72\r\na=mid:video0\r\na=fingerprint:sha-256 02:84:4C:F2:4D:7B:1E:D6:5B:60:37:F8:E6:F2:BE:E0:61:61:98:4E:3E:AA:C7:4F:3B:35:85:F5:4B:C4:99:E5\r\n"}
(index):153 Adding remote stream to HTML video player (ws://192.168.68.165:8554/output)
(index):20 Local description (ws://192.168.68.165:8554/output)
{"type":"answer","sdp":"v=0\r\no=- 7856840809115883790 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=msid-semantic: WMS\r\nm=video 9 UDP/TLS/RTP/SAVPF 96\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:E6ys\r\na=ice-pwd:dMDPCSohfnZYhHXv6IAciYHo\r\na=ice-options:trickle\r\na=fingerprint:sha-256 A2:B9:34:F7:CC:BA:43:A9:70:9E:38:C9:04:19:E5:71:F8:68:B8:E0:3C:38:E3:70:6A:07:00:9A:0E:EA:32:32\r\na=setup:active\r\na=mid:video0\r\na=recvonly\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 H264/90000\r\na=rtcp-fb:96 nack pli\r\na=fmtp:96 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\n"}
(index):59 Incoming ICE (ws://192.168.68.165:8554/output)
{"sdpMLineIndex":0,"candidate":"candidate:1 1 UDP 2013266431 fe80::fcdf:90e6:cf:f0eb 42178 typ host"}
(index):59 Incoming ICE (ws://192.168.68.165:8554/output)
{"sdpMLineIndex":0,"candidate":"candidate:2 1 TCP 1015023103 fe80::fcdf:90e6:cf:f0eb 9 typ host tcptype active"}
(index):59 Incoming ICE (ws://192.168.68.165:8554/output)
{"sdpMLineIndex":0,"candidate":"candidate:3 1 TCP 1010828799 fe80::fcdf:90e6:cf:f0eb 35535 typ host tcptype passive"}
(index):59 Incoming ICE (ws://192.168.68.165:8554/output)
{"sdpMLineIndex":0,"candidate":"candidate:4 1 UDP 2013266430 172.17.0.1 39792 typ host"}
(index):185 WebRTC connection state (ws://192.168.68.165:8554/output) connecting
(index):59 Incoming ICE (ws://192.168.68.165:8554/output)
{"sdpMLineIndex":0,"candidate":"candidate:5 1 TCP 1015022079 172.17.0.1 9 typ host tcptype active"}
(index):59 Incoming ICE (ws://192.168.68.165:8554/output)
{"sdpMLineIndex":0,"candidate":"candidate:6 1 TCP 1010827775 172.17.0.1 37785 typ host tcptype passive"}
(index):59 Incoming ICE (ws://192.168.68.165:8554/output)
{"sdpMLineIndex":0,"candidate":"candidate:7 1 UDP 2013266429 192.168.68.165 50815 typ host"}
(index):59 Incoming ICE (ws://192.168.68.165:8554/output)
{"sdpMLineIndex":0,"candidate":"candidate:8 1 TCP 1015022335 192.168.68.165 9 typ host tcptype active"}
(index):59 Incoming ICE (ws://192.168.68.165:8554/output)
{"sdpMLineIndex":0,"candidate":"candidate:9 1 TCP 1010828031 192.168.68.165 58493 typ host tcptype passive"}
(index):59 Incoming ICE (ws://192.168.68.165:8554/output)
{"sdpMLineIndex":0,"candidate":"candidate:1 2 UDP 2013266430 fe80::fcdf:90e6:cf:f0eb 52027 typ host"}
(index):59 Incoming ICE (ws://192.168.68.165:8554/output)
{"sdpMLineIndex":0,"candidate":"candidate:2 2 TCP 1015023102 fe80::fcdf:90e6:cf:f0eb 9 typ host tcptype active"}
(index):59 Incoming ICE (ws://192.168.68.165:8554/output)
{"sdpMLineIndex":0,"candidate":"candidate:3 2 TCP 1010828798 fe80::fcdf:90e6:cf:f0eb 35481 typ host tcptype passive"}
(index):59 Incoming ICE (ws://192.168.68.165:8554/output)
{"sdpMLineIndex":0,"candidate":"candidate:4 2 UDP 2013266429 172.17.0.1 53462 typ host"}
(index):59 Incoming ICE (ws://192.168.68.165:8554/output)
{"sdpMLineIndex":0,"candidate":"candidate:5 2 TCP 1015022078 172.17.0.1 9 typ host tcptype active"}
(index):59 Incoming ICE (ws://192.168.68.165:8554/output)
{"sdpMLineIndex":0,"candidate":"candidate:6 2 TCP 1010827774 172.17.0.1 36895 typ host tcptype passive"}
(index):59 Incoming ICE (ws://192.168.68.165:8554/output)
{"sdpMLineIndex":0,"candidate":"candidate:7 2 UDP 2013266428 192.168.68.165 43358 typ host"}
(index):59 Incoming ICE (ws://192.168.68.165:8554/output)
{"sdpMLineIndex":0,"candidate":"candidate:8 2 TCP 1015022334 192.168.68.165 9 typ host tcptype active"}
(index):59 Incoming ICE (ws://192.168.68.165:8554/output)
{"sdpMLineIndex":0,"candidate":"candidate:9 2 TCP 1010828030 192.168.68.165 35981 typ host tcptype passive"}
(index):185 WebRTC connection state (ws://192.168.68.165:8554/output) disconnected
(index):185 WebRTC connection state (ws://192.168.68.165:8554/output) failed

I noticed in the case without Internet on the Client PC, there is no ICE candidate being sent to the server. So the function onIceCandidate is never been triggered in this case. Do you have any thoughts about this?

dusty-nv commented 1 month ago

Hi @manhntm3, see this related issue - looks like it needs the STUN servers disabled in the javascript + gstreamer: https://github.com/dusty-nv/jetson-containers/issues/535

dusty-nv commented 1 week ago

Update on this here: https://github.com/dusty-nv/jetson-containers/issues/535#issuecomment-2168857604