adamrehn / pixel-streaming-linux

Issue tracker repository for Pixel Streaming for Linux
https://adamrehn.com/articles/pixel-streaming-in-linux-containers/
22 stars 7 forks source link

Upgrading WebRTC to newer version #31

Closed lukehb closed 3 years ago

lukehb commented 3 years ago

This issue is ported from our old issue tracker for public visibility.

Currently we link against a version of WebRTC that is slightly further ahead than release 70 (from what we can tell this is the version that the binaries that Setup.sh provides). Upgrading to a newer version will give us all the enhancements that has come in the 15 or so versions since.

We have made some progress on this with version 85 however it require significant changes to the current way we build WebRTC and how the Pixel Streaming plugin interacts with it. Any updates to this will be posted here and any outside insights would be appreciated.

Additionally, there is also a bug with Pixel Streaming where stream resolution drops, video quality degrades, and stream quality never recovers to the original (despite network connection being fine). There is some hope that upgrading WebRTC will resolve this; however, we cannot say for sure it will. Regardless, an upgrade of WebRTC brings other benefits to Pixel Streaming.

Note to ourselves (or anyone external who wants to attempt the WebRTC upgrade):

  1. Upgrade our WebRTC.Dockerfile and Build.sh to build WebRTC M88.
  2. Once you have compiled Linux binaries/headers for WebRTC M88, copy those into Engine/Source/ThirdParty/WebRTC/{YouRev}.
  3. Modify WebRTC.build.cs to use your revision.
  4. Try to compile, see what breaks, report it here or begin fixing.
  5. If you get it to compile, try to run, see what breaks, report it here or begin fixing.

If you are targeting M88, our current progress on upgrading to M88 is in the 4.25-webrtc-exp (note, it is broken currently).

Note: We know Pixel Streaming is using parts of the WebRTC API that have changed from M70 to M88, so we already know it won't compile.

lukehb commented 3 years ago

Capturing the conversation from the old issue tracker:

Z. Why specifically version 85 rather than the current one, M88?

A. We need git commit hashes for our build process and so far we have found that the easiest way to get them is through the WebRTC change log which only lists M85 as the latest. If you know of a better way to find them we would be happy to switch.

Z. For some reason they've stopped updating that page, but the release notes for newer versions are still available here and link to the branch. https://groups.google.com/g/discuss-webrtc/c/A0FjOcTW2c0/m/UAv-veyPCAAJ Chrome 88 became the stable version fairly recently.

A. Thanks for the intel we will look at that version instead for the update.

Z. One thing that particularly stands out there is this comment:

RTP Datachannels are going away As of M88, use of RTP datachannels will cause a deprecation warning. We expect to remove them altogether in M90

Z. If I'm understanding the code correctly, Pixel Streaming currently uses RTP channels. Does that mean, if not upgraded before the release of Chrome 90, it will just... stop working?

L. We have done some research and asked our contacts, the removal of RTP data channels is a non-issue for Pixel Streaming. Pixel Streaming is using SCTP for data channels, which will remain well supported across browsers. RTP will remain a supported transport for video/audio - so no problems there either. According to our research, RTP data channels were never widely adopted anyway, so their removal is not too surprising as it turns out.

dai-martov commented 3 years ago

Hello, i've been having success with running a pixel streaming game , but when i updated my Chrome browser from 88.0.4324.182 to 89.0.4389.72, and i try to access the game from the updated browser, it caused the container to crash with the following message:

