diff --git a/external/.gitignore b/external/.gitignore index 9c68340..635ef3f 100644 --- a/external/.gitignore +++ b/external/.gitignore @@ -1,3 +1,4 @@ goahead-5.2.0/GoAhead -ffmpeg/ffmpeg-6.1.1 \ No newline at end of file +ffmpeg/ffmpeg-6.1.1 +fdk-aac/fdk-aac-2.0.3 \ No newline at end of file diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index cf1276f..b2a6e12 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -22,5 +22,8 @@ add_subdirectory(goahead-5.2.0) add_subdirectory(cJSON-1.7.17) add_subdirectory(libhv/libhv-1.3.2) +# ================= ffmpeg related ================= # add_subdirectory(ffmpeg) +add_subdirectory(fdk-aac) +# ================= ffmpeg related end ================= # add_subdirectory(libconfig) \ No newline at end of file diff --git a/external/fdk-aac/CMakeLists.txt b/external/fdk-aac/CMakeLists.txt new file mode 100644 index 0000000..139ae25 --- /dev/null +++ b/external/fdk-aac/CMakeLists.txt @@ -0,0 +1,25 @@ +include(${CMAKE_SOURCE_DIR_IPCSDK}/build/global_config.cmake) +set(FFMPEG_INSTALL_PATH "${EXTERNAL_LIBS_OUTPUT_PATH}/fdk-aac") +message("Compile fdk-aac cmake config files : ${PLATFORM_PATH}/build/cmake/toolchain/linux.toolchain.cmake") +add_custom_target( + fdk-aac + COMMAND echo "Now compile fdk-aac, please wait..." + COMMAND test -f ${EXTERNAL_SOURCE_PATH}/fdk-aac/fdk-aac-2.0.3/CMakeLists.txt || tar -xf fdk-aac-2.0.3.tar.gz + COMMAND chmod 777 -R fdk-aac-2.0.3 + COMMAND test -f ${EXTERNAL_SOURCE_PATH}/fdk-aac/fdk-aac-2.0.3/build/Makefile || mkdir fdk-aac-2.0.3/build + COMMAND cd fdk-aac-2.0.3/build && cmake ../ -DCMAKE_TOOLCHAIN_FILE=${PLATFORM_PATH}/build/cmake/toolchain/linux.toolchain.cmake + -DCMAKE_INSTALL_PREFIX=${FFMPEG_INSTALL_PATH} -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF + COMMAND cd fdk-aac-2.0.3/build && make + COMMAND cd fdk-aac-2.0.3/build && make install + COMMAND cd fdk-aac-2.0.3/build && make clean + WORKING_DIRECTORY ${EXTERNAL_SOURCE_PATH}/fdk-aac/ +) + +add_custom_target( + remove_fdk-aac_source_files + COMMAND rm -rf fdk-aac-2.0.3 + WORKING_DIRECTORY ${EXTERNAL_SOURCE_PATH}/fdk-aac/ +) + +# 将clean目标依赖于我们自定义的clean_script目标 +add_dependencies(sdk_clean remove_fdk-aac_source_files) \ No newline at end of file diff --git a/external/fdk-aac/fdk-aac-2.0.3.tar.gz b/external/fdk-aac/fdk-aac-2.0.3.tar.gz new file mode 100755 index 0000000..52c33d1 Binary files /dev/null and b/external/fdk-aac/fdk-aac-2.0.3.tar.gz differ diff --git a/external/ffmpeg/CMakeLists.txt b/external/ffmpeg/CMakeLists.txt index 81e92dd..1a05cd7 100644 --- a/external/ffmpeg/CMakeLists.txt +++ b/external/ffmpeg/CMakeLists.txt @@ -1,22 +1,30 @@ set(FFMPEG_INSTALL_PATH "${EXTERNAL_LIBS_OUTPUT_PATH}/ffmpeg") +find_program(NASM nasm) +if(NOT NASM) + message("nasm not found. Now install.") + execute_process(COMMAND sudo apt install nasm WORKING_DIRECTORY ${EXTERNAL_SOURCE_PATH}/) +endif() if(${TARGET_PLATFORM} MATCHES ${DEFINE_LINUX}) - set(CONFIGURE_COMMAND "--enable-cross-compile --target-os=linux --arch=linux \ + set(CONFIGURE_COMMAND "--enable-cross-compile --target-os=linux --arch=x86_64 \ --cc=${CMAKE_C_COMPILER} \ --cxx=${CMAKE_CXX_COMPILER} \ --prefix=${EXTERNAL_LIBS_OUTPUT_PATH}/ffmpeg \ - --enable-parsers --enable-decoder=h264 \ + --enable-parsers --enable-decoder=h264 --enable-libfdk-aac \ --enable-ffmpeg --enable-static \ --enable-gpl --enable-nonfree --enable-version3 --enable-small \ --enable-muxer=mov --enable-muxer=mp4 \ --enable-decoder=aac --enable-decoder=pcm_alaw --enable-encoder=pcm_alaw \ --enable-demuxer=mov \ - --enable-protocol=file --enable-bsf=aac_adtstoasc --enable-bsf=h264_mp4toannexb --enable-bsf=hevc_mp4toannexb") + --enable-protocol=file --enable-bsf=aac_adtstoasc --enable-bsf=h264_mp4toannexb --enable-bsf=hevc_mp4toannexb \ + --extra-libs=-lm \ + --extra-cflags=\"-I${EXTERNAL_LIBS_OUTPUT_PATH}/fdk-aac/include\" \ + --extra-ldflags=\"-L${EXTERNAL_LIBS_OUTPUT_PATH}/fdk-aac/lib\"") else() set(CONFIGURE_COMMAND "--enable-cross-compile --target-os=linux --arch=arm64 \ --cc=${CMAKE_C_COMPILER} \ --cxx=${CMAKE_CXX_COMPILER} \ --prefix=${EXTERNAL_LIBS_OUTPUT_PATH}/ffmpeg \ - --disable-asm --enable-parsers --disable-decoders --enable-decoder=h264 \ + --disable-asm --enable-parsers --disable-decoders --enable-decoder=h264 --enable-libfdk-aac \ --disable-debug --enable-ffmpeg --enable-shared --enable-static --disable-stripping --disable-doc \ --enable-gpl --enable-nonfree --enable-version3 --enable-small \ --disable-mipsdsp --disable-mipsdspr2 \ @@ -29,13 +37,17 @@ else() --disable-protocols --enable-protocol=file \ --disable-bsfs --enable-bsf=aac_adtstoasc --enable-bsf=h264_mp4toannexb --enable-bsf=hevc_mp4toannexb \ --disable-indevs \ - --disable-outdevs --disable-ffprobe --disable-ffmpeg --disable-ffplay --disable-debug") + --disable-outdevs --disable-ffprobe --disable-ffmpeg --disable-ffplay --disable-debug \ + --extra-libs=-lm \ + --extra-cflags=\"-I${EXTERNAL_LIBS_OUTPUT_PATH}/fdk-aac/include\" \ + --extra-ldflags=\"-L${EXTERNAL_LIBS_OUTPUT_PATH}/fdk-aac/lib\"") endif() message("Compile ffmpeg comand : ${CONFIGURE_COMMAND}") add_custom_target( ffmpeg + DEPENDS fdk-aac COMMAND echo "Now compile ffmpeg, please wait..." - COMMAND test -f ${EXTERNAL_SOURCE_PATH}/ffmpeg/Makefile || tar -xf ffmpeg_6.1.1.orig.tar.xz + COMMAND test -f ${EXTERNAL_SOURCE_PATH}/ffmpeg/ffmpeg-6.1.1/Makefile || tar -xf ffmpeg_6.1.1.orig.tar.xz COMMAND chmod 777 -R ffmpeg-6.1.1 COMMAND cd ffmpeg-6.1.1 && bash -c "./configure ${CONFIGURE_COMMAND}" COMMAND cd ffmpeg-6.1.1 && make