Does VP8/VP9 work in packaged PixelStreaming builds? (Linux)

Setup:

  • UE 5.4.2/5.4.3
  • OS: Fedora 39 x86_64 (Linux)
  • libvpx: 1.13.1
  • libwebrtc: 5414

Using PixelStreaming in UE Editor works like a charme, but after packaging, VP8/VP9 do not work anymore. I tracked it down to VideoEncoderSingleLayerVPX.cpp, which returns -7 (WEBRTC_VIDEO_CODEC_UNINITIALIZED) instead of 0 (WEBRTC_VIDEO_CODEC_OK) in FVideoEncoderSingleLayerVPX::InitEncode. This initialization error is not logged by default.

  • Editor and Standalone get the very same input:
webrtc::VideoCodec const* InCodecSettings:
width: 1280, height: 720, maxBitrate: 100000, minBitrate: 100, maxFramerate: 60.000000, qpMax: 56, active: 1, codecType: 1 (VP8)/2 (VP9)
sizeof(webrtc::VideoCodec) == 408

VideoEncoder::Settings const& settings:
SimulcastParameters.Layers.Num: 1, LastStreamIndex=1
Scaling: 1.000000, MinBitrate: 0, MaxBitrate: 1000000000
sizeof(VideoEncoder::Settings) == 16
  • libvpx is stripped of libwebrtc 5414 (see Engine/Source/ThirdParty/WebRTC/WebRTC.Build.cs) by using Engine/Source/ThirdParty/libvpx
  • libvpx_fPIC.a is used for modular builds (Editor/Standalone). libvpx.a is used for Monolithic (packaged) builds. (see Engine/Source/ThirdParty/libvpx/libvpx.Build.cs)
  • libvpx has some memory layout issues in optimized builds
  • Linking libvpx 1.14.1 does not help.

EDIT: Using WebRTC 4464 from UE 5.3 works with packaged builds.

Hi @PhDittmann,

Looks like there is an ABI issue with WebRTC and LibVPX on UE 5.4 on Linux.

Can you try transplanting this collection of files on top of your Unreal Engine Linux source code and then recompiling the engine.

https://drive.google.com/file/d/1Ny8z9I2KzK_ywoBEnQnP0rVBU-vM-I4G/view?usp=drive_link

Let me know how it goes.

Regards, Luke.

Hi Luke,

I replaced the libs in Engine/Source/ThirdParty/WebRTC/5414/Lib/Linux/x86_64-unknown-linux-gnu/Release and it works! (except for Firefox)

Tested with UE 5.4.2, streaming within the UE Editor and after packaging, up to 3 clients simultaneously, VP8 and VP9, Brave, Chrome, Duckduckgo, and Firefox.

Mozilla Firefox 129.0 (64-bit) on Fedora and Android stops at ‘WEBRTC CONNECTION NEGOTIATED’. The console shows the error Uncaught (in promise) DOMException: Cannot set ICE candidate for level=0 mid=0: No such transceiver.

Thanks so much for testing this! I am very glad it works for you now!

Mozilla Firefox 129.0 (64-bit) on Fedora and Android stops at ‘WEBRTC CONNECTION NEGOTIATED’. The console shows the error Uncaught (in promise) DOMException: Cannot set ICE candidate for level=0 mid=0: No such transceiver.

Very curious. Are you certain you have this frontend change applied? #204

You’re right. I tested with an outdated version. PixelStreamingInfrastructure 5.4-1.1.7+ solves the Firefox issue.

Thanks for your quick responses!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.