|
| 1 | + |
| 2 | +FROM ubuntu:18.04 AS build |
| 3 | +WORKDIR /home |
| 4 | + |
| 5 | +# COMMON BUILD TOOLS |
| 6 | +RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y -q --no-install-recommends build-essential autoconf make git wget pciutils cpio libtool lsb-release ca-certificates pkg-config bison flex |
| 7 | + |
| 8 | +# Install cmake |
| 9 | +ARG CMAKE_VER=3.13.1 |
| 10 | +ARG CMAKE_REPO=https://cmake.org/files |
| 11 | +RUN wget -O - ${CMAKE_REPO}/v${CMAKE_VER%.*}/cmake-${CMAKE_VER}.tar.gz | tar xz && \ |
| 12 | + cd cmake-${CMAKE_VER} && \ |
| 13 | + ./bootstrap --prefix="/usr" && \ |
| 14 | + make -j8 && \ |
| 15 | + make install |
| 16 | + |
| 17 | +# Install automake, use version 1.14 on CentOS |
| 18 | +ARG AUTOMAKE_VER=1.14 |
| 19 | +ARG AUTOMAKE_REPO=https://ftp.gnu.org/pub/gnu/automake/automake-${AUTOMAKE_VER}.tar.xz |
| 20 | + RUN apt-get install -y -q automake |
| 21 | + |
| 22 | +# Build NASM |
| 23 | +ARG NASM_VER=2.13.03 |
| 24 | +ARG NASM_REPO=https://www.nasm.us/pub/nasm/releasebuilds/${NASM_VER}/nasm-${NASM_VER}.tar.bz2 |
| 25 | +RUN wget ${NASM_REPO} && \ |
| 26 | + tar -xaf nasm* && \ |
| 27 | + cd nasm-${NASM_VER} && \ |
| 28 | + ./autogen.sh && \ |
| 29 | + ./configure --prefix="/usr" --libdir=/usr/lib/x86_64-linux-gnu && \ |
| 30 | + make -j8 && \ |
| 31 | + make install |
| 32 | + |
| 33 | +# Build YASM |
| 34 | +ARG YASM_VER=1.3.0 |
| 35 | +ARG YASM_REPO=https://www.tortall.net/projects/yasm/releases/yasm-${YASM_VER}.tar.gz |
| 36 | +RUN wget -O - ${YASM_REPO} | tar xz && \ |
| 37 | + cd yasm-${YASM_VER} && \ |
| 38 | + sed -i "s/) ytasm.*/)/" Makefile.in && \ |
| 39 | + ./configure --prefix="/usr" --libdir=/usr/lib/x86_64-linux-gnu && \ |
| 40 | + make -j8 && \ |
| 41 | + make install |
| 42 | + |
| 43 | +# Build ogg |
| 44 | +ARG OGG_VER=1.3.3 |
| 45 | +ARG OGG_REPO=https://downloads.xiph.org/releases/ogg/libogg-${OGG_VER}.tar.xz |
| 46 | + |
| 47 | +RUN wget -O - ${OGG_REPO} | tar xJ && \ |
| 48 | + cd libogg-${OGG_VER} && \ |
| 49 | + ./configure --prefix="/usr" --libdir=/usr/lib/x86_64-linux-gnu --enable-shared && \ |
| 50 | + make -j8 && \ |
| 51 | + make install DESTDIR=/home/build && \ |
| 52 | + make install |
| 53 | + |
| 54 | +# Build vorbis |
| 55 | +ARG VORBIS_VER=1.3.6 |
| 56 | +ARG VORBIS_REPO=https://downloads.xiph.org/releases/vorbis/libvorbis-${VORBIS_VER}.tar.xz |
| 57 | + |
| 58 | +RUN wget -O - ${VORBIS_REPO} | tar xJ && \ |
| 59 | + cd libvorbis-${VORBIS_VER} && \ |
| 60 | + ./configure --prefix="/usr" --libdir=/usr/lib/x86_64-linux-gnu --enable-shared && \ |
| 61 | + make -j8 && \ |
| 62 | + make install DESTDIR=/home/build && \ |
| 63 | + make install |
| 64 | + |
| 65 | +# Build mp3lame |
| 66 | +ARG MP3LAME_VER=3.100 |
| 67 | +ARG MP3LAME_REPO=https://sourceforge.net/projects/lame/files/lame/${MP3LAME_VER}/lame-${MP3LAME_VER}.tar.gz |
| 68 | + |
| 69 | +RUN wget -O - ${MP3LAME_REPO} | tar xz && \ |
| 70 | + cd lame-${MP3LAME_VER} && \ |
| 71 | + ./configure --prefix="/usr" --libdir=/usr/lib/x86_64-linux-gnu --enable-shared --enable-nasm && \ |
| 72 | + make -j8 && \ |
| 73 | + make install DESTDIR=/home/build && \ |
| 74 | + make install |
| 75 | + |
| 76 | +# Build fdk-aac |
| 77 | +ARG FDK_AAC_VER=v0.1.6 |
| 78 | +ARG FDK_AAC_REPO=https://github.com/mstorsjo/fdk-aac/archive/${FDK_AAC_VER}.tar.gz |
| 79 | + |
| 80 | +RUN wget -O - ${FDK_AAC_REPO} | tar xz && mv fdk-aac-${FDK_AAC_VER#v} fdk-aac && \ |
| 81 | + cd fdk-aac && \ |
| 82 | + autoreconf -fiv && \ |
| 83 | + ./configure --prefix="/usr" --libdir=/usr/lib/x86_64-linux-gnu --enable-shared && \ |
| 84 | + make -j8 && \ |
| 85 | + make install DESTDIR=/home/build && \ |
| 86 | + make install |
| 87 | + |
| 88 | +# Build opus |
| 89 | +ARG OPUS_VER=1.2.1 |
| 90 | +ARG OPUS_REPO=https://archive.mozilla.org/pub/opus/opus-${OPUS_VER}.tar.gz |
| 91 | + |
| 92 | +RUN wget -O - ${OPUS_REPO} | tar xz && \ |
| 93 | + cd opus-${OPUS_VER} && \ |
| 94 | + ./configure --prefix="/usr" --libdir=/usr/lib/x86_64-linux-gnu --enable-shared && \ |
| 95 | + make -j8 && \ |
| 96 | + make install DESTDIR=/home/build && \ |
| 97 | + make install |
| 98 | + |
| 99 | +# Build vpx |
| 100 | +ARG VPX_VER=tags/v1.7.0 |
| 101 | +ARG VPX_REPO=https://chromium.googlesource.com/webm/libvpx.git |
| 102 | +RUN git clone ${VPX_REPO} && \ |
| 103 | + cd libvpx && \ |
| 104 | + git checkout ${VPX_VER} && \ |
| 105 | + ./configure --prefix="/usr" --libdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=nasm && \ |
| 106 | + make -j8 && \ |
| 107 | + make install DESTDIR=/home/build && \ |
| 108 | + make install |
| 109 | + |
| 110 | +# Build AOM |
| 111 | +ARG AOM_VER=b6f1767eedbaddeb1ff5aa409a710ef61078640e |
| 112 | +ARG AOM_REPO=https://aomedia.googlesource.com/aom |
| 113 | +RUN git clone ${AOM_REPO} && \ |
| 114 | + mkdir aom/aom_build && \ |
| 115 | + cd aom/aom_build && \ |
| 116 | + git checkout ${AOM_VER} && \ |
| 117 | + cmake -DBUILD_SHARED_LIBS=ON -DENABLE_NASM=ON -DENABLE_TESTS=OFF -DENABLE_DOCS=OFF -DCMAKE_INSTALL_PREFIX="/usr" -DLIB_INSTALL_DIR=/usr/lib/x86_64-linux-gnu .. && \ |
| 118 | + make -j8 && \ |
| 119 | + make install DESTDIR="/home/build" && \ |
| 120 | + make install |
| 121 | + |
| 122 | +# Build x264 |
| 123 | +ARG X264_VER=stable |
| 124 | +ARG X264_REPO=https://github.com/mirror/x264 |
| 125 | +RUN git clone ${X264_REPO} && \ |
| 126 | + cd x264 && \ |
| 127 | + git checkout ${X264_VER} && \ |
| 128 | + ./configure --prefix="/usr" --libdir=/usr/lib/x86_64-linux-gnu --enable-shared && \ |
| 129 | + make -j8 && \ |
| 130 | + make install DESTDIR="/home/build" && \ |
| 131 | + make install |
| 132 | + |
| 133 | +# Build x265 |
| 134 | +ARG X265_VER=2.9 |
| 135 | +ARG X265_REPO=https://github.com/videolan/x265/archive/${X265_VER}.tar.gz |
| 136 | + |
| 137 | +RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y -q --no-install-recommends libnuma-dev |
| 138 | +RUN wget -O - ${X265_REPO} | tar xz && mv x265-${X265_VER} x265 && \ |
| 139 | + cd x265/build/linux && \ |
| 140 | + cmake -DBUILD_SHARED_LIBS=ON -DENABLE_TESTS=OFF -DCMAKE_INSTALL_PREFIX=/usr -DLIB_INSTALL_DIR=/usr/lib/x86_64-linux-gnu ../../source && \ |
| 141 | + make -j8 && \ |
| 142 | + make install DESTDIR="/home/build" && \ |
| 143 | + make install |
| 144 | + |
| 145 | +# Fetch SVT-HEVC |
| 146 | +ARG SVT_HEVC_VER=252ff3d18bc1997a5af989ad4e67e025c93dbf68 |
| 147 | +ARG SVT_HEVC_REPO=https://github.com/OpenVisualCloud/SVT-HEVC.git |
| 148 | + |
| 149 | +RUN git clone ${SVT_HEVC_REPO} && \ |
| 150 | + cd SVT-HEVC/Build/linux && \ |
| 151 | + git checkout ${SVT_HEVC_VER} && \ |
| 152 | + mkdir -p ../../Bin/Release && \ |
| 153 | + cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib/x86_64-linux-gnu -DCMAKE_ASM_NASM_COMPILER=yasm ../.. && \ |
| 154 | + make -j8 && \ |
| 155 | + make install DESTDIR=/home/build && \ |
| 156 | + make install |
| 157 | + |
| 158 | +# Fetch SVT-AV1 |
| 159 | +ARG SVT_AV1_VER=2bebd2df01b28a64dcd834b40f0a5ed090143945 |
| 160 | +ARG SVT_AV1_REPO=https://github.com/OpenVisualCloud/SVT-AV1.git |
| 161 | + |
| 162 | +RUN git clone ${SVT_AV1_REPO} && \ |
| 163 | + cd SVT-AV1 && \ |
| 164 | + git checkout ${SVT_AV1_VER} && \ |
| 165 | + cd Build/linux && \ |
| 166 | + mkdir -p ../../Bin/Release && \ |
| 167 | + cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib/x86_64-linux-gnu -DCMAKE_ASM_NASM_COMPILER=yasm ../.. && \ |
| 168 | + make -j8 && \ |
| 169 | + make install DESTDIR=/home/build && \ |
| 170 | + make install |
| 171 | + |
| 172 | +#include(transform360.m4) |
| 173 | +# Fetch gmmlib |
| 174 | +ARG GMMLIB_VER=intel-gmmlib-18.3.0 |
| 175 | +ARG GMMLIB_REPO=https://github.com/intel/gmmlib/archive/${GMMLIB_VER}.tar.gz |
| 176 | + |
| 177 | +RUN wget -O - ${GMMLIB_REPO} | tar xz && mv gmmlib-${GMMLIB_VER} gmmlib; |
| 178 | + |
| 179 | + |
| 180 | +# Build libva |
| 181 | +ARG LIBVA_VER=2.3.0 |
| 182 | +ARG LIBVA_REPO=https://github.com/intel/libva/archive/${LIBVA_VER}.tar.gz |
| 183 | + |
| 184 | +RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y -q --no-install-recommends libdrm-dev libx11-dev xorg-dev libgl1-mesa-dev |
| 185 | + |
| 186 | +RUN wget -O - ${LIBVA_REPO} | tar xz && \ |
| 187 | + cd libva-${LIBVA_VER} && \ |
| 188 | + ./autogen.sh --prefix=/usr --libdir=/usr/lib/x86_64-linux-gnu && \ |
| 189 | + make -j8 && \ |
| 190 | + make install DESTDIR=/home/build && \ |
| 191 | + make install; |
| 192 | + |
| 193 | + |
| 194 | +# Build media driver |
| 195 | +ARG MEDIA_DRIVER_VER=intel-media-kbl-19.1.0 |
| 196 | +ARG MEDIA_DRIVER_REPO=https://github.com/VCDP/media-driver/archive/${MEDIA_DRIVER_VER}.tar.gz |
| 197 | + |
| 198 | +RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y -q --no-install-recommends libdrm-dev libpciaccess-dev libx11-dev xorg-dev libgl1-mesa-dev |
| 199 | + |
| 200 | +RUN wget -O - ${MEDIA_DRIVER_REPO} | tar xz && mv media-driver-${MEDIA_DRIVER_VER} media-driver && \ |
| 201 | + mkdir -p media-driver/build && \ |
| 202 | + cd media-driver/build && \ |
| 203 | + cmake -DBUILD_TYPE=release -DBUILD_ALONG_WITH_CMRTLIB=1 -DMEDIA_VERSION="2.0.0" -DBS_DIR_GMMLIB=/home/gmmlib/Source/GmmLib -DBS_DIR_COMMON=/home/gmmlib/Source/Common -DBS_DIR_INC=/home/gmmlib/Source/inc -DBS_DIR_MEDIA=/home/media-driver -Wno-dev -DCMAKE_INSTALL_PREFIX=/usr .. && \ |
| 204 | + make -j8 && \ |
| 205 | + make install DESTDIR=/home/build && \ |
| 206 | + make install |
| 207 | + |
| 208 | + |
| 209 | +# Build Intel(R) Media SDK |
| 210 | +ARG MSDK_VER=MSS-KBL-2019-R1 |
| 211 | +ARG MSDK_REPO=https://github.com/Intel-Media-SDK/MediaSDK/archive/${MSDK_VER}.tar.gz |
| 212 | + |
| 213 | +RUN wget -O - ${MSDK_REPO} | tar xz && mv MediaSDK-${MSDK_VER} MediaSDK && \ |
| 214 | + mkdir -p MediaSDK/build && \ |
| 215 | + cd MediaSDK/build && \ |
| 216 | + cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_INCLUDEDIR=include/mfx -DBUILD_SAMPLES=OFF -DENABLE_OPENCL=OFF -Wno-dev .. && \ |
| 217 | + make -j8 && \ |
| 218 | + make install DESTDIR=/home/build && \ |
| 219 | + rm -rf /home/build/usr/samples && \ |
| 220 | + rm -rf /home/build/usr/plugins && \ |
| 221 | + make install; |
| 222 | + |
| 223 | +# Fetch FFmpeg source |
| 224 | +ARG FFMPEG_VER=n4.1 |
| 225 | +ARG FFMPEG_REPO=https://github.com/FFmpeg/FFmpeg/archive/${FFMPEG_VER}.tar.gz |
| 226 | +ARG FFMPEG_FLV_PATCH_REPO=https://raw.githubusercontent.com/VCDP/CDN/master/The-RTMP-protocol-extensions-for-H.265-HEVC.patch |
| 227 | +ARG FFMPEG_1TN_PATCH_REPO=https://patchwork.ffmpeg.org/patch/11625/raw |
| 228 | +ARG FFMPEG_THREAD_PATCH_REPO=https://patchwork.ffmpeg.org/patch/11035/raw |
| 229 | +ARG FFMPEG_HW_LOOP_PATCH_REPO=https://patchwork.ffmpeg.org/patch/8173/raw |
| 230 | +ARG FFMPEG_ENCODE_THREAD_PATCH_REPO=https://patchwork.ffmpeg.org/patch/11179/raw |
| 231 | +# ARG FFMPEG_RTMP_WORKAROUD_REPO=https://raw.githubusercontent.com/VCDP/CDN/master/Check_rtmp_packet_timestamp_workaround_ffmpeg.patch |
| 232 | + |
| 233 | + |
| 234 | +RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y -q --no-install-recommends libvdpau-dev libsdl2-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev zlib1g-dev libssl-dev |
| 235 | +RUN wget -O - ${FFMPEG_REPO} | tar xz && mv FFmpeg-${FFMPEG_VER} FFmpeg && \ |
| 236 | + cd FFmpeg && \ |
| 237 | + wget -O - ${FFMPEG_FLV_PATCH_REPO} | patch -p1 && \ |
| 238 | + wget -O - ${FFMPEG_1TN_PATCH_REPO} | patch -p1 && \ |
| 239 | + wget -O - ${FFMPEG_THREAD_PATCH_REPO} | patch -p1 && \ |
| 240 | + wget -O - ${FFMPEG_HW_LOOP_PATCH_REPO} | patch -p1 && \ |
| 241 | + wget -O - ${FFMPEG_ENCODE_THREAD_PATCH_REPO} | patch -p1 |
| 242 | +# wget -O - ${FFMPEG_RTMP_WORKAROUD_REPO} | patch -p1 |
| 243 | + |
| 244 | +# Patch FFmpeg source for SVT-HEVC and SVT-AV1 |
| 245 | +RUN cd /home/FFmpeg && \ |
| 246 | + patch -p1 < ../SVT-HEVC/ffmpeg_plugin/0001-lavc-svt_hevc-add-libsvt-hevc-encoder-wrapper.patch && \ |
| 247 | + patch -p1 < ../SVT-AV1/ffmpeg_plugin/0001-Add-ability-for-ffmpeg-to-run-svt-av1-with-svt-hevc.patch |
| 248 | + |
| 249 | +# Compile FFmpeg |
| 250 | +RUN cd /home/FFmpeg && \ |
| 251 | + ./configure --prefix="/usr" --libdir=/usr/lib/x86_64-linux-gnu --extra-libs="-lpthread -lm" --enable-shared --enable-gpl --enable-openssl --enable-nonfree --enable-libdrm --enable-libmfx --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libaom --enable-libsvthevc --enable-libsvtav1 && \ |
| 252 | + make -j8 && \ |
| 253 | + make install DESTDIR="/home/build" |
| 254 | + |
| 255 | + |
| 256 | +# Clean up after build |
| 257 | +RUN rm -rf /home/build/usr/include && \ |
| 258 | + rm -rf /home/build/usr/share/doc && \ |
| 259 | + rm -rf /home/build/usr/share/gtk-doc && \ |
| 260 | + rm -rf /home/build/usr/share/man && \ |
| 261 | + find /home/build -name "*.a" -exec rm -f {} \; |
| 262 | + |
| 263 | +FROM ubuntu:18.04 |
| 264 | +LABEL Description="This is the base image for FFMPEG Ubuntu 18.04 LTS" |
| 265 | +LABEL Vendor="Intel Corporation" |
| 266 | +WORKDIR /home |
| 267 | + |
| 268 | +# Prerequisites |
| 269 | +RUN ln -sf /usr/share/zoneinfo/UTC /etc/localtime && \ |
| 270 | + DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y -q --no-install-recommends libxv1 libxcb-shm0 libxcb-shape0 libxcb-xfixes0 libsdl2-2.0-0 libasound2 libvdpau1 libnuma1 libssl1.1 libpciaccess0 libdrm-dev python3-tornado python3-kafka python3-bs4 python3-kazoo vim && \ |
| 271 | + rm -rf /var/lib/apt/lists/* |
| 272 | +# Install |
| 273 | +COPY --from=build /home/build / |
| 274 | +COPY *.ini /home/ |
| 275 | +COPY *.py /home/ |
| 276 | +ENV LIBVA_DRIVERS_PATH=/usr/lib/x86_64-linux-gnu/dri |
| 277 | +ENV LIBVA_DRIVER_NAME=iHD |
| 278 | +CMD ["/bin/bash","-c","/home/main.py"] |
| 279 | +VOLUME ["/var/www/archive","/var/www/dash","/var/www/hls"] |
0 commit comments