EpicGamesExt / PixelStreamingInfrastructure

The official Pixel Streaming servers and frontend.
MIT License
200 stars 75 forks source link

[BUG] - Firefox stuck with WebRtc connection #239

Closed spnikit closed 1 week ago

spnikit commented 1 month ago

UE Version: E.g. UE 5.3

Frontend Version: E.g. UE5.3-1.0.6

Problem component Frontend

Description WebRtc connection problems (stuck infinitely) in Firefox since version 126 (Chrome, Safari, Edge - works fine)

Screenshots Firefox console log

image

Some webrtc connection logs

image

Platform (please complete the following information):

mcottontensor commented 4 weeks ago

Could you please let me know what your network setup looks like?

Additionally Can you let me know how your signalling server is configured? Are you using STUN/TURN?

Usually this kind of behavior shows up because the streamer and browser cannot create a connection between them for what ever reason.

Aeddon commented 3 weeks ago

I can confirm that we also have massive problems with firefox lately. Our pixelstreaming (5.3) was working flawlessly in firefox, but stopped working somewhere after firefox version 124. It seems only VP9/VP8 is affected, as H264 is still working as of firefox 129.0.1

The websocket OFFER package looks like this:

v=0
o=- 3958611635937858216 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1 2
a=extmap-allow-mixed
a=msid-semantic: WMS pixelstreaming_audio_stream_id pixelstreaming_video_stream_id
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:jLl9
a=ice-pwd:EFNoA1qICWOSpNpJCU+vTo72
a=ice-options:trickle
a=fingerprint:sha-256 F2:8B:C6:9C:26:5E:06:66:4C:C4:AC:FE:F1:AB:08:63:9C:B8:5E:1E:EA:05:B1:B9:73:DA:BE:AF:E3:02:F6:16
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 urn:3gpp:video-orientation
a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space
a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendonly
a=msid:pixelstreaming_video_stream_id pixelstreaming_video_track_label
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP9/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:98 red/90000
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:100 ulpfec/90000
a=ssrc-group:FID 3607101840 2307396177
a=ssrc:3607101840 cname:HBIYGUr3qbIk+XZ5
a=ssrc:3607101840 msid:pixelstreaming_video_stream_id pixelstreaming_video_track_label
a=ssrc:3607101840 mslabel:pixelstreaming_video_stream_id
a=ssrc:3607101840 label:pixelstreaming_video_track_label
a=ssrc:2307396177 cname:HBIYGUr3qbIk+XZ5
a=ssrc:2307396177 msid:pixelstreaming_video_stream_id pixelstreaming_video_track_label
a=ssrc:2307396177 mslabel:pixelstreaming_video_stream_id
a=ssrc:2307396177 label:pixelstreaming_video_track_label
m=audio 9 UDP/TLS/RTP/SAVPF 111 63 110
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:jLl9
a=ice-pwd:EFNoA1qICWOSpNpJCU+vTo72
a=ice-options:trickle
a=fingerprint:sha-256 F2:8B:C6:9C:26:5E:06:66:4C:C4:AC:FE:F1:AB:08:63:9C:B8:5E:1E:EA:05:B1:B9:73:DA:BE:AF:E3:02:F6:16
a=setup:actpass
a=mid:1
a=extmap:14 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendrecv
a=msid:pixelstreaming_audio_stream_id pixelstreaming_audio_track_label
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 maxaveragebitrate=510000;maxplaybackrate=48000;minptime=3;sprop-stereo=1;stereo=1;usedtx=0;useinbandfec=1
a=rtpmap:63 red/48000/2
a=fmtp:63 111/111
a=rtpmap:110 telephone-event/48000
a=maxptime:120
a=ptime:20
a=ssrc:2271411708 cname:HBIYGUr3qbIk+XZ5
a=ssrc:2271411708 msid:pixelstreaming_audio_stream_id pixelstreaming_audio_track_label
a=ssrc:2271411708 mslabel:pixelstreaming_audio_stream_id
a=ssrc:2271411708 label:pixelstreaming_audio_track_label
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:jLl9
a=ice-pwd:EFNoA1qICWOSpNpJCU+vTo72
a=ice-options:trickle
a=fingerprint:sha-256 F2:8B:C6:9C:26:5E:06:66:4C:C4:AC:FE:F1:AB:08:63:9C:B8:5E:1E:EA:05:B1:B9:73:DA:BE:AF:E3:02:F6:16
a=setup:actpass
a=mid:2
a=sctp-port:5000
a=max-message-size:262144

