mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
SRS5: FFmpeg: Support build with FFmpeg native opus. v5.0.131 (#3140)
PICK a27ce1d50f
This commit is contained in:
parent
ef533853c0
commit
3c6ade8721
7 changed files with 46 additions and 24 deletions
|
@ -86,6 +86,12 @@ else
|
|||
srs_undefine_macro "SRS_FFMPEG_FIT" $SRS_AUTO_HEADERS_H
|
||||
fi
|
||||
|
||||
if [[ $SRS_FFMPEG_OPUS == YES ]]; then
|
||||
srs_define_macro "SRS_FFMPEG_OPUS" $SRS_AUTO_HEADERS_H
|
||||
else
|
||||
srs_undefine_macro "SRS_FFMPEG_OPUS" $SRS_AUTO_HEADERS_H
|
||||
fi
|
||||
|
||||
if [[ $SRS_H265 == YES ]]; then
|
||||
srs_define_macro "SRS_H265" $SRS_AUTO_HEADERS_H
|
||||
else
|
||||
|
|
|
@ -528,7 +528,7 @@ fi
|
|||
# libopus, for WebRTC to transcode AAC with Opus.
|
||||
#####################################################################################
|
||||
# For cross build, we use opus of FFmpeg, so we don't build the libopus.
|
||||
if [[ $SRS_RTC == YES && $SRS_CROSS_BUILD != YES ]]; then
|
||||
if [[ $SRS_RTC == YES && $SRS_FFMPEG_OPUS != YES ]]; then
|
||||
# Only build static libraries if no shared FFmpeg.
|
||||
if [[ $SRS_SHARED_FFMPEG == NO ]]; then
|
||||
OPUS_OPTIONS="--disable-shared --disable-doc"
|
||||
|
@ -559,11 +559,11 @@ fi
|
|||
# ffmpeg-fit, for WebRTC to transcode AAC with Opus.
|
||||
#####################################################################################
|
||||
if [[ $SRS_FFMPEG_FIT == YES ]]; then
|
||||
if [[ $SRS_CROSS_BUILD == YES ]]; then
|
||||
FFMPEG_CONFIGURE="./configure"
|
||||
else
|
||||
FFMPEG_CONFIGURE="env PKG_CONFIG_PATH=${SRS_DEPENDS_LIBS}/opus/lib/pkgconfig ./configure"
|
||||
FFMPEG_CONFIGURE="env SRS_FFMPEG_FIT=on"
|
||||
if [[ $SRS_FFMPEG_OPUS != YES ]]; then
|
||||
FFMPEG_CONFIGURE="$FFMPEG_CONFIGURE PKG_CONFIG_PATH=${SRS_DEPENDS_LIBS}/opus/lib/pkgconfig"
|
||||
fi
|
||||
FFMPEG_CONFIGURE="$FFMPEG_CONFIGURE ./configure"
|
||||
|
||||
# Disable all features, note that there are still some options need to be disabled.
|
||||
FFMPEG_OPTIONS="--disable-everything"
|
||||
|
@ -583,9 +583,9 @@ if [[ $SRS_FFMPEG_FIT == YES ]]; then
|
|||
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}"
|
||||
fi
|
||||
# For cross-build.
|
||||
if [[ $SRS_CROSS_BUILD == YES ]]; then
|
||||
# Note that the audio might be corrupted, if use FFmpeg native opus.
|
||||
# For audio codec opus, use FFmpeg native one, or external libopus.
|
||||
if [[ $SRS_FFMPEG_OPUS == YES ]]; then
|
||||
# TODO: FIXME: Note that the audio might be corrupted, see https://github.com/ossrs/srs/issues/3140
|
||||
FFMPEG_OPTIONS="$FFMPEG_OPTIONS --enable-decoder=opus --enable-encoder=opus"
|
||||
else
|
||||
FFMPEG_OPTIONS="$FFMPEG_OPTIONS --enable-decoder=libopus --enable-encoder=libopus --enable-libopus"
|
||||
|
|
|
@ -37,6 +37,8 @@ SRS_FFMPEG_STUB=NO
|
|||
SRS_FFMPEG_TOOL=NO
|
||||
# FFmpeg fit is the source code for RTC, to transcode audio or video in SRS.
|
||||
SRS_FFMPEG_FIT=RESERVED
|
||||
# Whether use FFmpeg native opus codec for RTC. If not, use libopus instead.
|
||||
SRS_FFMPEG_OPUS=NO
|
||||
# arguments
|
||||
SRS_PREFIX=/usr/local/srs
|
||||
SRS_DEFAULT_CONFIG=conf/srs.conf
|
||||
|
@ -165,6 +167,7 @@ Features:
|
|||
--cxx11=on|off Whether enable the C++11. Default: $(value2switch $SRS_CXX11)
|
||||
--cxx14=on|off Whether enable the C++14. Default: $(value2switch $SRS_CXX14)
|
||||
--ffmpeg-fit=on|off Whether enable the FFmpeg fit(source code). Default: $(value2switch $SRS_FFMPEG_FIT)
|
||||
--ffmpeg-opus=on|off Whether enable the FFmpeg native opus codec. Default: $(value2switch $SRS_FFMPEG_OPUS)
|
||||
--apm=on|off Whether enable cloud logging and APM(Application Performance Monitor). Default: $(value2switch $SRS_APM)
|
||||
--h265=on|off Whether build the HEVC(H.265) support. Default: $(value2switch $SRS_H265)
|
||||
|
||||
|
@ -344,6 +347,7 @@ function parse_user_option() {
|
|||
--generate-objs) SRS_GENERATE_OBJS=$(switch2value $value) ;;
|
||||
--single-thread) SRS_SINGLE_THREAD=$(switch2value $value) ;;
|
||||
--ffmpeg-fit) SRS_FFMPEG_FIT=$(switch2value $value) ;;
|
||||
--ffmpeg-opus) SRS_FFMPEG_OPUS=$(switch2value $value) ;;
|
||||
--h265) SRS_H265=$(switch2value $value) ;;
|
||||
--gb28181) SRS_GB28181=$(switch2value $value) ;;
|
||||
|
||||
|
@ -505,6 +509,10 @@ function apply_auto_options() {
|
|||
if [[ $SRS_RTC == YES && $SRS_FFMPEG_FIT == RESERVED ]]; then
|
||||
SRS_FFMPEG_FIT=YES
|
||||
fi
|
||||
if [[ $SRS_CROSS_BUILD == YES && $SRS_FFMPEG_OPUS != YES ]]; then
|
||||
echo "Enable FFmpeg native opus for cross building"
|
||||
SRS_FFMPEG_OPUS=YES
|
||||
fi
|
||||
|
||||
# Enable asan, but disable for Centos
|
||||
# @see https://github.com/ossrs/srs/issues/3347
|
||||
|
@ -620,6 +628,7 @@ function regenerate_options() {
|
|||
SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --cxx14=$(value2switch $SRS_CXX14)"
|
||||
SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --backtrace=$(value2switch $SRS_BACKTRACE)"
|
||||
SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --ffmpeg-fit=$(value2switch $SRS_FFMPEG_FIT)"
|
||||
SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --ffmpeg-opus=$(value2switch $SRS_FFMPEG_OPUS)"
|
||||
SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --nasm=$(value2switch $SRS_NASM)"
|
||||
SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --srtp-nasm=$(value2switch $SRS_SRTP_ASM)"
|
||||
SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --clean=$(value2switch $SRS_CLEAN)"
|
||||
|
|
12
trunk/configure
vendored
12
trunk/configure
vendored
|
@ -156,11 +156,17 @@ fi
|
|||
|
||||
# FFMPEG for WebRTC transcoding, such as aac to opus.
|
||||
if [[ $SRS_FFMPEG_FIT == YES ]]; then
|
||||
LibFfmpegRoot="${SRS_OBJS}/ffmpeg/include"; LibFfmpegFile="${SRS_OBJS}/ffmpeg/lib/libavcodec.a ${SRS_OBJS}/ffmpeg/lib/libswresample.a ${SRS_OBJS}/ffmpeg/lib/libavutil.a"
|
||||
if [[ $SRS_CROSS_BUILD != YES ]]; then
|
||||
LibFfmpegRoot="${SRS_OBJS}/ffmpeg/include"
|
||||
LibFfmpegFile="${SRS_OBJS}/ffmpeg/lib/libavcodec.a ${SRS_OBJS}/ffmpeg/lib/libswresample.a ${SRS_OBJS}/ffmpeg/lib/libavutil.a"
|
||||
if [[ $SRS_FFMPEG_OPUS != YES ]]; then
|
||||
LibFfmpegFile="${LibFfmpegFile} ${SRS_OBJS}/opus/lib/libopus.a"
|
||||
fi
|
||||
if [[ $SRS_SHARED_FFMPEG == YES ]]; then LibFfmpegFile="-L${SRS_OBJS}/ffmpeg/lib -lavcodec -lswresample -lavutil -L${SRS_OBJS}/opus/lib -lopus"; fi
|
||||
if [[ $SRS_SHARED_FFMPEG == YES ]]; then
|
||||
LibFfmpegFile="-L${SRS_OBJS}/ffmpeg/lib -lavcodec -lswresample -lavutil";
|
||||
if [[ $SRS_FFMPEG_OPUS != YES ]]; then
|
||||
LibFfmpegFile="$LibFfmpegFile -L${SRS_OBJS}/opus/lib -lopus"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# openssl-1.1.0e, for the RTMP complex handshake.
|
||||
|
|
|
@ -27,6 +27,7 @@ The changelog for SRS.
|
|||
|
||||
## SRS 5.0 Changelog
|
||||
|
||||
* v5.0, 2023-01-05, FFmpeg: Support build with FFmpeg native opus. v5.0.131 (#3140)
|
||||
* v5.0, 2023-01-05, CORS: Refine HTTP CORS headers. v5.0.130
|
||||
* v5.0, 2023-01-03, Add blackbox test for HLS and MP3 codec. v5.0.129
|
||||
* v5.0, 2023-01-02, Merge [#3355](https://github.com/ossrs/srs/pull/3355): Test: Support blackbox test by FFmpeg. v5.0.128
|
||||
|
|
|
@ -17,12 +17,12 @@ static const AVCodec* srs_find_decoder_by_id(SrsAudioCodecId id)
|
|||
} else if (id == SrsAudioCodecIdMP3) {
|
||||
return avcodec_find_decoder_by_name("mp3");
|
||||
} else if (id == SrsAudioCodecIdOpus) {
|
||||
const AVCodec* codec = avcodec_find_decoder_by_name("libopus");
|
||||
if (!codec) {
|
||||
// TODO: FIXME: Note that the audio might be corrupted, if use FFmpeg native opus.
|
||||
codec = avcodec_find_decoder_by_name("opus");
|
||||
}
|
||||
return codec;
|
||||
#ifdef SRS_FFMPEG_OPUS
|
||||
// TODO: FIXME: Note that the audio might be corrupted, see https://github.com/ossrs/srs/issues/3140
|
||||
return avcodec_find_decoder_by_name("opus");
|
||||
#else
|
||||
return avcodec_find_decoder_by_name("libopus");
|
||||
#endif
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
@ -32,12 +32,12 @@ static const AVCodec* srs_find_encoder_by_id(SrsAudioCodecId id)
|
|||
if (id == SrsAudioCodecIdAAC) {
|
||||
return avcodec_find_encoder_by_name("aac");
|
||||
} else if (id == SrsAudioCodecIdOpus) {
|
||||
const AVCodec* codec = avcodec_find_encoder_by_name("libopus");
|
||||
if (!codec) {
|
||||
// TODO: FIXME: Note that the audio might be corrupted, if use FFmpeg native opus.
|
||||
codec = avcodec_find_encoder_by_name("opus");
|
||||
}
|
||||
return codec;
|
||||
#ifdef SRS_FFMPEG_OPUS
|
||||
// TODO: FIXME: Note that the audio might be corrupted, see https://github.com/ossrs/srs/issues/3140
|
||||
return avcodec_find_encoder_by_name("opus");
|
||||
#else
|
||||
return avcodec_find_encoder_by_name("libopus");
|
||||
#endif
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -9,6 +9,6 @@
|
|||
|
||||
#define VERSION_MAJOR 5
|
||||
#define VERSION_MINOR 0
|
||||
#define VERSION_REVISION 130
|
||||
#define VERSION_REVISION 131
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue