|
| 1 | +name: gst-libav1.0 Build and Test |
| 2 | + |
| 3 | +on: |
| 4 | + push: |
| 5 | + branches: [ 'master', 'main', 'release/**' ] |
| 6 | + pull_request: |
| 7 | + branches: [ '*' ] |
| 8 | +concurrency: |
| 9 | + group: ${{ github.workflow }}-${{ github.ref }} |
| 10 | + cancel-in-progress: true |
| 11 | + |
| 12 | +jobs: |
| 13 | + build_and_test: |
| 14 | + name: Build & Test gst-libav1.0 |
| 15 | + runs-on: ubuntu-latest |
| 16 | + container: |
| 17 | + image: ubuntu:25.04 |
| 18 | + options: --user root |
| 19 | + timeout-minutes: 60 |
| 20 | + |
| 21 | + strategy: |
| 22 | + matrix: |
| 23 | + gst_ref: [ 'master', 'debian/1.26.2-1', 'debian/1.26.3-1' ] |
| 24 | + fail-fast: false |
| 25 | + |
| 26 | + steps: |
| 27 | + - name: Checkout gnutls-wolfssl repository |
| 28 | + uses: actions/checkout@v4 |
| 29 | + |
| 30 | + - name: Install Meson and ninja |
| 31 | + run: | |
| 32 | + apt-get update |
| 33 | + apt-get install -y sudo meson ninja-build |
| 34 | +
|
| 35 | + - name: Install GStreamer ≥1.26 dev-packages |
| 36 | + run: | |
| 37 | + apt-get update |
| 38 | + apt-get install -y \ |
| 39 | + libgstreamer1.0-dev \ |
| 40 | + libgstreamer-plugins-base1.0-dev \ |
| 41 | + gstreamer1.0-tools |
| 42 | +
|
| 43 | + - name: Install build tools & dependencies |
| 44 | + run: | |
| 45 | + apt-get install -y \ |
| 46 | + build-essential autoconf automake pkg-config yasm git \ |
| 47 | + meson ninja-build cmake \ |
| 48 | + libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \ |
| 49 | + libavcodec-dev libavformat-dev libavutil-dev libavfilter-dev \ |
| 50 | + gstreamer1.0-tools \ |
| 51 | + gstreamer1.0-plugins-base \ |
| 52 | + gstreamer1.0-plugins-good \ |
| 53 | + gstreamer1.0-plugins-bad \ |
| 54 | + gstreamer1.0-libav \ |
| 55 | + gnulib autopoint gperf gtk-doc-tools nettle-dev \ |
| 56 | + clang libtasn1-bin libtasn1-6-dev libunistring-dev \ |
| 57 | + libp11-kit-dev libunbound-dev wget gtk-doc-tools libswscale-dev libswresample-dev |
| 58 | +
|
| 59 | + - name: Build GnuTLS with wolfSSL provider |
| 60 | + run: | |
| 61 | + GNUTLS_INSTALL=/opt/gnutls WOLFSSL_INSTALL=/opt/wolfssl ./setup.sh |
| 62 | +
|
| 63 | + - name: Verify GnuTLS install |
| 64 | + run: | |
| 65 | + test -d /opt/gnutls/lib || (echo "/opt/gnutls/lib missing" && exit 1) |
| 66 | +
|
| 67 | + - name: Build FFmpeg with GnuTLS & MPEG-4 encoder |
| 68 | + run: | |
| 69 | + cd $RUNNER_WORKSPACE |
| 70 | + git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg-gnutls |
| 71 | + cd ffmpeg-gnutls |
| 72 | + export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig" |
| 73 | + export CPPFLAGS="-I/opt/gnutls/include" |
| 74 | + export LDFLAGS="-L/opt/gnutls/lib -Wl,-rpath,/opt/gnutls/lib" |
| 75 | + export LD_LIBRARY_PATH="/opt/gnutls/lib:$LD_LIBRARY_PATH" |
| 76 | + ./configure \ |
| 77 | + --prefix=/opt/ffmpeg-gnutls \ |
| 78 | + --disable-openssl \ |
| 79 | + --enable-gnutls \ |
| 80 | + --enable-encoder=mpeg4 \ |
| 81 | + --disable-x86asm \ |
| 82 | + --enable-shared |
| 83 | + make -j"$(nproc)" && make install |
| 84 | +
|
| 85 | + - name: Verify libav* link against custom GnuTLS |
| 86 | + run: | |
| 87 | + export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:$PKG_CONFIG_PATH" |
| 88 | + export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include $CPPFLAGS" |
| 89 | + export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib \ |
| 90 | + -Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib $LDFLAGS" |
| 91 | + export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:$LD_LIBRARY_PATH" |
| 92 | + for lib in libavformat.so.62 libavfilter.so.11; do |
| 93 | + echo ">>> ldd for $lib:" |
| 94 | + ldd /opt/ffmpeg-gnutls/lib/$lib |
| 95 | + if ! ldd /opt/ffmpeg-gnutls/lib/$lib \ |
| 96 | + | grep -q '/opt/gnutls/lib/libgnutls.so.30'; then |
| 97 | + echo "✖ $lib is NOT using custom GnuTLS" |
| 98 | + exit 1 |
| 99 | + fi |
| 100 | + echo "✔ $lib is using custom GnuTLS" |
| 101 | + done |
| 102 | +
|
| 103 | + - name: Clone & checkout gst-libav1.0 @ ${{ matrix.gst_ref }} |
| 104 | + run: | |
| 105 | + git clone https://salsa.debian.org/gstreamer-team/gst-libav1.0.git gst-libav |
| 106 | + cd gst-libav |
| 107 | + git fetch --tags |
| 108 | + git checkout ${{ matrix.gst_ref }} |
| 109 | +
|
| 110 | + - name: Build gst-libav1.0 (${{ matrix.gst_ref }}) |
| 111 | + working-directory: gst-libav |
| 112 | + run: | |
| 113 | + export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:$PKG_CONFIG_PATH" |
| 114 | + export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include $CPPFLAGS" |
| 115 | + export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib \ |
| 116 | + -Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib $LDFLAGS" |
| 117 | + export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:$LD_LIBRARY_PATH" |
| 118 | + rm -rf build |
| 119 | + meson setup build --prefix=/usr -Ddoc=disabled -Dtests=enabled |
| 120 | + ninja -C build |
| 121 | +
|
| 122 | + - name: Smoke-test plugin with gst-inspect & playbin |
| 123 | + working-directory: gst-libav |
| 124 | + run: | |
| 125 | + export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:$PKG_CONFIG_PATH" |
| 126 | + export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include $CPPFLAGS" |
| 127 | + export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib \ |
| 128 | + -Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib $LDFLAGS" |
| 129 | + export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:$LD_LIBRARY_PATH" |
| 130 | + PAGER=cat \ |
| 131 | + GST_PLUGIN_PATH=$(pwd)/build \ |
| 132 | + GST_PLUGIN_SYSTEM_PATH_1_0=/usr/lib/x86_64-linux-gnu/gstreamer-1.0 \ |
| 133 | + gst-inspect-1.0 libav |
| 134 | + timeout 30s env \ |
| 135 | + GST_PLUGIN_PATH=$(pwd)/build \ |
| 136 | + GST_PLUGIN_SYSTEM_PATH_1_0=/usr/lib/x86_64-linux-gnu/gstreamer-1.0 \ |
| 137 | + gst-launch-1.0 -v playbin \ |
| 138 | + uri=https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8 || test $? -eq 124 |
| 139 | +
|
| 140 | + - name: Run upstream gst-libav tests |
| 141 | + working-directory: gst-libav |
| 142 | + run: | |
| 143 | + export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/ffmpeg-gnutls/lib/pkgconfig:$PKG_CONFIG_PATH" |
| 144 | + export CPPFLAGS="-I/opt/gnutls/include -I/opt/ffmpeg-gnutls/include $CPPFLAGS" |
| 145 | + export LDFLAGS="-L/opt/gnutls/lib -L/opt/ffmpeg-gnutls/lib \ |
| 146 | + -Wl,-rpath,/opt/gnutls/lib -Wl,-rpath=/opt/ffmpeg-gnutls/lib $LDFLAGS" |
| 147 | + export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/ffmpeg-gnutls/lib:$LD_LIBRARY_PATH" |
| 148 | + meson test -C build --print-errorlogs |
0 commit comments