[2021.03.03-22.57.03:618][373]LogCudaVideoEncoder: Buffer #4 (0) dropped
[2021.03.03-22.57.03:635][374]LogCudaVideoEncoder: Buffer #5 (0) dropped
[2021.03.03-22.57.03:635][374]PixelStreamer: FPlayerSession::OnIceCandidate : PlayerId=107
[2021.03.03-22.57.03:635][374]PixelStreamer: FPlayerSession::OnIceGatheringChange : PlayerId=107, NewState=IceGatheringComplete
[2021.03.03-22.57.03:651][375]LogCudaVideoEncoder: Buffer #6 (0) dropped
[2021.03.03-22.57.03:668][376]LogCudaVideoEncoder: Buffer #7 (0) dropped
[2021.03.03-22.57.03:685][377]LogCudaVideoEncoder: Buffer #8 (0) dropped
[2021.03.03-22.57.03:701][378]LogCudaVideoEncoder: Buffer #9 (0) dropped
[2021.03.03-22.57.03:718][379]LogCudaVideoEncoder: Buffer #10 (0) dropped
[2021.03.03-22.57.03:735][380]LogCudaVideoEncoder: Buffer #11 (0) dropped
[2021.03.03-22.57.03:751][381]LogCudaVideoEncoder: Buffer #12 (0) dropped
[2021.03.03-22.57.03:751][381]PixelStreamer: FPlayerSession::OnIceConnectionChange : PlayerId=107, NewState=IceConnectionConnected
[2021.03.03-22.57.03:768][382]PixelStreamer: FVideoEncoder::SetRateAllocation : PlayerId=107, Bitrate=10000 kbps, framerate=60
[2021.03.03-22.57.03:785][383]LogCudaVideoEncoder: Created texture 0x7f43ce8f8200 for CUDA
[2021.03.03-22.57.03:785][383]PixelStreamer: FPlayerSession::OnDataChannel : PlayerId=107
[2021.03.03-22.57.03:851][387]PixelStreamer: FVideoEncoder::SetRateAllocation : PlayerId=107, Bitrate=20000 kbps, framerate=60
[2021.03.03-22.57.03:901][390]PixelStreamer: FVideoEncoder::SetRateAllocation : PlayerId=107, Bitrate=18151 kbps, framerate=60
[2021.03.03-22.57.06:735][560]LogPixelStreamingSS: <- SS: {"type":"playerDisconnected","playerId":107}
[2021.03.03-22.57.06:735][560]PixelStreamer: player 107 disconnected
[2021.03.03-22.57.06:735][560]PixelStreamer: FPlayerSession::~FPlayerSession: PlayerId=107
[2021.03.03-22.57.06:739][560]PixelStreamer: WebRTC VideoEncoder destroyed
[2021.03.03-22.57.06:739][560]LogCudaVideoEncoder: Buffer #192 (1) dropped
[2021.03.03-23.43.15:119][653]LogPixelStreamingSS: <- SS: {"type":"offer","sdp":"v=0\r\no=- 6919600428419699313 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\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:DrTn\r\na=ice-pwd:r0BCSLDWOzD2EDsEi6F6uXnL\r\na=ice-options:trickle\r\na=fingerprint:sha-256 42:06:CD:1B:86:43:DA:F5:BF:C2:DF:8E:E6:89:0E:B4:96:CF:FC:94:74:DE:99:FF:31:8C:D2:6B:75:74:89:C1\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=recvonly\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\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 102 121 127 120 125 107 108 109 124 119 123 118 114 115 116 35\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:DrTn\r\na=ice-pwd:r0BCSLDWOzD2EDsEi6F6uXnL\r\na=ice-options:trickle\r\na=fingerprint:sha-256 42:06:CD:1B:86:43:DA:F5:BF:C2:DF:8E:E6:89:0E:B4:96:CF:FC:94:74:DE:99:FF:31:8C:D2:6B:75:74:89:C1\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=recvonly\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:122 VP9/90000\r\na=rtcp-fb:122 goog-remb\r\na=rtcp-fb:122 transport-cc\r\na=rtcp-fb:122 ccm fir\r\na=rtcp-fb:122 nack\r\na=rtcp-fb:122 nack pli\r\na=fmtp:122 profile-id=1\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;x-google-start-bitrate=10000;x-google-max-bitrate=20000\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;x-google-start-bitrate=10000;x-google-max-bitrate=20000\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;x-google-start-bitrate=10000;x-google-max-bitrate=20000\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;x-google-start-bitrate=10000;x-google-max-bitrate=20000\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=4d001f;x-google-start-bitrate=10000;x-google-max-bitrate=20000\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=64001f;x-google-start-bitrate=10000;x-google-max-bitrate=20000\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=rtpmap:35 flexfec-03/90000\r\na=rtcp-fb:35 goog-remb\r\na=rtcp-fb:35 transport-cc\r\na=fmtp:35 repair-window=10000000\r\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:DrTn\r\na=ice-pwd:r0BCSLDWOzD2EDsEi6F6uXnL\r\na=ice-options:trickle\r\na=fingerprint:sha-256 42:06:CD:1B:86:43:DA:F5:BF:C2:DF:8E:E6:89:0E:B4:96:CF:FC:94:74:DE:99:FF:31:8C:D2:6B:75:74:89:C1\r\na=setup:actpass\r\na=mid:2\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n","playerId":108}
[2021.03.03-23.43.15:119][653]LogPixelStreamingSS: Error: Failed to parse answer's SDP
v=0
o=- 6919600428419699313 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=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:DrTn
a=ice-pwd:r0BCSLDWOzD2EDsEi6F6uXnL
a=ice-options:trickle
a=fingerprint:sha-256 42:06:CD:1B:86:43:DA:F5:BF:C2:DF:8E:E6:89:0E:B4:96:CF:FC:94:74:DE:99:FF:31:8C:D2:6B:75:74:89:C1
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=recvonly
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:112 telephone-event/32000
a=rtpmap:113 telephone-event/16000
a=rtpmap:126 telephone-event/8000
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 102 121 127 120 125 107 108 109 124 119 123 118 114 115 116 35
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:DrTn
a=ice-pwd:r0BCSLDWOzD2EDsEi6F6uXnL
a=ice-options:trickle
a=fingerprint:sha-256 42:06:CD:1B:86:43:DA:F5:BF:C2:DF:8E:E6:89:0E:B4:96:CF:FC:94:74:DE:99:FF:31:8C:D2:6B:75:74:89:C1
a=setup:actpass
a=mid:1
a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:13 urn:3gpp:video-orientation
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:11 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:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=recvonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/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 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=fmtp:98 profile-id=0
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:100 VP9/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=fmtp:100 profile-id=2
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
a=rtpmap:122 VP9/90000
a=rtcp-fb:122 goog-remb
a=rtcp-fb:122 transport-cc
a=rtcp-fb:122 ccm fir
a=rtcp-fb:122 nack
a=rtcp-fb:122 nack pli
a=fmtp:122 profile-id=1
a=rtpmap:102 H264/90000
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 transport-cc
a=rtcp-fb:102 ccm fir
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f;x-google-start-bitrate=10000;x-google-max-bitrate=20000
a=rtpmap:121 rtx/90000
a=fmtp:121 apt=102
a=rtpmap:127 H264/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f;x-google-start-bitrate=10000;x-google-max-bitrate=20000
a=rtpmap:120 rtx/90000
a=fmtp:120 apt=127
a=rtpmap:125 H264/90000
a=rtcp-fb:125 goog-remb
a=rtcp-fb:125 transport-cc
a=rtcp-fb:125 ccm fir
a=rtcp-fb:125 nack
a=rtcp-fb:125 nack pli
a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f;x-google-start-bitrate=10000;x-google-max-bitrate=20000
a=rtpmap:107 rtx/90000
a=fmtp:107 apt=125
a=rtpmap:108 H264/90000
a=rtcp-fb:108 goog-remb
a=rtcp-fb:108 transport-cc
a=rtcp-fb:108 ccm fir
a=rtcp-fb:108 nack
a=rtcp-fb:108 nack pli
a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f;x-google-start-bitrate=10000;x-google-max-bitrate=20000
a=rtpmap:109 rtx/90000
a=fmtp:109 apt=108
a=rtpmap:124 H264/90000
a=rtcp-fb:124 goog-remb
a=rtcp-fb:124 transport-cc
a=rtcp-fb:124 ccm fir
a=rtcp-fb:124 nack
a=rtcp-fb:124 nack pli
a=fmtp:124 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f;x-google-start-bitrate=10000;x-google-max-bitrate=20000
a=rtpmap:119 rtx/90000
a=fmtp:119 apt=124
a=rtpmap:123 H264/90000
a=rtcp-fb:123 goog-remb
a=rtcp-fb:123 transport-cc
a=rtcp-fb:123 ccm fir
a=rtcp-fb:123 nack
a=rtcp-fb:123 nack pli
a=fmtp:123 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001f;x-google-start-bitrate=10000;x-google-max-bitrate=20000
a=rtpmap:118 rtx/90000
a=fmtp:118 apt=123
a=rtpmap:114 red/90000
a=rtpmap:115 rtx/90000
a=fmtp:115 apt=114
a=rtpmap:116 ulpfec/90000
a=rtpmap:35 flexfec-03/90000
a=rtcp-fb:35 goog-remb
a=rtcp-fb:35 transport-cc
a=fmtp:35 repair-window=10000000
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:DrTn
a=ice-pwd:r0BCSLDWOzD2EDsEi6F6uXnL
a=ice-options:trickle
a=fingerprint:sha-256 42:06:CD:1B:86:43:DA:F5:BF:C2:DF:8E:E6:89:0E:B4:96:CF:FC:94:74:DE:99:FF:31:8C:D2:6B:75:74:89:C1
a=setup:actpass
a=mid:2
a=sctp-port:5000
a=max-message-size:262144

