mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Merge
This commit is contained in:
commit
52fb6aed10
279 changed files with 12678 additions and 1635 deletions
|
@ -376,7 +376,7 @@ fi
|
|||
# state-threads
|
||||
#####################################################################################
|
||||
# check the cross build flag file, if flag changed, need to rebuild the st.
|
||||
_ST_MAKE=linux-debug && _ST_LD=${SRS_TOOL_LD} && _ST_OBJ="LINUX_`uname -r`_DBG"
|
||||
_ST_MAKE=linux-debug && _ST_OBJ="LINUX_`uname -r`_DBG"
|
||||
# Always alloc on heap, @see https://github.com/ossrs/srs/issues/509#issuecomment-719931676
|
||||
_ST_EXTRA_CFLAGS="-DMALLOC_STACK"
|
||||
# For valgrind to detect memory issues.
|
||||
|
@ -385,7 +385,7 @@ if [[ $SRS_VALGRIND == YES ]]; then
|
|||
fi
|
||||
# for osx, use darwin for st, donot use epoll.
|
||||
if [[ $SRS_OSX == YES ]]; then
|
||||
_ST_MAKE=darwin-debug && _ST_LD=${SRS_TOOL_CC} && _ST_OBJ="DARWIN_`uname -r`_DBG"
|
||||
_ST_MAKE=darwin-debug && _ST_OBJ="DARWIN_`uname -r`_DBG"
|
||||
fi
|
||||
# Whether enable debug stats.
|
||||
if [[ $SRS_DEBUG_STATS == YES ]]; then
|
||||
|
@ -403,7 +403,7 @@ else
|
|||
fi
|
||||
# The final args to make st.
|
||||
_ST_MAKE_ARGS="${_ST_MAKE} STATIC_ONLY=${_ST_STATIC_ONLY}"
|
||||
_ST_MAKE_ARGS="${_ST_MAKE_ARGS} CC=${SRS_TOOL_CC} AR=${SRS_TOOL_AR} LD=${_ST_LD} RANDLIB=${SRS_TOOL_RANDLIB}"
|
||||
_ST_MAKE_ARGS="${_ST_MAKE_ARGS} CC=${SRS_TOOL_CC} AR=${SRS_TOOL_AR} LD=${SRS_TOOL_LD} RANDLIB=${SRS_TOOL_RANDLIB}"
|
||||
# Patched ST from https://github.com/ossrs/state-threads/tree/srs
|
||||
if [[ -f ${SRS_OBJS}/${SRS_PLATFORM}/st-srs/${_ST_OBJ}/libst.a ]]; then
|
||||
echo "The state-threads is ok.";
|
||||
|
@ -528,7 +528,9 @@ if [[ $SRS_SSL == YES && $SRS_USE_SYS_SSL != YES ]]; then
|
|||
OPENSSL_CONFIG="./config"
|
||||
# https://stackoverflow.com/questions/15539062/cross-compiling-of-openssl-for-linux-arm-v5te-linux-gnueabi-toolchain
|
||||
if [[ $SRS_CROSS_BUILD == YES ]]; then
|
||||
OPENSSL_CONFIG="./Configure linux-armv4"
|
||||
OPENSSL_CONFIG="./Configure linux-generic32"
|
||||
if [[ $SRS_CROSS_BUILD_ARMV7 == YES ]]; then OPENSSL_CONFIG="./Configure linux-armv4"; fi
|
||||
if [[ $SRS_CROSS_BUILD_AARCH64 == YES ]]; then OPENSSL_CONFIG="./Configure linux-aarch64"; fi
|
||||
elif [[ ! -f ${SRS_OBJS}/${SRS_PLATFORM}/openssl/lib/libssl.a ]]; then
|
||||
# Try to use exists libraries.
|
||||
if [[ -f /usr/local/ssl/lib/libssl.a && $SRS_SSL_LOCAL == NO ]]; then
|
||||
|
@ -597,11 +599,16 @@ fi
|
|||
#####################################################################################
|
||||
# srtp
|
||||
#####################################################################################
|
||||
SRTP_CONFIG="echo SRTP without openssl(ASM) optimization" && SRTP_OPTIONS=""
|
||||
SRTP_OPTIONS=""
|
||||
# If use ASM for SRTP, we enable openssl(with ASM).
|
||||
if [[ $SRS_SRTP_ASM == YES ]]; then
|
||||
echo "SRTP with openssl(ASM) optimization" &&
|
||||
SRTP_CONFIG="export PKG_CONFIG_PATH=../openssl/lib/pkgconfig" && SRTP_OPTIONS="--enable-openssl"
|
||||
SRTP_OPTIONS="--enable-openssl"
|
||||
SRTP_CONFIGURE="env PKG_CONFIG_PATH=$(cd ${SRS_OBJS}/${SRS_PLATFORM} && pwd)/openssl/lib/pkgconfig ./configure"
|
||||
else
|
||||
SRTP_CONFIGURE="./configure"
|
||||
fi
|
||||
if [[ $SRS_CROSS_BUILD == YES ]]; then
|
||||
SRTP_OPTIONS="$SRTP_OPTIONS --host=$SRS_CROSS_BUILD_HOST"
|
||||
fi
|
||||
# Patched ST from https://github.com/ossrs/state-threads/tree/srs
|
||||
if [[ -f ${SRS_OBJS}/${SRS_PLATFORM}/libsrtp-2-fit/_release/lib/libsrtp2.a ]]; then
|
||||
|
@ -611,7 +618,7 @@ else
|
|||
(
|
||||
rm -rf ${SRS_OBJS}/srtp2 && cd ${SRS_OBJS}/${SRS_PLATFORM} &&
|
||||
rm -rf libsrtp-2-fit && cp -R ../../3rdparty/libsrtp-2-fit . && cd libsrtp-2-fit &&
|
||||
${SRTP_CONFIG} && ./configure ${SRTP_OPTIONS} --prefix=`pwd`/_release &&
|
||||
$SRTP_CONFIGURE ${SRTP_OPTIONS} --prefix=`pwd`/_release &&
|
||||
make ${SRS_JOBS} && make install &&
|
||||
cd .. && rm -rf srtp2 && ln -sf libsrtp-2-fit/_release srtp2
|
||||
)
|
||||
|
@ -626,10 +633,11 @@ if [ ! -f ${SRS_OBJS}/srtp2/lib/libsrtp2.a ]; then echo "Build libsrtp-2-fit sta
|
|||
#####################################################################################
|
||||
# libopus, for WebRTC to transcode AAC with Opus.
|
||||
#####################################################################################
|
||||
if [[ $SRS_RTC == YES ]]; then
|
||||
# For cross build, we use opus of FFmpeg, so we don't build the libopus.
|
||||
if [[ $SRS_RTC == YES && $SRS_CROSS_BUILD == NO ]]; then
|
||||
# Only build static libraries if no shared FFmpeg.
|
||||
if [[ $SRS_SHARED_FFMPEG == NO ]]; then
|
||||
OPUS_OPTIONS="--disable-shared"
|
||||
OPUS_OPTIONS="--disable-shared --disable-doc"
|
||||
fi
|
||||
if [[ -f ${SRS_OBJS}/${SRS_PLATFORM}/opus-1.3.1/_release/lib/libopus.a ]]; then
|
||||
echo "The opus-1.3.1 is ok.";
|
||||
|
@ -638,7 +646,8 @@ if [[ $SRS_RTC == YES ]]; then
|
|||
(
|
||||
rm -rf ${SRS_OBJS}/${SRS_PLATFORM}/opus-1.3.1 && cd ${SRS_OBJS}/${SRS_PLATFORM} &&
|
||||
tar xf ../../3rdparty/opus-1.3.1.tar.gz && cd opus-1.3.1 &&
|
||||
./configure --prefix=`pwd`/_release --enable-static $OPUS_OPTIONS && make ${SRS_JOBS} && make install
|
||||
./configure --prefix=`pwd`/_release --enable-static $OPUS_OPTIONS &&
|
||||
make ${SRS_JOBS} && make install &&
|
||||
cd .. && rm -rf opus && ln -sf opus-1.3.1/_release opus
|
||||
)
|
||||
fi
|
||||
|
@ -655,19 +664,32 @@ fi
|
|||
#####################################################################################
|
||||
if [[ $SRS_FFMPEG_FIT == YES ]]; then
|
||||
FFMPEG_OPTIONS=""
|
||||
if [[ $SRS_CROSS_BUILD == YES ]]; then
|
||||
FFMPEG_CONFIGURE=./configure
|
||||
else
|
||||
FFMPEG_CONFIGURE="env PKG_CONFIG_PATH=$(cd ${SRS_OBJS}/${SRS_PLATFORM} && pwd)/opus/lib/pkgconfig ./configure"
|
||||
fi
|
||||
|
||||
# If disable nasm, disable all ASMs.
|
||||
if [[ $SRS_NASM == NO ]]; then
|
||||
nasm -v >/dev/null 2>&1 && NASM_BIN_OK=YES
|
||||
if [[ $NASM_BIN_OK != YES || $SRS_NASM == NO || $SRS_CROSS_BUILD == YES ]]; then
|
||||
FFMPEG_OPTIONS="--disable-asm --disable-x86asm --disable-inline-asm"
|
||||
fi
|
||||
# If no nasm, we disable the x86asm.
|
||||
nasm -v >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then
|
||||
FFMPEG_OPTIONS="--disable-x86asm"
|
||||
fi
|
||||
# Only build static libraries if no shared FFmpeg.
|
||||
if [[ $SRS_SHARED_FFMPEG == YES ]]; then
|
||||
FFMPEG_OPTIONS="$FFMPEG_OPTIONS --enable-shared"
|
||||
fi
|
||||
# For cross-build.
|
||||
if [[ $SRS_CROSS_BUILD == YES ]]; then
|
||||
FFMPEG_OPTIONS="$FFMPEG_OPTIONS --enable-cross-compile --target-os=linux"
|
||||
if [[ $SRS_CROSS_BUILD_ARMV7 ]]; then FFMPEG_OPTIONS="$FFMPEG_OPTIONS --arch=arm"; fi
|
||||
if [[ $SRS_CROSS_BUILD_AARCH64 ]]; then FFMPEG_OPTIONS="$FFMPEG_OPTIONS --arch=aarch64"; fi
|
||||
FFMPEG_OPTIONS="$FFMPEG_OPTIONS --cross-prefix=$SRS_CROSS_BUILD_PREFIX"
|
||||
FFMPEG_OPTIONS="$FFMPEG_OPTIONS --cc=${SRS_TOOL_CC} --cxx=${SRS_TOOL_CXX} --ar=${SRS_TOOL_AR} --ld=${SRS_TOOL_LD}"
|
||||
FFMPEG_OPTIONS="$FFMPEG_OPTIONS --enable-decoder=opus --enable-encoder=opus"
|
||||
else
|
||||
FFMPEG_OPTIONS="$FFMPEG_OPTIONS --enable-decoder=libopus --enable-encoder=libopus --enable-libopus"
|
||||
fi
|
||||
|
||||
if [[ -f ${SRS_OBJS}/${SRS_PLATFORM}/ffmpeg-4-fit/_release/lib/libavcodec.a ]]; then
|
||||
echo "The ffmpeg-4-fit is ok.";
|
||||
|
@ -677,20 +699,24 @@ if [[ $SRS_FFMPEG_FIT == YES ]]; then
|
|||
rm -rf ${SRS_OBJS}/${SRS_PLATFORM}/ffmpeg-4-fit && mkdir -p ${SRS_OBJS}/${SRS_PLATFORM}/ffmpeg-4-fit &&
|
||||
# Create a hidden directory .src
|
||||
cd ${SRS_OBJS}/${SRS_PLATFORM}/ffmpeg-4-fit && cp -R ../../../3rdparty/ffmpeg-4-fit/* . &&
|
||||
# For libopus and other codecs.
|
||||
ABS_OBJS=$(cd .. && pwd) &&
|
||||
# Build source code.
|
||||
PKG_CONFIG_PATH=$ABS_OBJS/opus/lib/pkgconfig ./configure \
|
||||
--prefix=`pwd`/_release \
|
||||
--pkg-config-flags="--static" --extra-libs="-lpthread" --extra-libs="-lm" ${FFMPEG_OPTIONS} \
|
||||
$FFMPEG_CONFIGURE \
|
||||
--prefix=`pwd`/_release --pkg-config=pkg-config ${FFMPEG_OPTIONS} \
|
||||
--disable-everything --pkg-config-flags="--static" --extra-libs="-lpthread" --extra-libs="-lm" \
|
||||
--disable-programs --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages \
|
||||
--disable-avdevice --disable-avformat --disable-swscale --disable-postproc --disable-avfilter --disable-network \
|
||||
--disable-dct --disable-dwt --disable-error-resilience --disable-lsp --disable-lzo --disable-faan --disable-pixelutils \
|
||||
--disable-hwaccels --disable-devices --disable-audiotoolbox --disable-videotoolbox --disable-cuda-llvm --disable-cuvid \
|
||||
--disable-hwaccels --disable-devices --disable-audiotoolbox --disable-videotoolbox --disable-cuvid \
|
||||
--disable-d3d11va --disable-dxva2 --disable-ffnvcodec --disable-nvdec --disable-nvenc --disable-v4l2-m2m --disable-vaapi \
|
||||
--disable-vdpau --disable-appkit --disable-coreimage --disable-avfoundation --disable-securetransport --disable-iconv \
|
||||
--disable-lzma --disable-sdl2 --disable-everything --enable-decoder=aac --enable-decoder=aac_fixed --enable-decoder=aac_latm \
|
||||
--enable-decoder=libopus --enable-encoder=aac --enable-encoder=opus --enable-encoder=libopus --enable-libopus &&
|
||||
--enable-encoder=aac &&
|
||||
# See https://www.laoyuyu.me/2019/05/23/android/clang_compile_ffmpeg/
|
||||
if [[ $SRS_CROSS_BUILD == YES ]]; then
|
||||
sed -i -e 's/#define getenv(x) NULL/\/\*#define getenv(x) NULL\*\//g' config.h &&
|
||||
sed -i -e 's/#define HAVE_GMTIME_R 0/#define HAVE_GMTIME_R 1/g' config.h &&
|
||||
sed -i -e 's/#define HAVE_LOCALTIME_R 0/#define HAVE_LOCALTIME_R 1/g' config.h
|
||||
fi &&
|
||||
make ${SRS_JOBS} && make install &&
|
||||
cd .. && rm -rf ffmpeg && ln -sf ffmpeg-4-fit/_release ffmpeg
|
||||
)
|
||||
|
@ -706,10 +732,13 @@ fi
|
|||
#####################################################################################
|
||||
# live transcoding, ffmpeg-4.1, x264-core157, lame-3.99.5, libaacplus-2.0.2.
|
||||
#####################################################################################
|
||||
# Guess whether the ffmpeg is.
|
||||
SYSTEMP_FFMPEG_BIN=/usr/local/bin/ffmpeg
|
||||
if [[ ! -f $SYSTEMP_FFMPEG_BIN ]]; then SYSTEMP_FFMPEG_BIN=/usr/local/ffmpeg/bin/ffmpeg; fi
|
||||
# Always link the ffmpeg tools if exists.
|
||||
if [[ -f /usr/local/bin/ffmpeg && ! -f ${SRS_OBJS}/${SRS_PLATFORM}/ffmpeg ]]; then
|
||||
if [[ -f $SYSTEMP_FFMPEG_BIN && ! -f ${SRS_OBJS}/${SRS_PLATFORM}/ffmpeg ]]; then
|
||||
mkdir -p ${SRS_OBJS}/${SRS_PLATFORM}/ffmpeg/bin &&
|
||||
ln -sf /usr/local/bin/ffmpeg ${SRS_OBJS}/${SRS_PLATFORM}/ffmpeg/bin/ffmpeg &&
|
||||
ln -sf $SYSTEMP_FFMPEG_BIN ${SRS_OBJS}/${SRS_PLATFORM}/ffmpeg/bin/ffmpeg &&
|
||||
(cd ${SRS_OBJS} && rm -rf ffmpeg && ln -sf ${SRS_PLATFORM}/ffmpeg)
|
||||
fi
|
||||
if [ $SRS_FFMPEG_TOOL = YES ]; then
|
||||
|
|
|
@ -5,7 +5,7 @@ help=no
|
|||
# feature options
|
||||
SRS_HDS=NO
|
||||
SRS_SRT=NO
|
||||
SRS_RTC=RESERVED
|
||||
SRS_RTC=YES
|
||||
SRS_CXX11=YES
|
||||
SRS_CXX14=NO
|
||||
SRS_NGINX=NO
|
||||
|
@ -77,6 +77,13 @@ SRS_GPROF=NO # Performance test: gprof
|
|||
SRS_X86_X64=NO # For x86_64 servers
|
||||
SRS_OSX=NO #For osx/macOS PC.
|
||||
SRS_CROSS_BUILD=NO #For cross build, for example, on Ubuntu.
|
||||
# For cross build, whether armv7 or armv8(aarch64).
|
||||
SRS_CROSS_BUILD_ARMV7=NO
|
||||
SRS_CROSS_BUILD_AARCH64=NO
|
||||
# For cross build, the host, for example(libsrtp), --host=aarch64-linux-gnu
|
||||
SRS_CROSS_BUILD_HOST=
|
||||
# For cross build, the cross prefix, for example(FFmpeg), --cross-prefix=aarch64-linux-gnu-
|
||||
SRS_CROSS_BUILD_PREFIX=
|
||||
#
|
||||
#####################################################################################
|
||||
# Toolchain for cross-build on Ubuntu for ARM or MIPS.
|
||||
|
@ -196,6 +203,11 @@ function parse_user_option() {
|
|||
echo "Error: The $option is not supported yet"; exit 1
|
||||
fi
|
||||
|
||||
if [[ $option == '--arm' || $option == '--mips' || $option == '--with-arm-ubuntu12' || $option == '--with-mips-ubuntu12' ]]; then
|
||||
echo "Error: Removed misleading option $option, please read https://github.com/ossrs/srs/wiki/v4_CN_SrsLinuxArm#ubuntu-cross-build-srs"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
# Parse options to variables.
|
||||
case "$option" in
|
||||
-h) help=yes ;;
|
||||
|
@ -315,14 +327,6 @@ function parse_user_option() {
|
|||
|
||||
# Alias for --arm, cross build.
|
||||
--cross-build) SRS_CROSS_BUILD=YES ;;
|
||||
--arm) SRS_CROSS_BUILD=YES ;;
|
||||
--mips) SRS_CROSS_BUILD=YES ;;
|
||||
--with-arm-ubuntu12) SRS_CROSS_BUILD=YES ;;
|
||||
--without-arm-ubuntu12) SRS_CROSS_BUILD=NO ;;
|
||||
--arm-ubuntu12) SRS_CROSS_BUILD=$(switch2value $value) ;;
|
||||
--with-mips-ubuntu12) SRS_CROSS_BUILD=YES ;;
|
||||
--without-mips-ubuntu12) SRS_CROSS_BUILD=NO ;;
|
||||
--mips-ubuntu12) SRS_CROSS_BUILD=$(switch2value $value) ;;
|
||||
|
||||
# Deprecated, might be removed in future.
|
||||
--with-nginx) SRS_NGINX=YES ;;
|
||||
|
@ -388,9 +392,16 @@ function apply_auto_options() {
|
|||
SRS_X86_X64=YES; opt="--x86-x64 $opt";
|
||||
fi
|
||||
|
||||
# Setup the default values if not set.
|
||||
if [[ $SRS_RTC == RESERVED ]]; then
|
||||
SRS_RTC=YES; if [[ $SRS_CROSS_BUILD == YES ]]; then SRS_RTC=NO; fi
|
||||
if [[ $SRS_CROSS_BUILD == YES ]]; then
|
||||
SRS_CROSS_BUILD_HOST=$(echo $SRS_TOOL_CC|awk -F '-gcc' '{print $1}')
|
||||
SRS_CROSS_BUILD_PREFIX="${SRS_CROSS_BUILD_HOST}-"
|
||||
echo $SRS_TOOL_CC| grep arm >/dev/null 2>&1 && SRS_CROSS_BUILD_ARMV7=YES
|
||||
echo $SRS_TOOL_CC| grep aarch64 >/dev/null 2>&1 && SRS_CROSS_BUILD_AARCH64=YES
|
||||
echo "For cross build, host: $SRS_CROSS_BUILD_HOST, prefix: $SRS_CROSS_BUILD_PREFIX, armv7: $SRS_CROSS_BUILD_ARMV7, aarch64: $SRS_CROSS_BUILD_AARCH64"
|
||||
fi
|
||||
|
||||
if [[ $SRS_OSX == YES ]]; then
|
||||
SRS_TOOL_LD=$SRS_TOOL_CC
|
||||
fi
|
||||
|
||||
# The SRT code in SRS requires c++11, although we build libsrt without c++11.
|
||||
|
|
|
@ -19,6 +19,10 @@ fi
|
|||
# Use isolate cache for different SRS version.
|
||||
SRS_PLATFORM="${SRS_PLATFORM}-SRS5"
|
||||
|
||||
if [[ $SRS_CROSS_BUILD == YES ]]; then
|
||||
SRS_PLATFORM="${SRS_PLATFORM}-CROSSBUILD-$(echo $SRS_TOOL_CC|awk -F - '{print $1}')"
|
||||
fi
|
||||
|
||||
echo "SRS_WORKDIR: ${SRS_WORKDIR}, SRS_OBJS_DIR: ${SRS_OBJS_DIR}, SRS_OBJS: ${SRS_OBJS}, SRS_PLATFORM: ${SRS_PLATFORM}"
|
||||
|
||||
# For src object files on each platform.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue