diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c9e8b3..d368b34 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -164,6 +164,9 @@ set(MAIN_SRC_FILE "" CACHE STRING INTERNAL) unset(MAIN_LINK_LIB CACHE) set(MAIN_LINK_LIB "" CACHE STRING INTERNAL) +unset(EXTERNAL_LIBS_PATH CACHE) +set(EXTERNAL_LIBS_PATH "" CACHE STRING INTERNAL) + # Config message for test code. unset(TEST_LINK_LIB CACHE) set(TEST_LINK_LIB "" CACHE STRING INTERNAL) diff --git a/application/HuntingCamera/CMakeLists.txt b/application/HuntingCamera/CMakeLists.txt index 5173657..5e4aa98 100644 --- a/application/HuntingCamera/CMakeLists.txt +++ b/application/HuntingCamera/CMakeLists.txt @@ -10,8 +10,7 @@ include_directories( link_directories( ${LIBS_OUTPUT_PATH} ${EXTERNAL_LIBS_OUTPUT_PATH} - ${EXTERNAL_LIBS_OUTPUT_PATH}/libconfig/lib - ${EXTERNAL_LIBS_OUTPUT_PATH}/ffmpeg/lib + ${EXTERNAL_LIBS_PATH} ) aux_source_directory(. SRC_FILES) 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..a9021dd --- /dev/null +++ b/external/fdk-aac/CMakeLists.txt @@ -0,0 +1,26 @@ +include(${CMAKE_SOURCE_DIR_IPCSDK}/build/global_config.cmake) +set(FDK_AAC_INSTALL_PATH "${EXTERNAL_LIBS_OUTPUT_PATH}/fdk-aac") +set(EXTERNAL_LIBS_PATH "${EXTERNAL_LIBS_PATH};${FDK_AAC_INSTALL_PATH}/lib" CACHE STRING INTERNAL FORCE) +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=${FDK_AAC_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..949fc54 100644 --- a/external/ffmpeg/CMakeLists.txt +++ b/external/ffmpeg/CMakeLists.txt @@ -1,22 +1,31 @@ set(FFMPEG_INSTALL_PATH "${EXTERNAL_LIBS_OUTPUT_PATH}/ffmpeg") +set(EXTERNAL_LIBS_PATH "${EXTERNAL_LIBS_PATH};${FFMPEG_INSTALL_PATH}/lib" CACHE STRING INTERNAL FORCE) +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 \ + --prefix=${FFMPEG_INSTALL_PATH} \ + --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 \ + --prefix=${FFMPEG_INSTALL_PATH} \ + --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 +38,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 diff --git a/external/ffmpeg/README.md b/external/ffmpeg/README.md index 4201ba5..fb01809 100644 --- a/external/ffmpeg/README.md +++ b/external/ffmpeg/README.md @@ -15,6 +15,20 @@ ffmpeg -i input.g711a -acodec alaw output.wav $ ffplay video.h264 ``` +* g711a音频文件转wav音频文件 + +```code +$ fmpeg -f mulaw -ar 8000 -i audio.g711a audio.wav +``` + +* 将h264和wav文件合成mp4文件 + +**注意:未发现可以将h264和g711a文件合成mp4文件** + +```code +$ ffmpeg -i video.h264 -i audio.wav -c:v copy -c:a aac -b:a 96k test.mp4 +``` + ## 1.2. 问题记录 ### 1.2.1. avformat_open_input 执行失败 diff --git a/external/libconfig/CMakeLists.txt b/external/libconfig/CMakeLists.txt index 69fa8ab..5ca428d 100644 --- a/external/libconfig/CMakeLists.txt +++ b/external/libconfig/CMakeLists.txt @@ -5,6 +5,7 @@ else() set(CONFIGURE_COMMAND "--host=${COMPILE_HOST} --disable-cxx --enable-static=yes --prefix=${LIBCONFIG_INSTALL_PATH}") endif() message("Compile libconfig comand : ${CONFIGURE_COMMAND}") +set(EXTERNAL_LIBS_PATH "${EXTERNAL_LIBS_PATH};${LIBCONFIG_INSTALL_PATH}/lib" CACHE STRING INTERNAL FORCE) add_custom_target( libconfig COMMAND test -f ${EXTERNAL_SOURCE_PATH}/libconfig-1.7.3/Makefile || tar zxvf libconfig-1.7.3.tar.gz diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 921a6cf..7bca24b 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -34,6 +34,8 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${TEST_LINUX_MOCK}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TEST_LINUX_MOCK}") add_definitions(-DTEST_SOURCE_PATH="${TEST_SOURCE_PATH}") +set(EXTERNAL_LIBS_PATH "${EXTERNAL_LIBS_PATH};${TEST_TOOLS_OUTPUT_PATH}" CACHE STRING INTERNAL FORCE) + add_subdirectory(all) add_subdirectory(application) add_subdirectory(middleware) diff --git a/test/all/CMakeLists.txt b/test/all/CMakeLists.txt index 06f4a05..071ff93 100644 --- a/test/all/CMakeLists.txt +++ b/test/all/CMakeLists.txt @@ -16,7 +16,7 @@ include_directories( link_directories( ${LIBS_OUTPUT_PATH} ${EXTERNAL_LIBS_OUTPUT_PATH} - ${EXTERNAL_LIBS_OUTPUT_PATH}/libconfig/lib + ${EXTERNAL_LIBS_PATH} ) aux_source_directory(. SRC_FILES) diff --git a/test/application/HuntingCamera/CMakeLists.txt b/test/application/HuntingCamera/CMakeLists.txt index 4966598..8dc8625 100644 --- a/test/application/HuntingCamera/CMakeLists.txt +++ b/test/application/HuntingCamera/CMakeLists.txt @@ -33,9 +33,7 @@ include_directories( link_directories( ${LIBS_OUTPUT_PATH} ${EXTERNAL_LIBS_OUTPUT_PATH} - ${EXTERNAL_LIBS_OUTPUT_PATH}/libconfig/lib - ${TEST_TOOLS_OUTPUT_PATH} - ${EXTERNAL_LIBS_OUTPUT_PATH}/ffmpeg/lib + ${EXTERNAL_LIBS_PATH} ) aux_source_directory(. SRC_FILES_MAIN) diff --git a/test/application/HuntingCamera/src_mock/MediaManager_Mock_Test.cpp b/test/application/HuntingCamera/src_mock/MediaManager_Mock_Test.cpp index dff135c..4dee901 100644 --- a/test/application/HuntingCamera/src_mock/MediaManager_Mock_Test.cpp +++ b/test/application/HuntingCamera/src_mock/MediaManager_Mock_Test.cpp @@ -52,4 +52,18 @@ TEST_F(HuntingCameraTest, INTEGRATION_HunttingCamera_EXAMPLE_MediaTask) HalTestTool::MockKeyClick("reset", 200); // Simulate pressing a button. MainThread::GetInstance()->Runing(); } +// ../output_files/test/bin/HuntingCameraTest +// --gtest_filter=HuntingCameraTest.INTEGRATION_HunttingCamera_EXAMPLE_MediaTask_No_sdcard +TEST_F(HuntingCameraTest, INTEGRATION_HunttingCamera_EXAMPLE_MediaTask_No_sdcard) +{ + McuManagerTestTool::MockOtherSideIpcMissionReply(IpcMission::TEST); + SetAllCamerasResult(mAllCamerasMock); + MockSdCardRemove(mLinuxTest); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + MainThread::GetInstance()->Init(); + TestManager::ResetTimeOut(1000 * 15); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + HalTestTool::MockKeyClick("reset", 200); // Simulate pressing a button. + MainThread::GetInstance()->Runing(); +} } // namespace MediaManager_Mock_Test \ No newline at end of file diff --git a/test/hal/CMakeLists.txt b/test/hal/CMakeLists.txt index 94e197b..b625b01 100644 --- a/test/hal/CMakeLists.txt +++ b/test/hal/CMakeLists.txt @@ -12,8 +12,7 @@ include_directories( link_directories( ${LIBS_OUTPUT_PATH} ${EXTERNAL_LIBS_OUTPUT_PATH} - ${TEST_TOOLS_OUTPUT_PATH} - ${EXTERNAL_LIBS_OUTPUT_PATH}/ffmpeg/lib + ${EXTERNAL_LIBS_PATH} ) aux_source_directory(. SRC_FILES) diff --git a/test/middleware/AppManager/CMakeLists.txt b/test/middleware/AppManager/CMakeLists.txt index bb4ecc9..ba6bb34 100644 --- a/test/middleware/AppManager/CMakeLists.txt +++ b/test/middleware/AppManager/CMakeLists.txt @@ -25,8 +25,7 @@ include_directories( link_directories( ${LIBS_OUTPUT_PATH} ${EXTERNAL_LIBS_OUTPUT_PATH} - ${TEST_TOOLS_OUTPUT_PATH} - ${EXTERNAL_LIBS_OUTPUT_PATH}/ffmpeg/lib + ${EXTERNAL_LIBS_PATH} ) aux_source_directory(. SRC_FILES_MAIN) diff --git a/test/middleware/DeviceManager/CMakeLists.txt b/test/middleware/DeviceManager/CMakeLists.txt index fa9dc9f..884d91b 100644 --- a/test/middleware/DeviceManager/CMakeLists.txt +++ b/test/middleware/DeviceManager/CMakeLists.txt @@ -23,8 +23,7 @@ include_directories( link_directories( ${LIBS_OUTPUT_PATH} ${EXTERNAL_LIBS_OUTPUT_PATH} - ${TEST_TOOLS_OUTPUT_PATH} - ${EXTERNAL_LIBS_OUTPUT_PATH}/ffmpeg/lib + ${EXTERNAL_LIBS_PATH} ) aux_source_directory(. SRC_FILES_MAIN) diff --git a/test/middleware/IpcConfig/CMakeLists.txt b/test/middleware/IpcConfig/CMakeLists.txt index a3f9550..b3c4dfb 100644 --- a/test/middleware/IpcConfig/CMakeLists.txt +++ b/test/middleware/IpcConfig/CMakeLists.txt @@ -23,8 +23,7 @@ include_directories( link_directories( ${LIBS_OUTPUT_PATH} ${EXTERNAL_LIBS_OUTPUT_PATH} - ${EXTERNAL_LIBS_OUTPUT_PATH}/libconfig/lib - ${TEST_TOOLS_OUTPUT_PATH} + ${EXTERNAL_LIBS_PATH} ) aux_source_directory(. SRC_FILES_MAIN) diff --git a/test/middleware/MediaManager/CMakeLists.txt b/test/middleware/MediaManager/CMakeLists.txt index e8a091a..e312142 100644 --- a/test/middleware/MediaManager/CMakeLists.txt +++ b/test/middleware/MediaManager/CMakeLists.txt @@ -24,8 +24,7 @@ include_directories( link_directories( ${LIBS_OUTPUT_PATH} ${EXTERNAL_LIBS_OUTPUT_PATH} - ${TEST_TOOLS_OUTPUT_PATH} - ${EXTERNAL_LIBS_OUTPUT_PATH}/ffmpeg/lib + ${EXTERNAL_LIBS_PATH} ) aux_source_directory(. SRC_FILES_MAIN) diff --git a/test/utils/Config/CMakeLists.txt b/test/utils/Config/CMakeLists.txt index 803d186..6a2c196 100644 --- a/test/utils/Config/CMakeLists.txt +++ b/test/utils/Config/CMakeLists.txt @@ -15,7 +15,7 @@ include_directories( link_directories( ${LIBS_OUTPUT_PATH} ${EXTERNAL_LIBS_OUTPUT_PATH} - ${EXTERNAL_LIBS_OUTPUT_PATH}/libconfig/lib + ${EXTERNAL_LIBS_PATH} ) aux_source_directory(. SRC_FILES) diff --git a/test/utils/MediaBase/CMakeLists.txt b/test/utils/MediaBase/CMakeLists.txt index e6f6492..12795eb 100644 --- a/test/utils/MediaBase/CMakeLists.txt +++ b/test/utils/MediaBase/CMakeLists.txt @@ -15,7 +15,7 @@ include_directories( link_directories( ${LIBS_OUTPUT_PATH} ${EXTERNAL_LIBS_OUTPUT_PATH} - ${EXTERNAL_LIBS_OUTPUT_PATH}/ffmpeg/lib + ${EXTERNAL_LIBS_PATH} ) aux_source_directory(. SRC_FILES) diff --git a/tools/cmake/Makefile b/tools/cmake/Makefile index f88374e..962ce79 100644 --- a/tools/cmake/Makefile +++ b/tools/cmake/Makefile @@ -1,4 +1,5 @@ all: + @sudo add-apt-repository --remove ppa:george-edison55/cmake-3.x @sudo apt-get update @sudo apt-get install openssl @sudo apt-get install libssl-dev diff --git a/utils/MediaBase/CMakeLists.txt b/utils/MediaBase/CMakeLists.txt index 50fc931..d9cf06c 100644 --- a/utils/MediaBase/CMakeLists.txt +++ b/utils/MediaBase/CMakeLists.txt @@ -21,9 +21,9 @@ set(TARGET_NAME MediaBase) add_library(${TARGET_NAME} STATIC ${SRC_FILES}) if(${TARGET_PLATFORM} MATCHES ${DEFINE_LINUX}) - target_link_libraries(${TARGET_NAME} avformat avcodec avutil swresample avdevice avfilter swscale postproc z StatusCode Log) + target_link_libraries(${TARGET_NAME} avformat avcodec avutil swresample avdevice avfilter swscale postproc fdk-aac z StatusCode Log) else() - target_link_libraries(${TARGET_NAME} avformat avcodec avutil swresample avdevice avfilter swscale postproc StatusCode Log) + target_link_libraries(${TARGET_NAME} avformat avcodec avutil swresample avdevice avfilter swscale postproc fdk-aac StatusCode Log) endif() add_custom_target(