[2021.03.03-23.43.15:219][659]LogPixelStreamingSS: Connection to SS closed: 
    status 1000
    reason: Successfully closed connection to our peer
    was clean: true
[2021.03.03-23.43.15:219][659]LogPixelStreamingSS: Connecting to SS ws://127.0.0.1:8888
[2021.03.03-23.43.15:219][659]LogWebSockets: Warning: FLwsWebSocket[1]::Close: Already closing, ignoring subsequent attempt
[2021.03.03-23.43.15:285][663]LogPixelStreamingSS: Connected to SS
[2021.03.03-23.43.15:319][665]LogPixelStreamingSS: <- SS: {"type":"config","peerConnectionOptions":{"iceServers":[{"urls":["stun:stun.voip.aebc.com"]}]}}
[2021.03.03-23.43.15:319][665]LogPixelStreamingSS: <- SS: {"type":"playerDisconnected","playerId":108}
[2021.03.03-23.43.15:319][665]PixelStreamer: player 108 disconnected
[2021.03.03-23.43.24:153][195]LogPixelStreamingSS: <- SS: {"type":"offer","sdp":"v=0\r\no=- 6997911582057141328 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\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:nAF3\r\na=ice-pwd:ow/LbVMWtZuBixzqIDpXLC5i\r\na=ice-options:trickle\r\na=fingerprint:sha-256 D8:D8:90:F4:DA:97:94:27:D7:AA:37:22:BB:59:4A:82:7F:9F:1F:3E:E5:21:DF:D6:34:67:0C:57:79:7A:4C:B7\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=recvonly\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\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 102 121 127 120 125 107 108 109 124 119 123 118 114 115 116 35\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:nAF3\r\na=ice-pwd:ow/LbVMWtZuBixzqIDpXLC5i\r\na=ice-options:trickle\r\na=fingerprint:sha-256 D8:D8:90:F4:DA:97:94:27:D7:AA:37:22:BB:59:4A:82:7F:9F:1F:3E:E5:21:DF:D6:34:67:0C:57:79:7A:4C:B7\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=recvonly\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:122 VP9/90000\r\na=rtcp-fb:122 goog-remb\r\na=rtcp-fb:122 transport-cc\r\na=rtcp-fb:122 ccm fir\r\na=rtcp-fb:122 nack\r\na=rtcp-fb:122 nack pli\r\na=fmtp:122 profile-id=1\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;x-google-start-bitrate=10000;x-google-max-bitrate=20000\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;x-google-start-bitrate=10000;x-google-max-bitrate=20000\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;x-google-start-bitrate=10000;x-google-max-bitrate=20000\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;x-google-start-bitrate=10000;x-google-max-bitrate=20000\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=4d001f;x-google-start-bitrate=10000;x-google-max-bitrate=20000\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=64001f;x-google-start-bitrate=10000;x-google-max-bitrate=20000\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=rtpmap:35 flexfec-03/90000\r\na=rtcp-fb:35 goog-remb\r\na=rtcp-fb:35 transport-cc\r\na=fmtp:35 repair-window=10000000\r\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:nAF3\r\na=ice-pwd:ow/LbVMWtZuBixzqIDpXLC5i\r\na=ice-options:trickle\r\na=fingerprint:sha-256 D8:D8:90:F4:DA:97:94:27:D7:AA:37:22:BB:59:4A:82:7F:9F:1F:3E:E5:21:DF:D6:34:67:0C:57:79:7A:4C:B7\r\na=setup:actpass\r\na=mid:2\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n","playerId":109}
[2021.03.03-23.43.24:153][195]LogPixelStreamingSS: Error: Failed to parse answer's SDP
v=0
o=- 6997911582057141328 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=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:nAF3
a=ice-pwd:ow/LbVMWtZuBixzqIDpXLC5i
a=ice-options:trickle
a=fingerprint:sha-256 D8:D8:90:F4:DA:97:94:27:D7:AA:37:22:BB:59:4A:82:7F:9F:1F:3E:E5:21:DF:D6:34:67:0C:57:79:7A:4C:B7
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=recvonly
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:112 telephone-event/32000
a=rtpmap:113 telephone-event/16000
a=rtpmap:126 telephone-event/8000
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 102 121 127 120 125 107 108 109 124 119 123 118 114 115 116 35
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:nAF3
a=ice-pwd:ow/LbVMWtZuBixzqIDpXLC5i
a=ice-options:trickle
a=fingerprint:sha-256 D8:D8:90:F4:DA:97:94:27:D7:AA:37:22:BB:59:4A:82:7F:9F:1F:3E:E5:21:DF:D6:34:67:0C:57:79:7A:4C:B7
a=setup:actpass
a=mid:1
a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:13 urn:3gpp:video-orientation
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:11 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:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=recvonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/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 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=fmtp:98 profile-id=0
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:100 VP9/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=fmtp:100 profile-id=2
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
a=rtpmap:122 VP9/90000
a=rtcp-fb:122 goog-remb
a=rtcp-fb:122 transport-cc
a=rtcp-fb:122 ccm fir
a=rtcp-fb:122 nack
a=rtcp-fb:122 nack pli
a=fmtp:122 profile-id=1
a=rtpmap:102 H264/90000
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 transport-cc
a=rtcp-fb:102 ccm fir
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f;x-google-start-bitrate=10000;x-google-max-bitrate=20000
a=rtpmap:121 rtx/90000
a=fmtp:121 apt=102
a=rtpmap:127 H264/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f;x-google-start-bitrate=10000;x-google-max-bitrate=20000
a=rtpmap:120 rtx/90000
a=fmtp:120 apt=127
a=rtpmap:125 H264/90000
a=rtcp-fb:125 goog-remb
a=rtcp-fb:125 transport-cc
a=rtcp-fb:125 ccm fir
a=rtcp-fb:125 nack
a=rtcp-fb:125 nack pli
a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f;x-google-start-bitrate=10000;x-google-max-bitrate=20000
a=rtpmap:107 rtx/90000
a=fmtp:107 apt=125
a=rtpmap:108 H264/90000
a=rtcp-fb:108 goog-remb
a=rtcp-fb:108 transport-cc
a=rtcp-fb:108 ccm fir
a=rtcp-fb:108 nack
a=rtcp-fb:108 nack pli
a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f;x-google-start-bitrate=10000;x-google-max-bitrate=20000
a=rtpmap:109 rtx/90000
a=fmtp:109 apt=108
a=rtpmap:124 H264/90000
a=rtcp-fb:124 goog-remb
a=rtcp-fb:124 transport-cc
a=rtcp-fb:124 ccm fir
a=rtcp-fb:124 nack
a=rtcp-fb:124 nack pli
a=fmtp:124 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f;x-google-start-bitrate=10000;x-google-max-bitrate=20000
a=rtpmap:119 rtx/90000
a=fmtp:119 apt=124
a=rtpmap:123 H264/90000
a=rtcp-fb:123 goog-remb
a=rtcp-fb:123 transport-cc
a=rtcp-fb:123 ccm fir
a=rtcp-fb:123 nack
a=rtcp-fb:123 nack pli
a=fmtp:123 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001f;x-google-start-bitrate=10000;x-google-max-bitrate=20000
a=rtpmap:118 rtx/90000
a=fmtp:118 apt=123
a=rtpmap:114 red/90000
a=rtpmap:115 rtx/90000
a=fmtp:115 apt=114
a=rtpmap:116 ulpfec/90000
a=rtpmap:35 flexfec-03/90000
a=rtcp-fb:35 goog-remb
a=rtcp-fb:35 transport-cc
a=fmtp:35 repair-window=10000000
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:nAF3
a=ice-pwd:ow/LbVMWtZuBixzqIDpXLC5i
a=ice-options:trickle
a=fingerprint:sha-256 D8:D8:90:F4:DA:97:94:27:D7:AA:37:22:BB:59:4A:82:7F:9F:1F:3E:E5:21:DF:D6:34:67:0C:57:79:7A:4C:B7
a=setup:actpass
a=mid:2
a=sctp-port:5000
a=max-message-size:262144

