Whip stream not visible

Hi ,
I am trying to use simple whip client and server to push stream from a remote device to media server. Getting below logs at client side

root@ubuntu:/home/mydir/simple-whip-client# ./whip-client \
    -u https://mywhipserver.domain.com:7080/whip/endpoint/abc123 \
    -t verysecret \
    -V "videotestsrc is-live=true pattern=ball ! videoconvert ! queue ! vp8enc deadline=1 ! rtpvp8pay pt=96 ssrc=2 ! queue ! application/x-rtp,media=video,encoding-name=VP8,payload=96" \
    -T turns://7a1a41afa6:Kh6l61cAkRV@myturn.relay.server.to:443?transport=tcp \
    -F

Simple WHIP client
-----------------
WHIP endpoint: https://mywhipserver.domain.com:7080/whip/endpoint/abc123
Bearer Token: verysecret
Trickle ICE: yes (HTTP PATCH)
Auto STUN/TURN: no
NAT server: (none)
TURN server: turns://7a1ac3274bf9c2a341afa6:Kcdmcknh6l61cAkRV@global.relay.metered.ca:443?transport=tcp
Forcing TURN: true
Audio pipeline: (none)
Video pipeline: videotestsrc is-live=true pattern=ball ! videoconvert ! queue ! vp8enc deadline=1 ! rtpvp8pay pt=96 ssrc=2 ! queue ! application/x-rtp,media=video,encoding-name=VP8,payload=96

[WHIP] Initializing the Gstreamer pipeline:
webrtcbin name=sendonly bundle-policy=ice-transport-policy=relay
    videotestsrc is-live=true pattern=ball ! videoconvert ! queue !
    vp8enc deadline=1 ! rtpvp8pay pt=96 ssrc=2 ! queue !
    application/x-rtp,media=video,encoding-name=VP8,payload=96 !
    sendonly.

[WHIP] Configured jitter-buffer size (latency) for PeerConnection to 200ms
[WHIP] Starting the GStreamer pipeline
[WHIP] Creating Offer
[WHIP] Offer created
[WHIP] Setting local description
[WHIP] Got SDP offer (645 bytes)
[WHIP] Resource URL: https://whipserver.domain:7080/whip/resource/kg9oS98gyDwA1jv3
[WHIP] Received SDP answer (666 bytes)
[WHIP] Setting remote description
[WHIP] ICE gathering started...

The whip admin web client shows the URL as active as below

But we are not getting any stream on browser, only the below event once we stop the whip client process

Apart from above logs i dont have anything alarming on WHIP server too:

> janus-whip-server@0.0.1 start /home/linkdevice/simple-whip-server
> DEBUG=whip:*,*:whip:debug,janus:*,*:janus:debug node src/server.js "debug"

[1. Janus]
Connecting to Janus: { address: 'ws://127.0.0.1:8188' }
whip:info Connecting to ws://127.0.0.1:8188 +8ms
janus:info Janus WebSocket Client Connected +9ms
janus:info Janus session ID is 16823723608656 +5ms
janus:info Janus instance version: 1.3.1 (multistream) +4ms
whip:info Connected to Janus: ws://127.0.0.1:8188 +8ms

[2. WHIP REST API]
WHIP REST API listening on *:7080
WHIP server prototype started!
[ 'Janus OK', 'WHIP REST API OK' ]
whip:info [abc123] Created new WHIP endpoint +20s
whip:info [abc123] Publishing to WHIP endpoint +7s

Any assistance or guidance on the aforementioned issue would be greatly appreciated

Thanks

You should check the WHIP client logs and/or the Janus Admin API for info on what may be happening. Very likely the PeerConnection was not established (ICE or DTLS error), or RTP packets are not flowing by.

Thanks,

I checked Janus Admin API and observed that the ICE is getting stuck in “gathering” state as shown below

