Skip to content
This repository was archived by the owner on Nov 11, 2024. It is now read-only.

Commit 00d3e8c

Browse files
TangZhiZhenczhou26
authored andcommitted
Unified sw and hw into one transcode images.
Signed-off-by: Zhizhen Tang <[email protected]>
1 parent dfda9cd commit 00d3e8c

23 files changed

+303
-42
lines changed

.travis.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ before_install:
1414

1515
jobs:
1616
include:
17-
- name: xcode-server/ffmpeg-sw
17+
- name: xcode-server
1818
script:
1919
- mkdir build
2020
- cd build
2121
- cmake ..
22-
- cd xcode-server/ffmpeg-sw
22+
- cd xcode-server
2323
- make
2424
- name: cdn-server
2525
script:

deployment/docker-swarm/docker-compose.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ services:
7272
mode: 0444
7373

7474
vod-transcode-service:
75-
image: ovc_transcode_sw:latest
75+
image: ovc_transcode_service:latest
7676
volumes:
7777
- ${VIDEO_ARCHIVE_VOLUME}:/var/www/archive:ro
7878
- ${VIDEO_DASH_VOLUME}:/var/www/dash:rw
@@ -84,7 +84,7 @@ services:
8484
- zookeeper-service
8585

8686
live-transcode-service:
87-
image: ovc_transcode_sw:latest
87+
image: ovc_transcode_service:latest
8888
volumes:
8989
- ${VIDEO_ARCHIVE_VOLUME}:/var/www/archive:ro
9090
depends_on:

deployment/kubernetes/docker-compose-template.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ services:
7373
kompose.image-pull-policy: IfNotPresent
7474

7575
vod-transcode-service-0:
76-
image: ovc_transcode_sw:latest
76+
image: ovc_transcode_service:latest
7777
deploy:
7878
replicas: 1
7979
placement:
@@ -87,7 +87,7 @@ services:
8787
kompose.image-pull-policy: IfNotPresent
8888

8989
live-transcode-service-0:
90-
image: ovc_transcode_sw:latest
90+
image: ovc_transcode_service:latest
9191
deploy:
9292
replicas: 1
9393
placement:

deployment/kubernetes/update_yaml.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ def input_node_name(service_name, image_name="sw"):
158158
image_name = "sw"
159159
node_name = input_node_name("vod transcode", image_name.lower())
160160

161-
data = yaml_utils.update_imageName(data, image_name.lower(), False)
161+
data = yaml_utils.update_imageName(data, image_name.lower(), True)
162162
data = yaml_utils.update_nodeSelector(data, node_name)
163163
service_name = "vod-transcode-service-" + str(i)
164164
data = yaml_utils.update_service_name(data,service_name)

deployment/kubernetes/yaml_utils.py

-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ def update_imageName(data, imageName, isVOD):
3232
else:
3333
replicas_caps = 2
3434
data['spec']['replicas'] = replicas_caps
35-
data['spec']['template']['spec']['containers'][0]['image'] = "ovc_transcode_" + imageName + ":latest"
3635
if imageName == "hw":
3736
limits_caps = { 'limits': {'gpu.intel.com/i915': 1} }
3837
data['spec']['template']['spec']['containers'][0]['resources'] = limits_caps

streaming-server/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
set(service "ovc_streaming_service")
22
include("${CMAKE_SOURCE_DIR}/script/service.cmake")
3-
add_dependencies(build_${service} build_ovc_transcode_sw)
3+
add_dependencies(build_${service} build_ovc_transcode_service)

streaming-server/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ RUN mkdir -p /home/build/var/www/tmp/client_body && \
5353
mkdir -p /home/build/var/www/html
5454

5555

56-
FROM ovc_transcode_sw:latest
56+
FROM ovc_transcode_service:latest
5757
LABEL Description="This is the base image for a NGINX+RTMP service"
5858
LABEL Vendor="Intel Corporation"
5959
WORKDIR /home
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
CMakeLists.txt
2-
*.sh
32
*.m4
43
test/*

xcode-server/CMakeLists.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
include("${CMAKE_SOURCE_DIR}/script/scan-all.cmake")
1+
set(service "ovc_transcode_service")
2+
include("${CMAKE_SOURCE_DIR}/script/service.cmake")

xcode-server/Dockerfile

+279
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,279 @@
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"]
File renamed without changes.

xcode-server/build.sh

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#!/bin/bash -e
2+
3+
IMAGE="ovc_transcode_service"
4+
DIR=$(dirname $(readlink -f "$0"))
5+
6+
. "${DIR}/../script/build.sh"
File renamed without changes.

xcode-server/ffmpeg-hw/CMakeLists.txt

-2
This file was deleted.

xcode-server/ffmpeg-hw/build.sh

-6
This file was deleted.

xcode-server/ffmpeg-hw/shell.sh

-7
This file was deleted.

xcode-server/ffmpeg-sw/CMakeLists.txt

-2
This file was deleted.

0 commit comments

Comments
 (0)