[2021.03.03-23.43.24:154][195]LogPixelStreamingSS: <- SS: {"type":"iceCandidate","candidate":{"candidate":"candidate:3988902457 1 udp 2113937151 bd57a74d-0689-4122-8c35-3fe2264306d8.local 54029 typ host generation 0 ufrag nAF3 network-cost 999","sdpMid":"0","sdpMLineIndex":0},"playerId":109}
[2021.03.03-23.43.24:154][195]LogOutputDevice: Warning: 

Script Stack (0 frames):

Assertion failed: Player [File:/home/ue4/UnrealEngine/Engine/Plugins/Media/PixelStreaming/Source/PixelStreaming/Private/Streamer.cpp] [Line: 184] 
player 109 not found
[2021.03.03-23.43.24:162][195]LogCore: Error: appError called: Assertion failed: Player [File:/home/ue4/UnrealEngine/Engine/Plugins/Media/PixelStreaming/Source/PixelStreaming/Private/Streamer.cpp] [Line: 184] 
player 109 not found

Signal 11 caught.
Malloc Size=65538 LargeMemoryPoolOffset=65554 
CommonUnixCrashHandler: Signal=11
[2021.03.03-23.43.24:187][195]LogCore: === Critical error: ===
Unhandled Exception: SIGSEGV: invalid attempt to write memory at address 0x0000000000000003

