I’m at a loss and almost about to pack it in with no way to get a binary of this plugin for Linux. If it was released with Debian I wouldn’t have to go to so much trouble. I needed it to demonstrate a background streaming service I have working on Windows. The Windows GVSbuild took minutes. Trying to build gst-plugin-rs in the meson build constantly fails with a SIGKILL at the webrtc plugins which is what I need. Ironically I had it built once somehow and then further attempts to build fails. The ram and cpu isn’t that high at that point.
It seems to be at the linker stage. Rust seems incredibly bloaty and system intensive. I only have 16GB of ram and doesn’t seem enough for it, I think Rust is a big mistake and overcomplicates things unnecessarily. The C code builds very fast up to this point. I’ve given Docker 15gb of ram and 20gb of swap space. And set cargo jobs to 1 and still fails. I made my image setup with alot of tricks to prevent the process stopping but nothing helped. I had to edit the meson options for this subproject to manually disable options as options as arguments doesn’t work with this plugin. Which I think is a bug.
I was able to somehow build with Cerbero in Docker. But Cerbero doesn’t build gst-python I need and disables things for the arm64 build. So Cerbero is a fail too. It was failing due to Windows case insensitive on mounts and a problem with rust packages poor naming conventions.
Any ideas ?
meson setup \
--buildtype=release \
--strip \
--pkgconfig.relocatable \
--prefix=/opt/gstreamer \
-Dlibdir=lib \
-Dgst-full-libraries=app,video,player \
-Dgst-examples=disabled\
-Dwebrtc=enabled \
-Drtsp_server=disabled \
-Dlibav=disabled \
-Dges=disabled \
-Dpython=enabled \
-Drs=enabled \
-Dgpl=enabled \
-Dqt5=disabled \
-Dqt6=disabled \
-Dtests=enabled \
-Dgtk_doc=disabled \
-Dgstreamer:examples=disabled \
-Dgstreamer:tests=disabled \
-Dgstreamer:doc=disabled \
-Dgst-plugins-base:examples=disabled \
-Dgst-plugins-bad:magicleap=disabled \
-Dgst-plugins-bad:examples=disabled \
-Dgst-plugins-good:examples=disabled \
-Dgst-plugins-rs:audiofx=disabled \
-Dgst-plugins-rs:claxon=disabled \
-Dgst-plugins-rs:csound=disabled \
-Dgst-plugins-rs:lewton=disabled \
-Dgst-plugins-rs:spotify=disabled \
-Dgst-plugins-rs:sodium=disabled \
-Dgst-plugins-rs:textahead=disabled \
-Dgst-plugins-rs:json=disabled \
-Dgst-plugins-rs:regex=disabled \
-Dgst-plugins-rs:textwrap=disabled \
-Dgst-plugins-rs:gtk4=disabled \
-Dgst-plugins-rs:webp=disabled \
-Dgst-plugins-rs:gif=disabled \
-Dgst-plugins-rs:quinn=disabled \
-Dgst-plugins-rs:reqwest=disabled \
-Dgst-plugins-rs:raptorq=disabled \
-Dgst-plugins-rs:reqwest=disabled \
-Dgst-plugins-rs:onvif=disabled \
--reconfigure \
build-gst-full
error: could not compile `gst-plugin-webrtc` (lib)
Caused by:
process didn't exit successfully: `rustc --crate-name gstrswebrtc --edition=2021 net/webrtc/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=254 --crate-type staticlib --crate-type cdylib --emit=dep-info,link -C opt-level=3 -C lto -C debuginfo=2 -C link-arg=-Wl,-soname,libgstrswebrtc.so --cfg cargo_c --print native-static-libs --cfg 'feature="aws"' --cfg 'feature="capi"' --cfg 'feature="default"' --cfg 'feature="janus"' --cfg 'feature="livekit"' --cfg 'feature="v1_22"' --cfg 'feature="web_server"' --cfg 'feature="whip"' --check-cfg 'cfg(docsrs)' --check-cfg 'cfg(feature, values("aws", "capi", "default", "doc", "janus", "livekit", "static", "v1_22", "web_server", "whip"))' -C metadata=4e0c532bc61a974c --out-dir /root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps --target x86_64-unknown-linux-gnu -L dependency=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps -L dependency=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/release/deps --extern anyhow=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libanyhow-ee3482b7a55fca8f.rlib --extern async_recursion=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/release/deps/libasync_recursion-72cf369141464b13.so --extern async_tungstenite=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libasync_tungstenite-850f70f36d25a8c1.rlib --extern aws_config=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libaws_config-fc0321fe8e916916.rlib --extern aws_credential_types=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libaws_credential_types-5475a68acf5ba637.rlib --extern aws_sdk_kinesisvideo=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libaws_sdk_kinesisvideo-065ad911618e032d.rlib --extern aws_sdk_kinesisvideosignaling=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libaws_sdk_kinesisvideosignaling-115d9e87bf4819a8.rlib --extern aws_sigv4=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libaws_sigv4-cf58d1d4aeba47c3.rlib --extern aws_smithy_http=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libaws_smithy_http-718fdfb190ba010f.rlib --extern aws_smithy_types=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libaws_smithy_types-a619e550a7d6720e.rlib --extern aws_types=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libaws_types-f00d0ddeb1489967.rlib --extern chrono=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libchrono-4b1f941dee18cb20.rlib --extern ctrlc=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libctrlc-a65b99c7d3d51d1d.rlib --extern data_encoding=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libdata_encoding-c478152b7ce59531.rlib --extern fastrand=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libfastrand-db2f7363fa0ba9a3.rlib --extern futures=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libfutures-9f49f20f7908813a.rlib --extern gst_plugin_webrtc_signalling=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libgst_plugin_webrtc_signalling-e33c36dad4f51148.rlib --extern gst_plugin_webrtc_protocol=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libgst_plugin_webrtc_signalling_protocol-f340ee55630b3d0f.rlib --extern gst=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libgstreamer-ac600e73faa14ed0.rlib --extern gst_app=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libgstreamer_app-af6ed29b94ea264d.rlib --extern gst_audio=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libgstreamer_audio-971156bade665fb8.rlib --extern gst_base=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libgstreamer_base-847f5c467c408c8b.rlib --extern gst_net=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libgstreamer_net-80f207b495ecca00.rlib --extern gst_rtp=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libgstreamer_rtp-22e15ba5188d7411.rlib --extern gst_sdp=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libgstreamer_sdp-29171c598ba3c54f.rlib --extern gst_utils=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libgstreamer_utils-8434275f87acfe24.rlib --extern gst_video=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libgstreamer_video-9ed2985bdf258c76.rlib --extern gst_webrtc=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libgstreamer_webrtc-ac94a07992be3fa5.rlib --extern http=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libhttp-36d28c4c5d7b66f1.rlib --extern human_bytes=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libhuman_bytes-7a9a71fd7ce4aa21.rlib --extern itertools=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libitertools-a569bb4c549efc77.rlib --extern livekit_api=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/liblivekit_api-e1bba729973b986a.rlib --extern livekit_protocol=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/liblivekit_protocol-644f96940a6139eb.rlib --extern once_cell=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libonce_cell-4b50ea7c7e138538.rlib --extern parse_link_header=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libparse_link_header-9cec396f2e7bdaf2.rlib --extern rand=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/librand-be6e65199feb2c15.rlib --extern reqwest=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libreqwest-888aa68cc1a1ea5b.rlib --extern serde=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libserde-122306a44813265c.rlib --extern serde_json=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libserde_json-402f85bf2b4e97b9.rlib --extern thiserror=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libthiserror-7a8c5e9ced0cdae5.rlib --extern tokio=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libtokio-5f14e2a032e12daf.rlib --extern tokio_native_tls=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libtokio_native_tls-b0965c3d45583753.rlib --extern tokio_stream=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libtokio_stream-af71e1a5746998c4.rlib --extern tracing=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libtracing-da60cd643be61609.rlib --extern tracing_log=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libtracing_log-d1dc6737db7a026e.rlib --extern tracing_subscriber=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libtracing_subscriber-7c367253fc9c689b.rlib --extern url=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/liburl-ec7c8a5aa4d5a2e0.rlib --extern url_escape=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/liburl_escape-453e75e05a709f74.rlib --extern uuid=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libuuid-a734a9e21a2e09cf.rlib --extern warp=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/deps/libwarp-fde9d19595c16cfc.rlib -C linker=cc -Z threads=1 -L native=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs/target/x86_64-unknown-linux-gnu/release/build/ring-e269624d400a8855/out -L native=/root/build/gstreamer/build-gst-full/subprojects/gstreamer/gst -L native=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-base/gst-libs/gst/app -L native=/root/build/gstreamer/build-gst-full/subprojects/gstreamer/gst -L native=/root/build/gstreamer/build-gst-full/subprojects/gstreamer/libs/gst/base -L native=/root/build/gstreamer/build-gst-full/subprojects/gstreamer/libs/gst/base -L native=/root/build/gstreamer/build-gst-full/subprojects/gstreamer/gst -L native=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-base/gst-libs/gst/audio -L native=/root/build/gstreamer/build-gst-full/subprojects/gstreamer/gst -L native=/root/build/gstreamer/build-gst-full/subprojects/gstreamer/libs/gst/base -L native=/root/build/gstreamer/build-gst-full/subprojects/gstreamer/libs/gst/net -L native=/root/build/gstreamer/build-gst-full/subprojects/gstreamer/gst -L native=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-base/gst-libs/gst/rtp -L native=/root/build/gstreamer/build-gst-full/subprojects/gstreamer/gst -L native=/root/build/gstreamer/build-gst-full/subprojects/gstreamer/libs/gst/base -L native=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-base/gst-libs/gst/sdp -L native=/root/build/gstreamer/build-gst-full/subprojects/gstreamer/gst -L native=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-base/gst-libs/gst/video -L native=/root/build/gstreamer/build-gst-full/subprojects/gstreamer/gst -L native=/root/build/gstreamer/build-gst-full/subprojects/gstreamer/libs/gst/base -L native=/root/build/gstreamer/build-gst-full/subprojects/gst-plugins-bad/gst-libs/gst/webrtc -L native=/root/build/gstreamer/build-gst-full/subprojects/gstreamer/gst -L native=/root/build/gstreamer/build-gst-full/subprojects/gstreamer/libs/gst/base` (signal: 9, SIGKILL: kill)
Error: CliError { error: Some(1 job failed), exit_code: 101 }
FAILED: subprojects/gst-plugins-rs/libgstrsrtp.so subprojects/gst-plugins-rs/libgstwebrtchttp.so subprojects/gst-plugins-rs/libgstrswebrtc.so
env PKG_CONFIG=/usr/bin/pkg-config 'RUSTC=rustc -C linker=cc' /usr/bin/python3 /root/build/gstreamer/subprojects/gst-plugins-rs/cargo_wrapper.py build /root/build/gstreamer/build-gst-full/subprojects/gst-plugins-rs /root/build/gstreamer/subprojects/gst-plugins-rs /root/build/gstreamer/build-gst-full release /opt/gstreamer lib --packages gst-plugin-rtp gst-plugin-webrtchttp gst-plugin-webrtc --depfile subprojects/gst-plugins-rs/gst-plugins-rs.dep --lib-suffixes so --features gst/v1_22 gst-sdp/v1_22 gst-video/v1_22 gst-webrtc/v1_22 gst-rtp/v1_22 gst-app/v1_22 --disable-doc
ninja: build stopped: subcommand failed.
root@docker-desktop:/build#
The Docker image I came up with. It almost worked.
# syntax = docker/dockerfile:1.2
FROM debian:bookworm-slim
ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8
ENV CARGO_HTTP_DEBUG=true
ENV CARGO_LOG=cargo::ops::registry=debug
ENV CARGO_HOME=/root/.cargo
ENV RUSTUP_HOME=/root/.cargo
ENV PATH=$RUSTUP_HOME/bin:$PATH
ENV XDG_CACHE_HOME=/build/src/.cache
ENV CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse
ENV RUSTFLAGS="-Z threads=1"
ENV CARGO_NET_GIT_FETCH_WITH_CLI=true
#ENV NSS_UNKNOWN_HOME=/home/user
ARG DEBIAN_FRONTEND=noninteractive
WORKDIR /build
# GStreamer needs meson version >= 1.1.
#$RUN groupadd -r builduser && useradd -r -g builduser builduser
COPY scripts/nsswitch/nsswitch.conf /etc/nsswitch.conf
RUN --mount=type=cache,target=/var/cache/apt \
dpkg --add-architecture arm64 && \
apt update && \
apt install -y dbus-system-bus-common && \
dpkg --configure -a && \
apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-pulseaudio && \
apt-get remove -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-pulseaudio && \
apt remove -y gir1.2-gst-plugins-bad-1.0 gir1.2-gst-plugins-base-1.0 gir1.2-gstreamer-1.0 libgstreamer* && \
apt install -y \
--no-install-recommends \
binutils-aarch64-linux-gnu \
g++-aarch64-linux-gnu \
gcc-aarch64-linux-gnu \
libssl-dev \
libssl-dev:arm64 \
libogg-dev \
libpng-dev \
libtiff-dev \
libnice-dev \
libglib2.0-dev \
libgirepository1.0-dev \
libglib2.0-doc \
liborc-0.4-dev-bin \
git \
cpio \
build-essential \
bison \
flex \
autotools-dev \
automake \
autoconf \
libtool \
g++ \
autopoint \
make \
cmake \
ninja-build \
bison \
flex \
nasm \
pkg-config \
libxv-dev \
libpulse-dev \
python3 \
python3-setuptools \
ninja-build \
python3-pip \
python3-venv \
python-gi-dev \
python3-all-dev \
python3-cairo-dev \
libcairo2-dev \
libogg-dev \
libopus-dev \
libsrt-openssl-dev \
openssl \
curl \
nano && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
pip3 install \
--break-system-packages \
meson \
distro
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --target x86_64-unknown-linux-gnu && \
rustup toolchain install nightly && \
rustup default nightly && \
cargo +nightly install cargo-c && \
echo "alias cargo=\"RUSTFLAGS='-Z threads=8' cargo +nightly\"" >> $HOME/.bashrc && \
printf "[net]\ngit-fetch-with-cli = true" >> "$CARGO_HOME/config.toml" && \
printf "\n[build]\njobs = 1" >> "$CARGO_HOME/config.toml"
COPY scripts/gst-plugins-rs/meson_options.txt /tmp
RUN mkdir $HOME/build && \
cd $HOME/build && \
git clone https://gitlab.freedesktop.org/gstreamer/gstreamer.git gstreamer && \
cd gstreamer && \
meson subprojects update && \
#meson wrap install openssl
meson wrap install openssl && \
meson setup --auto-features=disabled -Drs=enabled /tmp/tmpbuild && \
cp /tmp/meson_options.txt subprojects/gst-plugins-rs/ && \
rm /tmp/meson_options.txt && \
rm -rf /tmp/tmpbuild
ENTRYPOINT /build/scripts/build.sh