WIP - Attempt to add av1 support

For some reason Chrome doesn't detect the codec despite definitely
supporting AV1 decoding.  Nothing telling show up in console,
chrome://webrtc-internals/, or chrome://media-internals/.  Testing
via `docker-compose up`.
This commit is contained in:
Ethan Waldo
2023-01-15 10:26:22 -05:00
parent cfc6bd417f
commit da1eb21408
10 changed files with 164 additions and 19 deletions

View File

@ -0,0 +1,25 @@
From d84ef27b1b2ec2769aa2805bcc54f5601a4ba59a Mon Sep 17 00:00:00 2001
From: Ethan Waldo <ewaldo@healthetechs.com>
Date: Sat, 7 Jan 2023 17:45:27 -0500
Subject: [PATCH] Fix MIME type
---
gstreamer-plugin/gstsvtav1enc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gstreamer-plugin/gstsvtav1enc.c b/gstreamer-plugin/gstsvtav1enc.c
index 108824c1..86ee29da 100644
--- a/gstreamer-plugin/gstsvtav1enc.c
+++ b/gstreamer-plugin/gstsvtav1enc.c
@@ -129,7 +129,7 @@ static GstStaticPadTemplate gst_svtav1enc_src_pad_template =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("video/x-av1, "
+ GST_STATIC_CAPS ("video/AV1, "
"stream-format = (string) byte-stream, "
"alignment = (string) au, "
"width = (int) [64, 3840], "
--
2.20.1

View File

@ -1,14 +1,25 @@
#
# STAGE 1: SERVER
#
FROM rust:1-bullseye as rav1enc
WORKDIR /src
RUN set -eux; apt-get update; \
apt-get install -y gstreamer1.0-tools libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base; \
cd /tmp; \
git clone --depth=1 https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git; \
cd gst-plugins-rs; \
cargo build -r -p gst-plugin-rav1e;
FROM golang:1.18-bullseye as server
WORKDIR /src
COPY .docker/base/0001-Fix-MIME-type.patch .
#
# install dependencies
RUN set -eux; apt-get update; \
apt-get install -y --no-install-recommends git cmake make libx11-dev libxrandr-dev libxtst-dev \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly; \
apt-get install -y --no-install-recommends git cmake make libx11-dev libxrandr-dev libxtst-dev python3-pip pkg-config yasm \
gstreamer1.0-tools libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly; \
#
# install libclipboard
set -eux; \
@ -18,8 +29,22 @@ RUN set -eux; apt-get update; \
cmake .; \
make -j4; \
make install; \
cd /tmp; \
rm -rf /tmp/libclipboard; \
#
# install libgstsvtav1enc.so
pip3 install meson ninja; \
git clone --depth=1 --branch v1.4.1 https://gitlab.com/AOMediaCodec/SVT-AV1.git; \
git config --global user.email "you@example.com"; \
git config --global user.name "Your Name"; \
git -C SVT-AV1 am /src/0001-Fix-MIME-type.patch; \
SVT-AV1/Build/linux/build.sh debug; \
cp /tmp/SVT-AV1/Source/API/Eb*.h /usr/local/include; \
cmake -P SVT-AV1/Build/linux/Debug/Source/Lib/Encoder/cmake_install.cmake; \
cd SVT-AV1/gstreamer-plugin; \
meson -Dprefix=/usr build; \
ninja -C build install; \
#
# clean up
apt-get clean -y; \
rm -rf /var/lib/apt/lists/* /var/cache/apt/*
@ -70,7 +95,8 @@ RUN set -eux; \
#
# gst
apt-get install -y --no-install-recommends libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-pulseaudio; \
gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-pulseaudio \
gstreamer1.0-vaapi gstreamer1.0-tools;\
#
# install fonts
apt-get install -y --no-install-recommends \
@ -125,6 +151,11 @@ ENV NEKO_BIND=:8080
#
# copy static files from previous stages
COPY --from=server /src/bin/neko /usr/bin/neko
COPY --from=server /usr/local/lib/libSvtAv1Enc.so.1.4.1 /usr/lib/x86_64-linux-gnu/libSvtAv1Enc.so.1.4.1
COPY --from=server /usr/local/lib/libSvtAv1Enc.so.1 /usr/lib/x86_64-linux-gnu/libSvtAv1Enc.so.1
COPY --from=server /usr/lib/gstreamer-1.0/libgstsvtav1enc.so /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstsvtav1enc.so
COPY --from=rav1enc /tmp/gst-plugins-rs/target/release/libgstrav1e.so /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstrav1e.so
COPY --from=client /src/dist/ /var/www
HEALTHCHECK --interval=10s --timeout=5s --retries=8 \