[2021.03.03-23.43.24:187][195]LogCore: Assertion failed: Player [File:/home/ue4/UnrealEngine/Engine/Plugins/Media/PixelStreaming/Source/PixelStreaming/Private/Streamer.cpp] [Line: 184] 
player 109 not found

0x00000000036e59be MyProject2!FGenericPlatformMisc::RaiseException(unsigned int)()
0x0000000003878f47 MyProject2!FOutputDevice::LogfImpl(char16_t const*, ...)()
0x0000000003820b24 MyProject2!AssertFailedImplV(char const*, char const*, int, char16_t const*, __va_list_tag*)()
0x00000000038209cb MyProject2!FDebug::CheckVerifyFailedImpl(char const*, char const*, int, char16_t const*, ...)()
0x0000000002cb3542 MyProject2!FStreamer::OnRemoteIceCandidate(unsigned int, TUniquePtr<webrtc::IceCandidateInterface, TDefaultDelete<webrtc::IceCandidateInterface> >)()
0x0000000002caf71e MyProject2!FSignallingServerConnection::OnPlayerIceCandidate(TSharedPtr<FJsonObject, (ESPMode)0> const&)()
0x0000000002cae163 MyProject2!FSignallingServerConnection::OnMessage(FString const&)()
0x0000000002ccde1a MyProject2!TBaseFunctorDelegateInstance<void (FString const&), FSignallingServerConnection::FSignallingServerConnection(FString const&, FSignallingServerConnectionObserver&)::$_124>::ExecuteIfSafe(FString const&) const()
0x00000000038ddb2d MyProject2!TBaseMulticastDelegate<void, FString const&>::Broadcast(FString const&) const()
0x000000000754e3d6 MyProject2!FLwsWebSocket::GameThreadTick()()
0x000000000755024f MyProject2!FLwsWebSocketsManager::GameThreadTick(float)()
0x0000000003695997 MyProject2!FTicker::Tick(float)()
0x00000000036c2f73 MyProject2!UE4Function_Private::TFunctionRefCaller<FBackgroundableTicker::FBackgroundableTicker()::$_27, bool (float)>::Call(void*, float&)()
0x00000000036d11ed MyProject2!TBaseFunctorDelegateInstance<bool (float), TFunction<bool (float)> >::Execute(float) const()
0x0000000003695997 MyProject2!FTicker::Tick(float)()
0x0000000002c7a7b5 MyProject2!FEngineLoop::Tick()()
0x0000000002c7e5da MyProject2!GuardedMain(char16_t const*)()
0x00000000074e141b MyProject2!CommonUnixMain(int, char**, int (*)(char16_t const*), void (*)())()
0x00007f4448de2bf7 libc.so.6!__libc_start_main(+0xe6)
0x0000000002c72029 MyProject2!_start()

