單位網(wǎng)站建設(shè)方案如何優(yōu)化關(guān)鍵詞
學(xué)習(xí)課題:逐步構(gòu)建開發(fā)播放器【QT5 + FFmpeg6 + SDL2】
環(huán)境配置
我這邊的是使用macOS;IDE用的是CLion;CMake構(gòu)建,除了創(chuàng)建項(xiàng)目步驟、CMakeLists文件有區(qū)別之外的代碼層面不會(huì)有太大區(qū)別。
配置上只添加一下CMakeLists中FFmpeg和SDL的配置就可以了
另外:我這邊的系統(tǒng)是macOS系統(tǒng),暫時(shí)提供的文件也是mac平臺(tái)的,win平臺(tái)可能不能直接用。
FFmpeg配置
include_directories(./ffmpeg6.0/include)
link_directories(./ffmpeg6.0/lib)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -v -stdlib=libc++ -framework OpenGL -framework AppKit -framework Security -framework CoreFoundation -framework CoreVideo -framework CoreMedia -framework QuartzCore -framework CoreFoundation -framework VideoDecodeAcceleration -framework Cocoa -framework AudioToolbox -framework VideoToolbox -framework OpenCL ")# for macos
# target_link_libraries 內(nèi)添加libavformat.a libavcodec.a libavutil.a libswscale.a swresample liblzma.tbd libz.1.2.5.dylib libbz2.dylib libiconv.dylib
SDL配置
include_directories(./SDL2/include/SDL2)
link_directories(./SDL2/lib)# target_link_libraries 內(nèi)添加libSDL2.a
最終CmakeLists(根據(jù)自己系統(tǒng)環(huán)境進(jìn)行修改)
cmake_minimum_required(VERSION 3.26)
project(SimplePlayer)set(CMAKE_CXX_STANDARD 11)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)include_directories("./")
set(CMAKE_PREFIX_PATH "/usr/local/Cellar/qt@5/5.15.10_1")# ffmpeg path
include_directories(./ffmpeg6.0/include)
link_directories(./ffmpeg6.0/lib)
# sdl path
include_directories(./SDL2/include/SDL2)
link_directories(./SDL2/lib)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -v -stdlib=libc++ -framework OpenGL -framework AppKit -framework Security -framework CoreFoundation -framework CoreVideo -framework CoreMedia -framework QuartzCore -framework CoreFoundation -framework VideoDecodeAcceleration -framework Cocoa -framework AudioToolbox -framework VideoToolbox -framework OpenCL ")find_package(Qt5 COMPONENTSCoreGuiWidgetsREQUIRED)add_executable(SimplePlayer main.cpp)
target_link_libraries(SimplePlayerQt5::CoreQt5::GuiQt5::Widgetslibavformat.a libavcodec.a libavutil.a libswscale.aswresampleliblzma.tbdlibz.1.2.5.dyliblibbz2.dyliblibiconv.dylib# sdl2libSDL2.a
)
導(dǎo)入方式
# FFmpegextern "C" {
#include "libavcodec/avcodec.h"
#include "libavfilter/avfilter.h"
#include "libavformat/avformat.h"
#include "libavutil/avassert.h"
#include "libavutil/ffversion.h"
#include "libavutil/frame.h"
#include "libavutil/imgutils.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "libavutil/time.h"
#include "libswresample/swresample.h"
#include "libswscale/swscale.h"
#include "libavutil/audio_fifo.h"}# SDL2#include "SDL.h"
可以單獨(dú)放在一個(gè)xxxx.h文件中,統(tǒng)一導(dǎo)入這個(gè).h文件,就不用每個(gè)模塊都導(dǎo)入一部分,左一個(gè)右一個(gè)的。