Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
148 changes: 148 additions & 0 deletions .github/workflows/gst-libav1.0.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
name: gst-libav1.0 Build and Test

on:
push:
branches: [ 'master', 'main', 'release/**' ]
pull_request:
branches: [ '*' ]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
build_and_test:
name: Build & Test gst-libav1.0
runs-on: ubuntu-latest
container:
image: ubuntu:25.04
options: --user root
timeout-minutes: 60

strategy:
matrix:
gst_ref: [ 'master', 'debian/1.26.2-1', 'debian/1.26.3-1' ]
fail-fast: false

steps:
- name: Checkout gnutls-wolfssl repository
uses: actions/checkout@v4

- name: Install Meson and ninja
run: |
apt-get update
apt-get install -y sudo meson ninja-build

- name: Install GStreamer ≥1.26 dev-packages
run: |
apt-get update
apt-get install -y \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
gstreamer1.0-tools

- name: Install build tools & dependencies
run: |
apt-get install -y \
build-essential autoconf automake pkg-config yasm git \
meson ninja-build cmake \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
libavcodec-dev libavformat-dev libavutil-dev libavfilter-dev \
gstreamer1.0-tools \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-libav \
gnulib autopoint gperf gtk-doc-tools nettle-dev \
clang libtasn1-bin libtasn1-6-dev libunistring-dev \
libp11-kit-dev libunbound-dev wget gtk-doc-tools libswscale-dev libswresample-dev

- name: Build GnuTLS with wolfSSL provider
run: |
GNUTLS_INSTALL=/opt/gnutls WOLFSSL_INSTALL=/opt/wolfssl ./setup.sh

- name: Verify GnuTLS install
run: |
test -d /opt/gnutls/lib || (echo "/opt/gnutls/lib missing" && exit 1)

- name: Build FFmpeg with GnuTLS & MPEG-4 encoder
run: |
cd $RUNNER_WORKSPACE
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg-gnutls
cd ffmpeg-gnutls
export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig"
export CPPFLAGS="-I/opt/gnutls/include"
export LDFLAGS="-L/opt/gnutls/lib -Wl,-rpath,/opt/gnutls/lib"
export LD_LIBRARY_PATH="/opt/gnutls/lib:$LD_LIBRARY_PATH"
./configure \
--prefix=/opt/ffmpeg-gnutls \
--disable-openssl \
--enable-gnutls \
--enable-encoder=mpeg4 \
--disable-x86asm \
--enable-shared
make -j"$(nproc)" && make install

- name: Verify libav* link against custom GnuTLS
run: |
export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:$PKG_CONFIG_PATH"
export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include $CPPFLAGS"
export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib \
-Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib $LDFLAGS"
export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:$LD_LIBRARY_PATH"
for lib in libavformat.so.62 libavfilter.so.11; do
echo ">>> ldd for $lib:"
ldd /opt/ffmpeg-gnutls/lib/$lib
if ! ldd /opt/ffmpeg-gnutls/lib/$lib \
| grep -q '/opt/gnutls/lib/libgnutls.so.30'; then
echo "✖ $lib is NOT using custom GnuTLS"
exit 1
fi
echo "✔ $lib is using custom GnuTLS"
done

- name: Clone & checkout gst-libav1.0 @ ${{ matrix.gst_ref }}
run: |
git clone https://salsa.debian.org/gstreamer-team/gst-libav1.0.git gst-libav
cd gst-libav
git fetch --tags
git checkout ${{ matrix.gst_ref }}

- name: Build gst-libav1.0 (${{ matrix.gst_ref }})
working-directory: gst-libav
run: |
export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:$PKG_CONFIG_PATH"
export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include $CPPFLAGS"
export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib \
-Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib $LDFLAGS"
export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:$LD_LIBRARY_PATH"
rm -rf build
meson setup build --prefix=/usr -Ddoc=disabled -Dtests=enabled
ninja -C build

- name: Smoke-test plugin with gst-inspect & playbin
working-directory: gst-libav
run: |
export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:$PKG_CONFIG_PATH"
export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include $CPPFLAGS"
export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib \
-Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib $LDFLAGS"
export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:$LD_LIBRARY_PATH"
PAGER=cat \
GST_PLUGIN_PATH=$(pwd)/build \
GST_PLUGIN_SYSTEM_PATH_1_0=/usr/lib/x86_64-linux-gnu/gstreamer-1.0 \
gst-inspect-1.0 libav
timeout 30s env \
GST_PLUGIN_PATH=$(pwd)/build \
GST_PLUGIN_SYSTEM_PATH_1_0=/usr/lib/x86_64-linux-gnu/gstreamer-1.0 \
gst-launch-1.0 -v playbin \
uri=https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8 || test $? -eq 124

- name: Run upstream gst-libav tests
working-directory: gst-libav
run: |
export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:$PKG_CONFIG_PATH"
export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include $CPPFLAGS"
export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib \
-Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib $LDFLAGS"
export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:$LD_LIBRARY_PATH"
meson test -C build --print-errorlogs
Loading