and the firefox responds with the answer:

v=0
o=mozilla...THIS_IS_SDPARTA-99.0 845649173605096113 0 IN IP4 0.0.0.0
s=-
t=0 0
a=sendrecv
a=fingerprint:sha-256 76:3A:03:05:08:32:47:BC:C4:01:9F:9E:10:D2:59:67:F1:CF:65:91:41:02:B5:2B:3F:33:32:72:BF:13:E0:3C
a=group:BUNDLE 1 2
a=ice-options:trickle
a=msid-semantic:WMS *
m=video 0 UDP/TLS/RTP/SAVPF 120
c=IN IP4 0.0.0.0
a=inactive
a=mid:0
a=rtpmap:120 VP8/90000
m=audio 9 UDP/TLS/RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=recvonly
a=extmap:14 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid
a=fmtp:111 maxplaybackrate=48000;stereo=1;useinbandfec=1;maxaveragebitrate=510000
a=ice-pwd:54b48554d7c44241040de442179948e6
a=ice-ufrag:f402eba5
a=mid:1
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=setup:active
a=ssrc:3992183161 cname:{9b2fd0c0-93fc-4e3b-b8d4-1b5d9eefbc08}
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=sendrecv
a=ice-pwd:54b48554d7c44241040de442179948e6
a=ice-ufrag:f402eba5
a=mid:2
a=setup:active
a=sctp-port:5000
a=max-message-size:1073741823

Don't know why firefox is referring there to VP8 even it's clear that the offer clearly states VP9. The console also shows the following error: Uncaught (in promise) DOMException: Cannot set ICE candidate for level=0 mid=0: No such transceiver.

A correct answer (Chrome) looks like this:

v=0
o=- 4944108942500542997 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1 2
a=extmap-allow-mixed
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:LRov
a=ice-pwd:DMYV6OediN1TYOZr16k9tkyT
a=ice-options:trickle
a=fingerprint:sha-256 DD:2E:29:B0:4F:31:3D:DA:87:FF:5C:86:90:AC:F9:82:25:75:DE:29:E5:18:8C:B8:0E:C5:68:22:3E:AB:11:36
a=setup:active
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 urn:3gpp:video-orientation
a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space
a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=recvonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP9/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=fmtp:96 profile-id=0
m=audio 9 UDP/TLS/RTP/SAVPF 111 63 110
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:LRov
a=ice-pwd:DMYV6OediN1TYOZr16k9tkyT
a=ice-options:trickle
a=fingerprint:sha-256 DD:2E:29:B0:4F:31:3D:DA:87:FF:5C:86:90:AC:F9:82:25:75:DE:29:E5:18:8C:B8:0E:C5:68:22:3E:AB:11:36
a=setup:active
a=mid:1
a=extmap:14 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid
a=recvonly
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 maxaveragebitrate=510000;minptime=10;stereo=1;useinbandfec=1
a=rtpmap:63 red/48000/2
a=fmtp:63 111/111
a=rtpmap:110 telephone-event/48000
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:LRov
a=ice-pwd:DMYV6OediN1TYOZr16k9tkyT
a=ice-options:trickle
a=fingerprint:sha-256 DD:2E:29:B0:4F:31:3D:DA:87:FF:5C:86:90:AC:F9:82:25:75:DE:29:E5:18:8C:B8:0E:C5:68:22:3E:AB:11:36
a=setup:active
a=mid:2
a=sctp-port:5000
a=max-message-size:262144

The corresponding error message from firefox ("No such transceiver") is also missing on chrome. Chrome, Safari, Opera, Edge are working without any issue.

I've looked around the mozilla bugzilla bug list, but couldn't find anything that clearly would address this. Also the changelogs of the firefox versions after 124 doen't show anything helpful.

mcottontensor commented 2 weeks ago

There was a recent pull (#204) that was merged into the main branches. Have you tried since that went in? It sounds like it should address this issue. Let me know how it goes.

Aeddon commented 2 weeks ago

Thanks for that info, I will check this out.

Aeddon commented 1 week ago

@mcottontensor Thanks for the hint, it works like a charm!