[2021.03.03-23.43.24:199][195]LogExit: Executing StaticShutdownAfterError
Engine crash handling finished; re-raising signal 11 for the default handler. Good bye.
Segmentation fault (core dumped)

I think it's related to webrtc and that i need to upgrade it with the engine build in order to fix this? Thank you for your time

lukehb commented 3 years ago

So basically:

It works when you use Chrome 88.0.4324.182 But fails when you use Chrome 89.0.4389.72

Is that correct?

This line from the Unreal Engine seems suspect:

Error: Failed to parse answer's SDP

Upgrading WebRTC in the Unreal Engine is not an easy task, we are working on this but have no estimate when it will be done.

dai-martov commented 3 years ago

yes that is correct, thanks for your input.

sasmaster commented 3 years ago

Hi. Do you build the WebRTC binaries with the same tool chain used to build UE4? I just wonder if grabbing your pre-built libs won't result in some ABI wreck on my side. I use UE4 4.26 Yes, I know you don't support it yet ,but I am taking care of that thing on my side. So the only thing I am currently not sure about is whether I can just link with your bins or must build WebRTC . Thanks!

lukehb commented 3 years ago

You should be able to just link our binaries on Linux. No need to rebuild WebRTC (thankfully, as it is a bit of nightmare).

Do you build the WebRTC binaries with the same tool chain used to build UE4?

