系列文章目录
《ZLMediaKit源码学习笔记》(1)windows下VS2022源码编译(本文)
前言
学习源码前,需要先让程序跑起来,本节我们学习下在windows下如何使用Visual Studio 2022来编译ZLMediaKit。
它的依赖库ZLToolKit源码学习参见《ZLToolKit源码学习笔记》。
目录
一、源码下载
github可能访问不了或者下载速度太慢,这里本人使用码云下载,地址:https://gitee.com/xia-chu/ZLMediaKit.git
windows git客户端在这里下载,https://github.com/git-for-windows/git/releases/download/v2.35.1.windows.2/Git-2.35.1.2-64-bit.exe,在git-bash中执行以下命令:
# git clone https://gitee.com/xia-chu/ZLMediaKit.git
# cd ZLMediaKit
# git submodule update --init
二、依赖库下载
本人测试使用的是64位程序,所以这里所有用到的依赖库均为64位版本。(所有的库都不是必须的,可以根据需要自行安装)。
2.1、openssl
下载地址:http://slproweb.com/download/Win64OpenSSL-3_0_1.exe
下载完成后傻瓜式安装即可。ZLMediaKit中无需配置,Cmake会自己找到我们安装的路径。(通过默认的FindOpenSSL.cmake)
2.2、ffmpeg
下载地址:https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-5.0-full_build-shared.7z
使用ffmpeg5.0,下载后的库放到3rdpart目录下:
修改ZLMediaKit/cmake/FindAVCODEC.cmake文件中find_path和find_library的路径:
find_path(AVCODEC_INCLUDE_DIR
NAMES libavcodec/avcodec.h
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/../3rdpart/ffmpeg/include)
find_library(AVCODEC_LIBRARY
NAMES avcodec
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/../3rdpart/ffmpeg/lib)
修改ZLMediaKit/cmake/FindAVUTIL.cmake文件中find_path和find_library的路径:
find_path(AVUTIL_INCLUDE_DIR
NAMES libavutil/avutil.h
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/../3rdpart/ffmpeg/include)
find_library(AVUTIL_LIBRARY
NAMES avutil
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/../3rdpart/ffmpeg/lib)
修改ZLMediaKit/cmake/FindSWRESAMPLE.cmake文件中find_path和find_library的路径:
find_path(SWRESAMPLE_INCLUDE_DIR
NAMES libswresample/swresample.h
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/../3rdpart/ffmpeg/include)
find_library(SWRESAMPLE_LIBRARY
NAMES swresample
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/../3rdpart/ffmpeg/lib)
由于本人使用的是ffmpeg5.0版本,作者使用的应该是3.x的版本,这里需要修改下新版本的编译错误,比较暴力,直接注释掉废弃的接口。
修改ZLMediaKit/player/FFMpegDecoder.cpp文件:
2.3、sdl2
下载地址:http://www.libsdl.org/release/SDL2-devel-2.0.20-VC.zip
下载后的库放到3rdpart目录下:
修改ZLMediaKit/cmake/FindSDL2.cmake文件中find_path和find_library的路径:
find_path(SDL2_INCLUDE_DIR
NAMES SDL2/SDL.h
HINTS SDL2
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/../3rdpart/sdl2/include)
find_library(SDL2_LIBRARY
NAMES SDL2
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/../3rdpart/sdl2/lib/x64)
2.4、srtp
srtp需要自行编译,可以在github下载,本人使用的是2.4.2版本,地址:https://codeload.github.com/cisco/libsrtp/zip/refs/tags/v2.4.2
VS2022,选择打开cmake项目,选中CMakeLists.txt文件后打开。默认是debug版本的,增加一个release版本的配置。
切换到release编译,勾选编译动态库和支持openssl,保存,重新生成项目,安装libsrtp:
最后把libsrtp-2.4.2/out/install/x64-Release目录下生成的文件拷贝到ZLMediaKit的3rdpart目录下:
修改ZLMediaKit/cmake/FindSRTP.cmake文件中的路径:
set(_SRTP_ROOT_PATHS
${CMAKE_CURRENT_SOURCE_DIR}/3rdpart/srtp2
)
find_path(SRTP_INCLUDE_DIRS
NAMES srtp2/srtp.h
HINTS ${_SRTP_ROOT_PATHS} ${SRTP_PREFIX}
PATH_SUFFIXES include
)
2.5、faac
github地址:https://github.com/knik0/faac
使用Git Bash拉取代码:
git clone https://github.com/knik0/faac.git
通过faac\project\msvc\faac.sln直接使用VS打开解决方案。faac当前已经支持到VS2019,使用VS2022打开时直接提升即可。切换到release版本,仅编译dll项目。
在faac\project\msvc\bin\Release目录下将lib和dll文件拷贝到ZLMediaKit\3rdpart\faac\lib目录下,并修改文件名,同时将头文件拷贝到include目录下:
修改ZLMediaKit/cmake/FindFAAC.cmake文件中的路径:
find_path(FAAC_INCLUDE_DIR
NAMES faac.h
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/3rdpart/faac/include
)
find_library(FAAC_LIBRARY
NAMES faac
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/3rdpart/faac/lib
)
ZLMediaKit\CMakeLists.txt中使能FAAC:
option(ENABLE_FAAC "Enable FAAC" true)
至此,依赖库配置完成,最终所有涉及修改或新增的文件如下:
以上配置已经全部上库到https://gitee.com/qinshixiao/ZLMediaKit,可以直接下载使用。
三、VS2022编译
3.1、通过cmake直接打开
打开本地文件夹,选定ZLMediaKit后打开,VS会自动识别出cmake项目。
也可以手动选择打开cmake项目,选中CMakeLists.txt文件后打开。
项目装载完成后,即可直接编译运行,比如测试test_player.exe程序,配置默认启动参数,测试rtsp拉流。在launch.vs.json文件中设置程序启动时的参数。
{
"version": "0.2.1",
"defaults": {},
"configurations": [
{
"type": "default",
"project": "CMakeLists.txt",
"projectTarget": "test_player.exe (E:\\work\\openSource\\ZLMediaKit\\release\\windows64\\Debug\\test_player.exe)",
"name": "test_player.exe (E:\\work\\openSource\\ZLMediaKit\\release\\windows64\\Debug\\test_player.exe)",
"args": [
"rtsp://admin:123456@192.168.31.66/media/video2",
"0"
]
},
{
"type": "default",
"project": "CMakeLists.txt",
"projectTarget": "MediaServer.exe (E:\\work\\openSource\\ZLMediaKit\\release\\windows64\\Debug\\MediaServer.exe)",
"name": "MediaServer.exe (E:\\work\\openSource\\ZLMediaKit\\release\\windows64\\Debug\\MediaServer.exe)"
}
]
}
注意上边的args参数,本人测试的是宇视IPC的rtsp拉流地址: rtsp://admin:123456@192.168.31.66/media/video2。
如果程序无法运行,可能是库文件和exe程序不在同一个目录下,将我们添加的所有依赖库的dll文件拷贝一份到exe程序同级目录下即可。
3.2、通过sln解决方案打开
如果因为环境配置问题,1方式无法使用,也可以通过sln来打开项目。该方式需要首先使用cmake工具生成sln文件。可以参见《ZLToolKit源码学习笔记》(1)VS2019源码编译。