{
    "session_id": 2595743632001303,
    "session_last_activity": 62094640,
    "session_timeout": 60,
    "session_transport": "janus.transport.websockets",
    "handle_id": 5310534419879396,
    "loop-running": true,
    "created": 55768198,
    "current_time": 65002369,
    "plugin": "janus.plugin.videoroom",
    "plugin_specific": {
        "type": "publisher",
        "room": 1234,
        "id": 625948603437396,
        "private_id": 390262477,
        "display": "WHIP Publisher 1234",
        "bitrate": 128000,
        "streams": [
            {
                "type": "video",
                "mindex": 0,
                "mid": "video0",
                "codec": "vp8",
                "subscribers": 0
            }
        ],
        "hangingup": 0,
        "destroyed": 0
    },
    "flags": {
        "got-offer": true,
        "got-answer": true,
        "negotiated": true,
        "processing-offer": false,
        "starting": true,
        "ice-restart": false,
        "ready": false,
        "stopped": false,
        "alert": false,
        "trickle": true,
        "all-trickles": false,
        "resend-trickles": false,
        "trickle-synced": false,
        "data-channels": false,
        "has-audio": false,
        "has-video": false,
        "new-datachan-sdp": false,
        "rfc4588-rtx": false,
        "cleaning": false,
        "e2ee": false
    },
    "agent-created": 55769470,
    "ice-mode": "full",
    "ice-role": "controlled",
    "sdps": {
        "profile": "UDP/TLS/RTP/SAVPF",
        "local": "v=0\r\no=- 1741716668172512 1 IN IP4 43.205.37.213\r\ns=VideoRoom 1234\r\nt=0 0\r\na=group:BUNDLE video0\r\na=ice-options:trickle\r\na=fingerprint:sha-256 07:DD:CE:A8:00:80:87:68:79:C1:32:44:E3:F0:F4:2E:0B:ED:D0:1F:3F:7D:79:0D:9B:14:9F:CA:4D:95:3D:E8\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS *\r\nm=video 9 UDP/TLS/RTP/SAVPF 96\r\nc=IN IP4 43.205.37.213\r\na=recvonly\r\na=mid:video0\r\na=rtcp-mux\r\na=ice-ufrag:yoUe\r\na=ice-pwd:Ewz+eaRYoRRRSNTeeMOKjs\r\na=ice-options:trickle\r\na=setup:active\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtcp-fb:96 goog-remb\r\na=rtcp-fb:96 transport-cc\r\na=msid:janus janusvideo0\r\na=ssrc:2875964579 cname:janus\r\na=candidate:1 1 udp 2015363327 43.205.37.213 12683 typ host\r\na=candidate:2 1 udp 2015363583 43.205.37.213 12626 typ host\r\na=candidate:3 1 udp 2015363839 fe80::2e:a7ff:fedd:4466 18079 typ host\r\na=candidate:4 1 udp 2015364095 fe80::42:60ff:fe8d:6007 18524 typ host\r\na=candidate:5 1 udp 2015364863 fe80::6cf5:f2ff:fe9e:71ec 17967 typ host\r\na=candidate:6 1 udp 2015364863 fe80::702d:2bff:fe6b:ffd6 16553 typ host\r\na=candidate:7 1 udp 2015364863 fe80::d0c6:71ff:fe40:660a 10971 typ host\r\na=candidate:8 1 udp 2015364863 fe80::3c67:adff:fe1d:e046 15765 typ host\r\na=candidate:9 1 udp 2015364863 fe80::ecdf:a6ff:fe0d:9aca 18195 typ host\r\na=candidate:10 1 udp 2015364863 fe80::2c3c:66ff:fe7b:3402 19536 typ host\r\na=candidate:11 1 udp 2015364863 fe80::84ba:51ff:fe42:c84 11169 typ host\r\na=candidate:12 1 udp 2015364863 fe80::14:91ff:fe6b:ca59 17056 typ host\r\na=candidate:13 1 udp 2015364863 fe80::48dd:f2ff:fe4f:35e7 18496 typ host\r\na=candidate:14 1 udp 2015364863 fe80::d07d:54ff:fe68:e594 12743 typ host\r\na=candidate:15 1 udp 1679819007 43.205.37.213 12683 typ srflx raddr 172.20.18.221 rport 12683\r\na=candidate:16 1 udp 505413887 172.20.18.219 53531 typ relay raddr 172.20.18.221 rport 12683\r\na=end-of-candidates\r\n",
        "remote": "v=0\r\no=- 531297780117488175 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:Mv3bCAdmjvqNzvEKbUCkmpIfWcTM2nmS\r\na=ice-pwd:Uqd2/6LrmYg1Zj+fYjmpa8q0xOgXHFTW\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=sendonly\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 nack pli\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 transport-cc\r\na=framerate:30\r\na=ssrc:2 msid:user1435754667@host-c0e16fac webrtctransceiver0\r\na=ssrc:2 cname:user1435754667@host-c0e16fac\r\na=mid:video0\r\na=fingerprint:sha-256 75:2C:4F:52:3B:64:A0:E8:F9:98:3A:A1:5E:30:65:FE:47:1D:A4:2D:E9:02:FA:DD:03:91:F9:EA:65:67:4A:59\r\na=rtcp-mux-only\r\n"
    },
    "queued-packets": 0,
    "webrtc": {
        "ice": {
            "stream_id": 1,
            "component_id": 0,
            "state": "gathering",
            "gathered": 57921764,
            "local-candidates": [
                "1 1 udp 2015363327 43.205.37.213 12683 typ host",
                "2 1 udp 2015363583 43.205.37.213 12626 typ host",
                "3 1 udp 2015363839 fe80::2e:a7ff:fedd:4466 18079 typ host",
                "4 1 udp 2015364095 fe80::42:60ff:fe8d:6007 18524 typ host",
                "5 1 udp 2015364863 fe80::6cf5:f2ff:fe9e:71ec 17967 typ host",
                "6 1 udp 2015364863 fe80::702d:2bff:fe6b:ffd6 16553 typ host",
                "7 1 udp 2015364863 fe80::d0c6:71ff:fe40:660a 10971 typ host",
                "8 1 udp 2015364863 fe80::3c67:adff:fe1d:e046 15765 typ host",
                "9 1 udp 2015364863 fe80::ecdf:a6ff:fe0d:9aca 18195 typ host",
                "10 1 udp 2015364863 fe80::2c3c:66ff:fe7b:3402 19536 typ host",
                "11 1 udp 2015364863 fe80::84ba:51ff:fe42:c84 11169 typ host",
                "12 1 udp 2015364863 fe80::14:91ff:fe6b:ca59 17056 typ host",
                "13 1 udp 2015364863 fe80::48dd:f2ff:fe4f:35e7 18496 typ host",
                "14 1 udp 2015364863 fe80::d07d:54ff:fe68:e594 12743 typ host",
                "15 1 udp 1679819007 43.205.37.213 12683 typ srflx raddr 172.20.18.221 rport 12683",
                "16 1 udp 505413887 172.20.18.219 53531 typ relay raddr 172.20.18.221 rport 12683"
            ],
            "ready": 1
        },
        "dtls": {
            "fingerprint": "07:DD:CE:A8:00:80:87:68:79:C1:32:44:E3:F0:F4:2E:0B:ED:D0:1F:3F:7D:79:0D:9B:14:9F:CA:4D:95:3D:E8",
            "remote-fingerprint": "75:2C:4F:52:3B:64:A0:E8:F9:98:3A:A1:5E:30:65:FE:47:1D:A4:2D:E9:02:FA:DD:03:91:F9:EA:65:67:4A:59",
            "remote-fingerprint-hash": "sha-256",
            "dtls-role": "active",
            "dtls-state": "created",
            "retransmissions": 0,
            "valid": false,
            "srtp-profile": "none",
            "ready": false,
            "sctp-association": false,
            "stats": {
                "in": {
                    "packets": 0,
                    "bytes": 0
                },
                "out": {
                    "packets": 0,
                    "bytes": 0
                }
            }
        },
        "extensions": {},
        "bwe": {
            "twcc": false,
            "twcc-ext-id": 0
        },
        "media": {
            "video0": {
                "type": "video",
                "mindex": 0,
                "mid": "video0",
                "do_nacks": true,
                "nack-queue-ms": 0,
                "ssrc": {
                    "ssrc": 2875964579,
                    "ssrc-peer": 2
                },
                "direction": {
                    "send": false,
                    "recv": true
                },
                "rtcp": {
                    "main": {
                        "base": 90000,
                        "rtt": 0,
                        "lost": 0,
                        "lost-by-remote": 0,
                        "jitter-local": 0,
                        "jitter-remote": 0,
                        "in-link-quality": 100,
                        "in-media-link-quality": 100,
                        "out-link-quality": 100,
                        "out-media-link-quality": 100
                    }
                },
                "stats": {
                    "in": {
                        "packets": 0,
                        "bytes": 0,
                        "bytes_lastsec": 0,
                        "nacks": 0,
                        "retransmissions": 0
                    },
                    "out": {
                        "packets": 0,
                        "bytes": 0,
                        "bytes_lastsec": 0,
                        "nacks": 0
                    }
                }
            }
        }
    }
}