Yes, we have taken some special care to build with tool chain that matches UE.

lukehb commented 3 years ago

Btw if anyone else is getting failures in Chrome 89+ and using Pixel Streaming 4.24-4.26.1 it is because the sdp sent by the Chrome browser is incompatible with Pixel Streaming in those versions. Easy workaround until WebRTC is upgraded is simply to modify that sdp that is sent by the browser. Simply add this to webrtcplayer.js config setup.

//If this is true in Chrome 89+ SDP is sent that is incompatible with UE WebRTC and breaks.
 this.cfg.offerExtmapAllowMixed = false;
adamrehn commented 3 years ago

Status update on this: upgrading WebRTC has turned out to be a massive undertaking, but is also critical for addressing the video quality degradation bug that currently plagues Pixel Streaming under both Windows and Linux. All development resources are now dedicated to this issue, blocking all other efforts including #44.

sasmaster commented 3 years ago

Hi. Sorry to intervene into your discussion. I was working on the integration of NVENC func for video files export (render sequencer to mp4 ).The first thing I did was to check the NVENC impl by Epic inside AVEncoder module. It doesn't look good. I tried its output and the HD quality was very average. They use CONST QP by default. I also found this:

                        ```
   if (Config.bFillerDataHack)
            {
                // Bitrate generated by NVENC is not very stable when the scene doesnt have a lot of movement
                // outputPictureTimingSEI enables the filling data when using CBR so that the bitrate generated
                // is much closer to the requested one and bandwidth estimation algorithms can work better.
                // Otherwise in a static scene it can send 50kbps when configuring 300kbps and it will never ramp up.
                if (NvEncConfig.rcParams.averageBitRate < 5000000)
                {
                    NvEncConfig.encodeCodecConfig.h264Config.outputPictureTimingSEI = 1;
                    NvEncConfig.rcParams.enableMinQP = 0;
                }
                else
                {
                    NvEncConfig.encodeCodecConfig.h264Config.outputPictureTimingSEI = 0;
                    NvEncConfig.rcParams.enableMinQP = 1;
                    NvEncConfig.rcParams.minQP = { 20, 20, 20 };
                }
            }

                       ```

