mirror of
https://github.com/datarhei/ffmpeg
synced 2025-12-24 13:08:07 +08:00
Add HLS bitrate patch
This commit is contained in:
@@ -55,7 +55,7 @@ RUN apk add -U \
|
||||
lame-dev=${LAME_VERSION} \
|
||||
opus-dev=${OPUS_VERSION} \
|
||||
libvorbis-dev=${VORBIS_VERSION} \
|
||||
v4l-utils-dev=${V4L_VERSION}
|
||||
v4l-utils-dev=${V4L_VERSION}
|
||||
|
||||
# install and patch ffmpeg
|
||||
RUN mkdir -p /dist && cd /dist && \
|
||||
@@ -67,6 +67,7 @@ COPY ./contrib /contrib
|
||||
|
||||
RUN cd /dist/ffmpeg-${FFMPEG_VERSION} && \
|
||||
patch -p1 < /contrib/ffmpeg-jsonstats.patch && \
|
||||
patch -p1 < /contrib/ffmpeg-hlsbitrate.patch && \
|
||||
./configure \
|
||||
--extra-version=datarhei \
|
||||
--prefix="${SRC}" \
|
||||
@@ -127,11 +128,11 @@ ARG FBDEV_VERSION=0.5.0-r3
|
||||
ARG V4L_VERSION=1.22.1-r1
|
||||
|
||||
RUN apk add --no-cache \
|
||||
ca-certificates \
|
||||
tzdata \
|
||||
xf86-video-fbdev=${FBDEV_VERSION} \
|
||||
v4l-utils=${V4L_VERSION} && \
|
||||
ffmpeg -buildconf
|
||||
ca-certificates \
|
||||
tzdata \
|
||||
xf86-video-fbdev=${FBDEV_VERSION} \
|
||||
v4l-utils=${V4L_VERSION} && \
|
||||
ffmpeg -buildconf
|
||||
|
||||
WORKDIR /tmp
|
||||
ENTRYPOINT ["/usr/bin/ffmpeg"]
|
||||
|
||||
@@ -61,7 +61,7 @@ RUN apk add \
|
||||
opus-dev=${OPUS_VERSION} \
|
||||
libvorbis-dev=${VORBIS_VERSION} \
|
||||
alsa-lib-dev=${ALSA_VERSION} \
|
||||
v4l-utils-dev=${V4L_VERSION}
|
||||
v4l-utils-dev=${V4L_VERSION}
|
||||
|
||||
# install and patch ffmpeg
|
||||
RUN mkdir -p /dist && cd /dist && \
|
||||
@@ -76,6 +76,7 @@ RUN echo $uname
|
||||
RUN cd /dist/ffmpeg-${FFMPEG_VERSION} && \
|
||||
apkArch="$(apk --print-arch)" && if [ $apkArch != "aarch64" ]; then MMAL_SUPPORT="--enable-mmal"; fi && \
|
||||
patch -p1 < /contrib/ffmpeg-jsonstats.patch && \
|
||||
patch -p1 < /contrib/ffmpeg-hlsbitrate.patch && \
|
||||
./configure \
|
||||
--extra-version=datarhei \
|
||||
--prefix="${SRC}" \
|
||||
@@ -89,7 +90,7 @@ RUN cd /dist/ffmpeg-${FFMPEG_VERSION} && \
|
||||
--enable-libxml2 \
|
||||
--enable-omx \
|
||||
--enable-omx-rpi \
|
||||
$MMAL_SUPPORT \
|
||||
$MMAL_SUPPORT \
|
||||
--enable-libv4l2 \
|
||||
--enable-v4l2_m2m \
|
||||
--enable-alsa \
|
||||
@@ -112,25 +113,25 @@ RUN cd /dist/ffmpeg-${FFMPEG_VERSION} && \
|
||||
|
||||
RUN mkdir -p /ffmpeg/lib && \
|
||||
cp \
|
||||
/usr/lib/libfreetype.so.6 \
|
||||
/usr/lib/libbrotlidec.so.1 \
|
||||
/usr/lib/libbrotlicommon.so.1 \
|
||||
/usr/lib/libbz2.so.1 \
|
||||
/usr/lib/libpng16.so.16 \
|
||||
/usr/lib/libxml2.so.2 \
|
||||
/usr/lib/liblzma.so.5 \
|
||||
/usr/lib/libsrt.so.1 \
|
||||
/usr/lib/libx264.so.163 \
|
||||
/usr/lib/libx265.so.199 \
|
||||
/usr/lib/libvpx.so.6 \
|
||||
/usr/lib/libmp3lame.so.0 \
|
||||
/usr/lib/libopus.so.0 \
|
||||
/usr/lib/libvorbis.so.0 \
|
||||
/usr/lib/libogg.so.0 \
|
||||
/usr/lib/libvorbisenc.so.2 \
|
||||
/usr/lib/libgcc_s.so.1 \
|
||||
/usr/lib/libstdc++.so.6 \
|
||||
/ffmpeg/lib
|
||||
/usr/lib/libfreetype.so.6 \
|
||||
/usr/lib/libbrotlidec.so.1 \
|
||||
/usr/lib/libbrotlicommon.so.1 \
|
||||
/usr/lib/libbz2.so.1 \
|
||||
/usr/lib/libpng16.so.16 \
|
||||
/usr/lib/libxml2.so.2 \
|
||||
/usr/lib/liblzma.so.5 \
|
||||
/usr/lib/libsrt.so.1 \
|
||||
/usr/lib/libx264.so.163 \
|
||||
/usr/lib/libx265.so.199 \
|
||||
/usr/lib/libvpx.so.6 \
|
||||
/usr/lib/libmp3lame.so.0 \
|
||||
/usr/lib/libopus.so.0 \
|
||||
/usr/lib/libvorbis.so.0 \
|
||||
/usr/lib/libogg.so.0 \
|
||||
/usr/lib/libvorbisenc.so.2 \
|
||||
/usr/lib/libgcc_s.so.1 \
|
||||
/usr/lib/libstdc++.so.6 \
|
||||
/ffmpeg/lib
|
||||
|
||||
FROM $ALPINE_IMAGE as final
|
||||
|
||||
@@ -142,14 +143,14 @@ ARG V4L_VERSION=1.22.1-r1
|
||||
ARG RPI_VERSION=0.20200813-r0
|
||||
|
||||
RUN apk add --no-cache \
|
||||
ca-certificates \
|
||||
tzdata \
|
||||
alsa-lib \
|
||||
xf86-video-fbdev=${FBDEV_VERSION} \
|
||||
v4l-utils=${V4L_VERSION} \
|
||||
raspberrypi-libs=${RPI_VERSION} && \
|
||||
echo "/opt/vc/lib:/usr/local/lib:/usr/lib:/lib" > /etc/ld-musl-armhf.path && \
|
||||
ffmpeg -buildconf
|
||||
ca-certificates \
|
||||
tzdata \
|
||||
alsa-lib \
|
||||
xf86-video-fbdev=${FBDEV_VERSION} \
|
||||
v4l-utils=${V4L_VERSION} \
|
||||
raspberrypi-libs=${RPI_VERSION} && \
|
||||
echo "/opt/vc/lib:/usr/local/lib:/usr/lib:/lib" > /etc/ld-musl-armhf.path && \
|
||||
ffmpeg -buildconf
|
||||
|
||||
WORKDIR /tmp
|
||||
ENTRYPOINT ["/usr/bin/ffmpeg"]
|
||||
|
||||
@@ -53,9 +53,9 @@ RUN apk add --update \
|
||||
tar \
|
||||
zlib-dev
|
||||
|
||||
# install shared ffmpeg libs
|
||||
# install shared ffmpeg libs
|
||||
RUN apk add -U \
|
||||
freetype-dev=${FREETYPE_VERSION} \
|
||||
freetype-dev=${FREETYPE_VERSION} \
|
||||
libsrt-dev=${SRT_VERSION} \
|
||||
x264-dev=${X264_VERSION} \
|
||||
x265-dev=${X265_VERSION} \
|
||||
@@ -63,28 +63,28 @@ RUN apk add -U \
|
||||
lame-dev=${LAME_VERSION} \
|
||||
opus-dev=${OPUS_VERSION} \
|
||||
libvorbis-dev=${VORBIS_VERSION} \
|
||||
v4l-utils-dev=${V4L_VERSION}
|
||||
|
||||
# install shared ffmpeg libs
|
||||
v4l-utils-dev=${V4L_VERSION}
|
||||
|
||||
# install shared ffmpeg libs
|
||||
RUN echo http://dl-2.alpinelinux.org/alpine/edge/main >> /etc/apk/repositories
|
||||
RUN apk add -U \
|
||||
libva-dev=${LIBAV_VERSION} \
|
||||
libvdpau-dev=${LIBVDPAU_VERSION} \
|
||||
libva-intel-driver=${INTEL_VAAPI_DRIVER} \
|
||||
mesa-va-gallium=${MESA_VA_GALLIUM_VERSION} \
|
||||
mesa-vdpau-gallium=${MESA_VDPAU_GALLIUM_VERSION}
|
||||
libvdpau-dev=${LIBVDPAU_VERSION} \
|
||||
libva-intel-driver=${INTEL_VAAPI_DRIVER} \
|
||||
mesa-va-gallium=${MESA_VA_GALLIUM_VERSION} \
|
||||
mesa-vdpau-gallium=${MESA_VDPAU_GALLIUM_VERSION}
|
||||
|
||||
# install shared ffmpeg libs
|
||||
# install shared ffmpeg libs
|
||||
RUN echo http://dl-2.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories
|
||||
RUN apk add -U \
|
||||
intel-gmmlib-dev=${INTEL_GMMLIB_VERSION} \
|
||||
intel-media-driver-dev=${INTEL_MEDIA_DRIVER_VERSION} \
|
||||
intel-media-sdk-dev=${INTEL_MEDIA_SDK_VERSION}
|
||||
intel-gmmlib-dev=${INTEL_GMMLIB_VERSION} \
|
||||
intel-media-driver-dev=${INTEL_MEDIA_DRIVER_VERSION} \
|
||||
intel-media-sdk-dev=${INTEL_MEDIA_SDK_VERSION}
|
||||
|
||||
# install shared ffmpeg libs
|
||||
# install shared ffmpeg libs
|
||||
RUN echo http://dl-2.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories
|
||||
RUN apk add -U \
|
||||
libva-vdpau-driver=${LIBVA_VDPAU_DRIVER_VERSION}
|
||||
libva-vdpau-driver=${LIBVA_VDPAU_DRIVER_VERSION}
|
||||
|
||||
# install and patch ffmpeg
|
||||
RUN mkdir -p /dist && cd /dist && \
|
||||
@@ -96,6 +96,7 @@ COPY ./contrib /contrib
|
||||
|
||||
RUN cd /dist/ffmpeg-${FFMPEG_VERSION} && \
|
||||
patch -p1 < /contrib/ffmpeg-jsonstats.patch && \
|
||||
patch -p1 < /contrib/ffmpeg-hlsbitrate.patch && \
|
||||
./configure \
|
||||
--extra-version=datarhei \
|
||||
--prefix="${SRC}" \
|
||||
@@ -115,7 +116,7 @@ RUN cd /dist/ffmpeg-${FFMPEG_VERSION} && \
|
||||
--enable-libmp3lame \
|
||||
--enable-libopus \
|
||||
--enable-libvorbis \
|
||||
--enable-libmfx \
|
||||
--enable-libmfx \
|
||||
--enable-vaapi \
|
||||
--enable-vdpau \
|
||||
--disable-ffplay \
|
||||
@@ -129,39 +130,39 @@ RUN cd /dist/ffmpeg-${FFMPEG_VERSION} && \
|
||||
|
||||
RUN mkdir -p /ffmpeg/lib && \
|
||||
cp \
|
||||
/usr/lib/libfreetype.so.6 \
|
||||
/usr/lib/libbrotlidec.so.1 \
|
||||
/usr/lib/libbrotlicommon.so.1 \
|
||||
/usr/lib/libbz2.so.1 \
|
||||
/usr/lib/libpng16.so.16 \
|
||||
/usr/lib/libsrt.so.1 \
|
||||
/usr/lib/libx264.so.163 \
|
||||
/usr/lib/libx265.so.199 \
|
||||
/usr/lib/libvpx.so.6 \
|
||||
/usr/lib/libmp3lame.so.0 \
|
||||
/usr/lib/libopus.so.0 \
|
||||
/usr/lib/libvorbis.so.0 \
|
||||
/usr/lib/libogg.so.0 \
|
||||
/usr/lib/libvorbisenc.so.2 \
|
||||
/usr/lib/libgcc_s.so.1 \
|
||||
/usr/lib/libstdc++.so.6 \
|
||||
/usr/lib/libxcb.so.1 \
|
||||
/usr/lib/libXau.so.6 \
|
||||
/usr/lib/libXdmcp.so.6 \
|
||||
/usr/lib/libbsd.so.0 \
|
||||
/usr/lib/libmd.so.0 \
|
||||
/usr/lib/libxcb-shm.so.0 \
|
||||
/usr/lib/libxcb-shape.so.0 \
|
||||
/usr/lib/libxcb-xfixes.so.0 \
|
||||
/usr/lib/libva.so.2 \
|
||||
/usr/lib/libmfx.so.1 \
|
||||
/usr/lib/libva-drm.so.2 \
|
||||
/usr/lib/libdrm.so.2 \
|
||||
/usr/lib/libvdpau.so.1 \
|
||||
/usr/lib/libXext.so.6 \
|
||||
/usr/lib/libX11.so.6 \
|
||||
/usr/lib/libva-x11.so.2 \
|
||||
/ffmpeg/lib
|
||||
/usr/lib/libfreetype.so.6 \
|
||||
/usr/lib/libbrotlidec.so.1 \
|
||||
/usr/lib/libbrotlicommon.so.1 \
|
||||
/usr/lib/libbz2.so.1 \
|
||||
/usr/lib/libpng16.so.16 \
|
||||
/usr/lib/libsrt.so.1 \
|
||||
/usr/lib/libx264.so.163 \
|
||||
/usr/lib/libx265.so.199 \
|
||||
/usr/lib/libvpx.so.6 \
|
||||
/usr/lib/libmp3lame.so.0 \
|
||||
/usr/lib/libopus.so.0 \
|
||||
/usr/lib/libvorbis.so.0 \
|
||||
/usr/lib/libogg.so.0 \
|
||||
/usr/lib/libvorbisenc.so.2 \
|
||||
/usr/lib/libgcc_s.so.1 \
|
||||
/usr/lib/libstdc++.so.6 \
|
||||
/usr/lib/libxcb.so.1 \
|
||||
/usr/lib/libXau.so.6 \
|
||||
/usr/lib/libXdmcp.so.6 \
|
||||
/usr/lib/libbsd.so.0 \
|
||||
/usr/lib/libmd.so.0 \
|
||||
/usr/lib/libxcb-shm.so.0 \
|
||||
/usr/lib/libxcb-shape.so.0 \
|
||||
/usr/lib/libxcb-xfixes.so.0 \
|
||||
/usr/lib/libva.so.2 \
|
||||
/usr/lib/libmfx.so.1 \
|
||||
/usr/lib/libva-drm.so.2 \
|
||||
/usr/lib/libdrm.so.2 \
|
||||
/usr/lib/libvdpau.so.1 \
|
||||
/usr/lib/libXext.so.6 \
|
||||
/usr/lib/libX11.so.6 \
|
||||
/usr/lib/libva-x11.so.2 \
|
||||
/ffmpeg/lib
|
||||
|
||||
FROM $ALPINE_IMAGE as final
|
||||
|
||||
@@ -179,22 +180,22 @@ ARG V4L_VERSION=1.22.1-r1
|
||||
|
||||
# install shared ffmpeg libs
|
||||
RUN apk add --no-cache -U \
|
||||
ca-certificates \
|
||||
tzdata \
|
||||
xf86-video-fbdev=${FBDEV_VERSION} \
|
||||
v4l-utils=${V4L_VERSION} && \
|
||||
echo http://dl-2.alpinelinux.org/alpine/edge/main >> /etc/apk/repositories && \
|
||||
apk add --no-cache -U \
|
||||
libva-intel-driver=${INTEL_VAAPI_DRIVER} \
|
||||
mesa-va-gallium=${MESA_VA_GALLIUM_VERSION} \
|
||||
mesa-vdpau-gallium=${MESA_VDPAU_GALLIUM_VERSION} && \
|
||||
echo http://dl-2.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories && \
|
||||
apk add --no-cache -U \
|
||||
intel-media-driver=${INTEL_MEDIA_DRIVER_VERSION} && \
|
||||
echo http://dl-2.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories && \
|
||||
apk add --no-cache -U \
|
||||
libva-vdpau-driver=${LIBVA_VDPAU_DRIVER_VERSION} && \
|
||||
ffmpeg -buildconf
|
||||
ca-certificates \
|
||||
tzdata \
|
||||
xf86-video-fbdev=${FBDEV_VERSION} \
|
||||
v4l-utils=${V4L_VERSION} && \
|
||||
echo http://dl-2.alpinelinux.org/alpine/edge/main >> /etc/apk/repositories && \
|
||||
apk add --no-cache -U \
|
||||
libva-intel-driver=${INTEL_VAAPI_DRIVER} \
|
||||
mesa-va-gallium=${MESA_VA_GALLIUM_VERSION} \
|
||||
mesa-vdpau-gallium=${MESA_VDPAU_GALLIUM_VERSION} && \
|
||||
echo http://dl-2.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories && \
|
||||
apk add --no-cache -U \
|
||||
intel-media-driver=${INTEL_MEDIA_DRIVER_VERSION} && \
|
||||
echo http://dl-2.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories && \
|
||||
apk add --no-cache -U \
|
||||
libva-vdpau-driver=${LIBVA_VDPAU_DRIVER_VERSION} && \
|
||||
ffmpeg -buildconf
|
||||
|
||||
WORKDIR /tmp
|
||||
ENTRYPOINT ["/usr/bin/ffmpeg"]
|
||||
|
||||
@@ -22,198 +22,199 @@ ENV SRC=/usr/local
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt-get update -y && \
|
||||
apt-get install -y \
|
||||
pkg-config \
|
||||
curl \
|
||||
git \
|
||||
nasm \
|
||||
openssl \
|
||||
libssl-dev \
|
||||
cmake \
|
||||
yasm \
|
||||
build-essential \
|
||||
libtool \
|
||||
autoconf \
|
||||
libv4l-dev
|
||||
apt-get install -y \
|
||||
pkg-config \
|
||||
curl \
|
||||
git \
|
||||
nasm \
|
||||
openssl \
|
||||
libssl-dev \
|
||||
cmake \
|
||||
yasm \
|
||||
build-essential \
|
||||
libtool \
|
||||
autoconf \
|
||||
libv4l-dev
|
||||
|
||||
# install x264
|
||||
RUN mkdir -p /dist && cd /dist && \
|
||||
curl -OLk https://code.videolan.org/videolan/x264/-/archive/stable/x264-${X264_VERSION}.tar.gz && \
|
||||
tar xfvz x264-${X264_VERSION}.tar.gz && \
|
||||
rm x264-${X264_VERSION}.tar.gz && \
|
||||
cd x264-${X264_VERSION}* && \
|
||||
./configure \
|
||||
--SRC="${SRC}" \
|
||||
--bindir="${SRC}/bin" \
|
||||
--enable-shared && \
|
||||
make -j$(nproc) && \
|
||||
make install
|
||||
curl -OLk https://code.videolan.org/videolan/x264/-/archive/stable/x264-${X264_VERSION}.tar.gz && \
|
||||
tar xfvz x264-${X264_VERSION}.tar.gz && \
|
||||
rm x264-${X264_VERSION}.tar.gz && \
|
||||
cd x264-${X264_VERSION}* && \
|
||||
./configure \
|
||||
--SRC="${SRC}" \
|
||||
--bindir="${SRC}/bin" \
|
||||
--enable-shared && \
|
||||
make -j$(nproc) && \
|
||||
make install
|
||||
|
||||
# install x265
|
||||
RUN mkdir -p /dist && cd /dist && \
|
||||
curl -OLk https://github.com/videolan/x265/archive/refs/tags/${X265_VERSION}.tar.gz && \
|
||||
tar xfvz ${X265_VERSION}.tar.gz && \
|
||||
rm ${X265_VERSION}.tar.gz && \
|
||||
cd x265-${X265_VERSION}/build/linux \
|
||||
sed -i "/-DEXTRA_LIB/ s/$/ -DCMAKE_INSTALL_SRC=\${SRC}/" multilib.sh && \
|
||||
sed -i "/^cmake/ s/$/ -DENABLE_CLI=OFF/" multilib.sh && \
|
||||
./multilib.sh && \
|
||||
make -C 8bit install && \
|
||||
rm -rf ${DIR}
|
||||
curl -OLk https://github.com/videolan/x265/archive/refs/tags/${X265_VERSION}.tar.gz && \
|
||||
tar xfvz ${X265_VERSION}.tar.gz && \
|
||||
rm ${X265_VERSION}.tar.gz && \
|
||||
cd x265-${X265_VERSION}/build/linux \
|
||||
sed -i "/-DEXTRA_LIB/ s/$/ -DCMAKE_INSTALL_SRC=\${SRC}/" multilib.sh && \
|
||||
sed -i "/^cmake/ s/$/ -DENABLE_CLI=OFF/" multilib.sh && \
|
||||
./multilib.sh && \
|
||||
make -C 8bit install && \
|
||||
rm -rf ${DIR}
|
||||
|
||||
# install opus
|
||||
RUN mkdir -p /dist && cd /dist && \
|
||||
curl -OLk https://archive.mozilla.org/pub/opus/opus-${OPUS_VERSION}.tar.gz && \
|
||||
tar xfvz opus-${OPUS_VERSION}.tar.gz && \
|
||||
rm opus-${OPUS_VERSION}.tar.gz && \
|
||||
cd opus-${OPUS_VERSION} && \
|
||||
autoreconf -fiv && \
|
||||
./configure --prefix="${SRC}" \
|
||||
--enable-shared && \
|
||||
make && \
|
||||
make install
|
||||
curl -OLk https://archive.mozilla.org/pub/opus/opus-${OPUS_VERSION}.tar.gz && \
|
||||
tar xfvz opus-${OPUS_VERSION}.tar.gz && \
|
||||
rm opus-${OPUS_VERSION}.tar.gz && \
|
||||
cd opus-${OPUS_VERSION} && \
|
||||
autoreconf -fiv && \
|
||||
./configure --prefix="${SRC}" \
|
||||
--enable-shared && \
|
||||
make && \
|
||||
make install
|
||||
|
||||
# install ogg
|
||||
RUN mkdir -p /dist && cd /dist && \
|
||||
curl -OLk http://downloads.xiph.org/releases/ogg/libogg-${OGG_VERSION}.tar.gz && \
|
||||
tar xfvz libogg-${OGG_VERSION}.tar.gz && \
|
||||
rm libogg-${OGG_VERSION}.tar.gz && \
|
||||
cd libogg-${OGG_VERSION} && \
|
||||
./configure --prefix="${SRC}" \
|
||||
--enable-shared && \
|
||||
make && \
|
||||
make install
|
||||
curl -OLk http://downloads.xiph.org/releases/ogg/libogg-${OGG_VERSION}.tar.gz && \
|
||||
tar xfvz libogg-${OGG_VERSION}.tar.gz && \
|
||||
rm libogg-${OGG_VERSION}.tar.gz && \
|
||||
cd libogg-${OGG_VERSION} && \
|
||||
./configure --prefix="${SRC}" \
|
||||
--enable-shared && \
|
||||
make && \
|
||||
make install
|
||||
|
||||
# install vorbis
|
||||
RUN mkdir -p /dist && cd /dist && \
|
||||
curl -OLk http://downloads.xiph.org/releases/vorbis/libvorbis-${VORBIS_VERSION}.tar.gz && \
|
||||
tar xfvz libvorbis-${VORBIS_VERSION}.tar.gz && \
|
||||
rm libvorbis-${VORBIS_VERSION}.tar.gz && \
|
||||
cd libvorbis-${VORBIS_VERSION} && \
|
||||
./configure --prefix="${SRC}" --with-ogg="${SRC}" \
|
||||
--enable-shared && \
|
||||
make && \
|
||||
make install
|
||||
curl -OLk http://downloads.xiph.org/releases/vorbis/libvorbis-${VORBIS_VERSION}.tar.gz && \
|
||||
tar xfvz libvorbis-${VORBIS_VERSION}.tar.gz && \
|
||||
rm libvorbis-${VORBIS_VERSION}.tar.gz && \
|
||||
cd libvorbis-${VORBIS_VERSION} && \
|
||||
./configure --prefix="${SRC}" --with-ogg="${SRC}" \
|
||||
--enable-shared && \
|
||||
make && \
|
||||
make install
|
||||
|
||||
# install libmp3lame
|
||||
RUN mkdir -p /dist && cd /dist && \
|
||||
curl -OLk https://downloads.sourceforge.net/project/lame/lame/${LAME_VERSION}/lame-${LAME_VERSION}.tar.gz && \
|
||||
tar -xvz -f lame-${LAME_VERSION}.tar.gz && \
|
||||
rm lame-${LAME_VERSION}.tar.gz && \
|
||||
cd lame-${LAME_VERSION} && \
|
||||
./configure \
|
||||
--prefix="${SRC}" \
|
||||
--bindir="${SRC}/bin" \
|
||||
--disable-static \
|
||||
--enable-nasm && \
|
||||
make -j$(nproc) && \
|
||||
make install
|
||||
curl -OLk https://downloads.sourceforge.net/project/lame/lame/${LAME_VERSION}/lame-${LAME_VERSION}.tar.gz && \
|
||||
tar -xvz -f lame-${LAME_VERSION}.tar.gz && \
|
||||
rm lame-${LAME_VERSION}.tar.gz && \
|
||||
cd lame-${LAME_VERSION} && \
|
||||
./configure \
|
||||
--prefix="${SRC}" \
|
||||
--bindir="${SRC}/bin" \
|
||||
--disable-static \
|
||||
--enable-nasm && \
|
||||
make -j$(nproc) && \
|
||||
make install
|
||||
|
||||
# install vpx
|
||||
RUN mkdir -p /dist && cd /dist && \
|
||||
curl -OLk https://github.com/webmproject/libvpx/archive/refs/tags/v${VPX_VERSION}.tar.gz && \
|
||||
tar xfvz v${VPX_VERSION}.tar.gz && \
|
||||
rm v${VPX_VERSION}.tar.gz && \
|
||||
cd libvpx-${VPX_VERSION} && \
|
||||
./configure --prefix="${SRC}" \
|
||||
--enable-vp8 \
|
||||
--enable-vp9 \
|
||||
--enable-vp9-highbitdepth \
|
||||
--enable-pic \
|
||||
--enable-shared \
|
||||
--disable-debug \
|
||||
--disable-examples \
|
||||
--disable-docs \
|
||||
--disable-install-bins && \
|
||||
make && \
|
||||
make install
|
||||
curl -OLk https://github.com/webmproject/libvpx/archive/refs/tags/v${VPX_VERSION}.tar.gz && \
|
||||
tar xfvz v${VPX_VERSION}.tar.gz && \
|
||||
rm v${VPX_VERSION}.tar.gz && \
|
||||
cd libvpx-${VPX_VERSION} && \
|
||||
./configure --prefix="${SRC}" \
|
||||
--enable-vp8 \
|
||||
--enable-vp9 \
|
||||
--enable-vp9-highbitdepth \
|
||||
--enable-pic \
|
||||
--enable-shared \
|
||||
--disable-debug \
|
||||
--disable-examples \
|
||||
--disable-docs \
|
||||
--disable-install-bins && \
|
||||
make && \
|
||||
make install
|
||||
|
||||
# install freetype
|
||||
RUN mkdir -p /dist && cd /dist && \
|
||||
curl -OLk https://download.savannah.gnu.org/releases/freetype/freetype-${FREETYPE_VERSION}.tar.gz && \
|
||||
tar xfvz freetype-${FREETYPE_VERSION}.tar.gz && \
|
||||
rm freetype-${FREETYPE_VERSION}.tar.gz && \
|
||||
cd freetype-${FREETYPE_VERSION} && \
|
||||
./configure --prefix="${SRC}" \
|
||||
--disable-static \
|
||||
--enable-shared && \
|
||||
make && \
|
||||
make install
|
||||
curl -OLk https://download.savannah.gnu.org/releases/freetype/freetype-${FREETYPE_VERSION}.tar.gz && \
|
||||
tar xfvz freetype-${FREETYPE_VERSION}.tar.gz && \
|
||||
rm freetype-${FREETYPE_VERSION}.tar.gz && \
|
||||
cd freetype-${FREETYPE_VERSION} && \
|
||||
./configure --prefix="${SRC}" \
|
||||
--disable-static \
|
||||
--enable-shared && \
|
||||
make && \
|
||||
make install
|
||||
|
||||
# install srt
|
||||
RUN mkdir -p /dist && cd /dist && \
|
||||
curl -OLk https://github.com/Haivision/srt/archive/refs/tags/v${SRT_VERSION}.tar.gz && \
|
||||
tar xfvz v${SRT_VERSION}.tar.gz && \
|
||||
rm v${SRT_VERSION}.tar.gz && \
|
||||
cd srt-${SRT_VERSION} && \
|
||||
cmake \
|
||||
-G "Unix Makefiles" \
|
||||
-DCMAKE_INSTALL_BINDIR="$SRC/bin" \
|
||||
-DCMAKE_INSTALL_INCLUDEDIR="$SRC/include" \
|
||||
-DCMAKE_INSTALL_LIBDIR="$SRC/lib" \
|
||||
-DCMAKE_INSTALL_SRC="$SRC" && \
|
||||
make && \
|
||||
make install
|
||||
curl -OLk https://github.com/Haivision/srt/archive/refs/tags/v${SRT_VERSION}.tar.gz && \
|
||||
tar xfvz v${SRT_VERSION}.tar.gz && \
|
||||
rm v${SRT_VERSION}.tar.gz && \
|
||||
cd srt-${SRT_VERSION} && \
|
||||
cmake \
|
||||
-G "Unix Makefiles" \
|
||||
-DCMAKE_INSTALL_BINDIR="$SRC/bin" \
|
||||
-DCMAKE_INSTALL_INCLUDEDIR="$SRC/include" \
|
||||
-DCMAKE_INSTALL_LIBDIR="$SRC/lib" \
|
||||
-DCMAKE_INSTALL_SRC="$SRC" && \
|
||||
make && \
|
||||
make install
|
||||
|
||||
# install libxml2
|
||||
RUN mkdir -p /dist && cd /dist && \
|
||||
curl -OLk https://github.com/GNOME/libxml2/archive/refs/tags/v${XML2_VERSION}.tar.gz && \
|
||||
tar xfvz v${XML2_VERSION}.tar.gz && \
|
||||
rm v${XML2_VERSION}.tar.gz && \
|
||||
cd libxml2-${XML2_VERSION} && \
|
||||
./autogen.sh --prefix="${SRC}" \
|
||||
--with-ftp=no \
|
||||
--with-http=no \
|
||||
--with-python=no && \
|
||||
make && \
|
||||
make install
|
||||
curl -OLk https://github.com/GNOME/libxml2/archive/refs/tags/v${XML2_VERSION}.tar.gz && \
|
||||
tar xfvz v${XML2_VERSION}.tar.gz && \
|
||||
rm v${XML2_VERSION}.tar.gz && \
|
||||
cd libxml2-${XML2_VERSION} && \
|
||||
./autogen.sh --prefix="${SRC}" \
|
||||
--with-ftp=no \
|
||||
--with-http=no \
|
||||
--with-python=no && \
|
||||
make && \
|
||||
make install
|
||||
|
||||
# install and patch ffmpeg
|
||||
RUN mkdir -p /dist && cd /dist && \
|
||||
curl -OLk http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.gz && \
|
||||
curl -OLk https://github.com/FFmpeg/nv-codec-headers/releases/download/n${FFNVCODEC_VERSION}/nv-codec-headers-${FFNVCODEC_VERSION}.tar.gz && \
|
||||
tar -xvz -f ffmpeg-${FFMPEG_VERSION}.tar.gz && \
|
||||
tar -xvz -f nv-codec-headers-${FFNVCODEC_VERSION}.tar.gz && \
|
||||
rm ffmpeg-${FFMPEG_VERSION}.tar.gz nv-codec-headers-${FFNVCODEC_VERSION}.tar.gz && \
|
||||
cd nv-codec-headers-${FFNVCODEC_VERSION} && \
|
||||
make install
|
||||
curl -OLk http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.gz && \
|
||||
curl -OLk https://github.com/FFmpeg/nv-codec-headers/releases/download/n${FFNVCODEC_VERSION}/nv-codec-headers-${FFNVCODEC_VERSION}.tar.gz && \
|
||||
tar -xvz -f ffmpeg-${FFMPEG_VERSION}.tar.gz && \
|
||||
tar -xvz -f nv-codec-headers-${FFNVCODEC_VERSION}.tar.gz && \
|
||||
rm ffmpeg-${FFMPEG_VERSION}.tar.gz nv-codec-headers-${FFNVCODEC_VERSION}.tar.gz && \
|
||||
cd nv-codec-headers-${FFNVCODEC_VERSION} && \
|
||||
make install
|
||||
|
||||
COPY ./contrib /contrib
|
||||
|
||||
RUN cd /dist/ffmpeg-${FFMPEG_VERSION} && \
|
||||
patch -p1 < /contrib/ffmpeg-jsonstats.patch && \
|
||||
./configure \
|
||||
--extra-version=datahrei \
|
||||
--prefix="${SRC}" \
|
||||
--extra-cflags=-I/usr/local/cuda/include \
|
||||
--extra-ldflags=-L/usr/local/cuda/lib64 \
|
||||
--enable-nonfree \
|
||||
--enable-gpl \
|
||||
--enable-version3 \
|
||||
--enable-postproc \
|
||||
--enable-static \
|
||||
--enable-openssl \
|
||||
--enable-libxml2 \
|
||||
--enable-cuda \
|
||||
--enable-cuvid \
|
||||
--enable-nvenc \
|
||||
--enable-libnpp \
|
||||
--enable-libv4l2 \
|
||||
--enable-libfreetype \
|
||||
--enable-libsrt \
|
||||
--enable-libx264 \
|
||||
--enable-libx265 \
|
||||
--enable-libvpx \
|
||||
--enable-libmp3lame \
|
||||
--enable-libopus \
|
||||
--enable-libvorbis \
|
||||
--disable-ffplay \
|
||||
--disable-ffprobe \
|
||||
--disable-debug \
|
||||
--disable-doc && \
|
||||
make -j$(nproc) && \
|
||||
make install && \
|
||||
hash -r
|
||||
patch -p1 < /contrib/ffmpeg-jsonstats.patch && \
|
||||
patch -p1 < /contrib/ffmpeg-hlsbitrate.patch && \
|
||||
./configure \
|
||||
--extra-version=datahrei \
|
||||
--prefix="${SRC}" \
|
||||
--extra-cflags=-I/usr/local/cuda/include \
|
||||
--extra-ldflags=-L/usr/local/cuda/lib64 \
|
||||
--enable-nonfree \
|
||||
--enable-gpl \
|
||||
--enable-version3 \
|
||||
--enable-postproc \
|
||||
--enable-static \
|
||||
--enable-openssl \
|
||||
--enable-libxml2 \
|
||||
--enable-cuda \
|
||||
--enable-cuvid \
|
||||
--enable-nvenc \
|
||||
--enable-libnpp \
|
||||
--enable-libv4l2 \
|
||||
--enable-libfreetype \
|
||||
--enable-libsrt \
|
||||
--enable-libx264 \
|
||||
--enable-libx265 \
|
||||
--enable-libvpx \
|
||||
--enable-libmp3lame \
|
||||
--enable-libopus \
|
||||
--enable-libvorbis \
|
||||
--disable-ffplay \
|
||||
--disable-ffprobe \
|
||||
--disable-debug \
|
||||
--disable-doc && \
|
||||
make -j$(nproc) && \
|
||||
make install && \
|
||||
hash -r
|
||||
|
||||
FROM $DEPLOY_IMAGE
|
||||
|
||||
@@ -221,12 +222,12 @@ COPY --from=builder /usr/local/bin/ffmpeg /usr/local/bin/ffmpeg
|
||||
COPY --from=builder /usr/local/lib /usr/local/lib
|
||||
|
||||
RUN echo "/usr/local/lib" > /etc/ld.so.conf.d/ffmpeg.conf && \
|
||||
ldconfig && \
|
||||
ldconfig && \
|
||||
apt-get update && \
|
||||
apt-get install -y \
|
||||
v4l-utils \
|
||||
fbset && \
|
||||
ffmpeg -buildconf
|
||||
v4l-utils \
|
||||
fbset && \
|
||||
ffmpeg -buildconf
|
||||
|
||||
ENV NVIDIA_VISIBLE_DEVICES all
|
||||
ENV NVIDIA_DRIVER_CAPABILITIES compute,video,utility
|
||||
|
||||
26
README.md
26
README.md
@@ -1,9 +1,11 @@
|
||||
# FFmpeg Base
|
||||
|
||||
FFmpeg base image for [datarhei/core](https://github.com/datarhei/core).
|
||||
|
||||
Branch: 5.0
|
||||
|
||||
## Config:
|
||||
|
||||
```sh
|
||||
--enable-libv4l2
|
||||
--enable-libfreetype
|
||||
@@ -15,22 +17,27 @@ Branch: 5.0
|
||||
--enable-libopus
|
||||
--enable-libvorbis
|
||||
```
|
||||
*Additional informations can be found in the Dockerfiles.*
|
||||
|
||||
_Additional informations can be found in the Dockerfiles._
|
||||
|
||||
## Patches:
|
||||
|
||||
- JSON-Stats (expands progress data per file in json format)
|
||||
- HLS Bitrate (calculates bitrate estimate for HLS master playlist)
|
||||
|
||||
## Images and Plattforms:
|
||||
Dockerimage | OS | Plattform | GPU
|
||||
-----------|----|-----------|----
|
||||
docker.io/datarhei/base:alpine-ffmpeg-latest | Alpine 3.15 | linux/amd64, linux/arm64, linux/arm/v7 | -
|
||||
docker.io/datarhei/base:alpine-ffmpeg-rpi-latest | Alpine 3.15 | Raspberry Pi (linux/arm/v7, linux/arm64) | MMAL/OMX/V4L2-M2M (32bit), V4L2-M2M (64bit)
|
||||
docker.io/datarhei/base:alpine-ffmpeg-vaapi-latest | Alpine 3.15 | linux/amd64 | Intel VAAPI
|
||||
docker.io/datarhei/base:ubuntu-ffmpeg-cuda-latest | Ubuntu 20.03 | linux/amd64 | Nvidia Cuda
|
||||
|
||||
| Dockerimage | OS | Plattform | GPU |
|
||||
| -------------------------------------------------- | ------------ | ---------------------------------------- | ------------------------------------------- |
|
||||
| docker.io/datarhei/base:alpine-ffmpeg-latest | Alpine 3.15 | linux/amd64, linux/arm64, linux/arm/v7 | - |
|
||||
| docker.io/datarhei/base:alpine-ffmpeg-rpi-latest | Alpine 3.15 | Raspberry Pi (linux/arm/v7, linux/arm64) | MMAL/OMX/V4L2-M2M (32bit), V4L2-M2M (64bit) |
|
||||
| docker.io/datarhei/base:alpine-ffmpeg-vaapi-latest | Alpine 3.15 | linux/amd64 | Intel VAAPI |
|
||||
| docker.io/datarhei/base:ubuntu-ffmpeg-cuda-latest | Ubuntu 20.03 | linux/amd64 | Nvidia Cuda |
|
||||
|
||||
More tags: https://hub.docker.com/repository/docker/datarhei/base/general
|
||||
|
||||
## Testing
|
||||
|
||||
```sh
|
||||
$ docker buildx create builder
|
||||
$ docker buildx use builder
|
||||
@@ -40,10 +47,13 @@ $ docker buildx rm builder
|
||||
```
|
||||
|
||||
## Known problems:
|
||||
The libraries are currently not compiled due to errors caused by Docker virtualisation.
|
||||
|
||||
The libraries are currently not compiled due to errors caused by Docker virtualisation.
|
||||
|
||||
## Feature requests:
|
||||
|
||||
Please create an issue with your use case and all the requirements.
|
||||
|
||||
## Licence
|
||||
|
||||
LGPL-licensed with optional components licensed under GPL. Please refer to the LICENSE file for detailed information.
|
||||
|
||||
89
contrib/ffmpeg-hlsbitrate.patch
Normal file
89
contrib/ffmpeg-hlsbitrate.patch
Normal file
@@ -0,0 +1,89 @@
|
||||
From 85870fdb0530c8d12faa682bd571060b0fa8fb73 Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Oppermann <ingo@datarhei.com>
|
||||
Date: Wed, 13 Jul 2022 14:26:24 +0200
|
||||
Subject: [PATCH v1] Calculate bandwidth estimate (ffmpeg 5.0)
|
||||
|
||||
---
|
||||
libavformat/hlsenc.c | 29 +++++++++++++++++++++++++++++
|
||||
1 file changed, 29 insertions(+)
|
||||
|
||||
diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
|
||||
index ef8973c..8e437de 100644
|
||||
--- a/libavformat/hlsenc.c
|
||||
+++ b/libavformat/hlsenc.c
|
||||
@@ -125,6 +125,7 @@ typedef struct VariantStream {
|
||||
AVIOContext *out;
|
||||
AVIOContext *out_single_file;
|
||||
int packets_written;
|
||||
+ uint64_t bytes_written;
|
||||
int init_range_length;
|
||||
uint8_t *temp_buffer;
|
||||
uint8_t *init_buffer;
|
||||
@@ -139,6 +140,8 @@ typedef struct VariantStream {
|
||||
double dpp; // duration per packet
|
||||
int64_t start_pts;
|
||||
int64_t end_pts;
|
||||
+ int64_t scaled_start_pts;
|
||||
+ int64_t scaled_cur_pts;
|
||||
int64_t video_lastpos;
|
||||
int64_t video_keyframe_pos;
|
||||
int64_t video_keyframe_size;
|
||||
@@ -1482,6 +1485,16 @@ static int create_master_playlist(AVFormatContext *s,
|
||||
bandwidth += get_stream_bit_rate(vid_st);
|
||||
if (aud_st)
|
||||
bandwidth += get_stream_bit_rate(aud_st);
|
||||
+
|
||||
+ if (bandwidth == 0) {
|
||||
+ // Estimate bandwidth
|
||||
+ bandwidth = (int)round((double)vs->bytes_written / (av_q2d(AV_TIME_BASE_Q) * (vs->scaled_cur_pts - vs->scaled_start_pts)) * 8);
|
||||
+
|
||||
+ // Reset counters
|
||||
+ vs->bytes_written = 0;
|
||||
+ vs->scaled_start_pts = vs->scaled_cur_pts;
|
||||
+ }
|
||||
+
|
||||
bandwidth += bandwidth / 10;
|
||||
|
||||
ccgroup = NULL;
|
||||
@@ -2439,6 +2452,19 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
return AVERROR(ENOMEM);
|
||||
}
|
||||
|
||||
+ if (vs->scaled_start_pts == AV_NOPTS_VALUE) {
|
||||
+ vs->scaled_start_pts = av_rescale_q(pkt->pts, st->time_base, AV_TIME_BASE_Q);
|
||||
+ }
|
||||
+
|
||||
+ if (vs->scaled_cur_pts == AV_NOPTS_VALUE) {
|
||||
+ vs->scaled_cur_pts = av_rescale_q(pkt->pts, st->time_base, AV_TIME_BASE_Q);
|
||||
+ } else {
|
||||
+ int64_t pts = av_rescale_q(pkt->pts, st->time_base, AV_TIME_BASE_Q);
|
||||
+ if (pts > vs->scaled_cur_pts) {
|
||||
+ vs->scaled_cur_pts = pts;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
end_pts = hls->recording_time * vs->number;
|
||||
|
||||
if (vs->sequence - vs->nb_entries > hls->start_sequence && hls->init_time > 0) {
|
||||
@@ -2656,6 +2682,7 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
}
|
||||
|
||||
vs->packets_written++;
|
||||
+ vs->bytes_written += (uint64_t)pkt->size;
|
||||
if (oc->pb) {
|
||||
ret = ff_write_chained(oc, stream_index, pkt, s, 0);
|
||||
vs->video_keyframe_size += pkt->size;
|
||||
@@ -2949,6 +2976,8 @@ static int hls_init(AVFormatContext *s)
|
||||
vs->sequence = hls->start_sequence;
|
||||
vs->start_pts = AV_NOPTS_VALUE;
|
||||
vs->end_pts = AV_NOPTS_VALUE;
|
||||
+ vs->scaled_start_pts = AV_NOPTS_VALUE;
|
||||
+ vs->scaled_cur_pts = AV_NOPTS_VALUE;
|
||||
vs->current_segment_final_filename_fmt[0] = '\0';
|
||||
vs->initial_prog_date_time = initial_program_date_time;
|
||||
|
||||
|
||||
base-commit: 82c775a733a6b3a1a951b7cb1d4fd965bfd2b4dc
|
||||
--
|
||||
2.32.1 (Apple Git-133)
|
||||
|
||||
Reference in New Issue
Block a user