Here is log from the WHIP client

[WHIP] Initializing the GStreamer pipeline:
webrtcbin name=sendonly bundle-policy=0 ice-transport-policy=relay stun-server=stun://stun.l.google.com:19302  videotestsrc is-live=true pattern=ball ! videoconvert ! queue ! vp8enc deadline=1 ! rtpvp8pay pt=96 ssrc=2 ! queue ! application/x-rtp,media=video,encoding-name=VP8,payload=96 ! sendonly. 
[WHIP] Configured jitter-buffer size (latency) for PeerConnection to 200ms
[WHIP] Starting the GStreamer pipeline
[WHIP] Creating offer
[WHIP] Offer created
[WHIP] Setting local description
[WHIP] Sending SDP offer (645 bytes)
[WHIP] Resource URL: https://whipserver.mydomain.com:7080/whip/resource/xMsTG1DTUJZxVLyU
[WHIP] Received SDP answer (1872 bytes)
[WHIP] Setting remote description
[WHIP] ICE gathering started...
[WHIP] ICE connecting...
[WHIP] PeerConnection connecting...
[WHIP] ICE gathering completed
[WHIP] [ERR] [src/whip-client.c:whip_ice_connection_state:642] ICE failed
[WHIP] Disconnecting from server (ICE failed)
[WHIP] [ERR] [src/whip-client.c:whip_connection_state:588] PeerConnection failed
[WHIP] GStreamer pipeline stopped

Though its understood TURN on server side is not required for EC2 installation but I have tried that too out of desperation.
Tried switching between trickle modes and ice modes no luck yet

PS :Things are working just fine when I try to use video room from browser. I am getting this issue when I try to use the examples from the WHIP client README.

There are no remote candidates in the Admin API snippet of the WHIP example. The WHIP client is not sending any candidate to Janus (or the WHIP server isn’t passing them to Janus), so ICE will never start. That’s what you should investigate.