I don't understand what's Config.bFillerDataHack but you can't use bitrate settings in Const QP mode as those get ignored.

I don't know what are requirements from WebRTC side but VBR would provide much better results. CBR can be fine as well, but will result in bitrate waste. I frames intervals is usually what's important for video streaming. I ended up implementing a separate version of the NVENC using the latest Video SDK (it also provides better presets API and support for 4K and HVEC) since their encoder setup doesn't look good to me. I have been working with NVidia Video SDK a lot outside Unreal and if you need any help there let me know, I am also interested to see Pixel streaming working well. I need it on Linux ;)

Regards.

wurrego commented 3 years ago

just popping in to see how progress is going with #31, since its been about 30 days since last post. Team here is anxious to move to 4.26 for the Cesium Ion support. Thanks and all the best

lukehb commented 3 years ago

@wurrego Does your team need updated WebRTC binaries for Windows or Linux? Because there are some working WebRTC M84 Windows binaries in the 4.27 branch of the Engine atm:

https://github.com/EpicGames/UnrealEngine/tree/4.27/Engine

I expect Linux binaries to follow shortly 😁

wurrego commented 3 years ago

Thanks for the reply @lukehb great news!, Linux only for us. Our systems are Ubuntu 20.04.

adrian-j-programmer commented 3 years ago

Hey, what's the status of this task? Do you guys have any potential release window?

lukehb commented 3 years ago

So in UE 4.27 there is an upgrade to WebRTC M84 with compatible binaries we have just started using those and are no longer pursuing this:

https://github.com/EpicGames/UnrealEngine/tree/4.27/Engine

If you run setup.bat it will download M84 binaries (depending on your platform) - haven't checked Linux yet but I know in 4.27 Linux Pixel Streaming is slated so I will expect the binaries soon.