最近需要编译Live555库,在windows下编译完成后,在此记录。
笔者的电脑系统是Windows10。
首先在live555官网下载源码,下载链接是:LIVE555.COM。在该链接下,还有一个音视频文件可供后续测试使用。
因为live555库依赖openssl,所以我们还行编译安装openssl,上github下载openssl源码,对于openssl的编译安装在源码中的md文件中简述较为详细,故下面对于openssl的安装只会简单讲讲。
1. 编译安装openssl
在github上下载openssl的最新版本后(笔者这儿是3.x版本),阅读README.md文件,里面会指引你去阅读对应系统的编译指引(笔者这儿是去阅读NOTES-WINDOWS.md)。
Windows10下的编译步骤很简单,
- 安装Perl(笔者选择了Strawberry Perl)
- 安装C complier(笔者电脑已经安装了VS2019)
- 安装NASM
- 检测上述安装后,对应的路径有没有添加到系统Path。笔者的Strawberry Perl和VS2019在安装后自动就添加了系统环境变量,NASM没有,所以在系统环境变量中单独添加了NASM.exe的所在目录路径(D:\Application\NASM)。
- 打开cmd,进入openssl源码目录。使用Perl根据需要的系统版本构建,笔者需要x64的库,所以在这一步运行了 perl Configure VC-WIN64A --prefix=D:\WorkSpace\sourceCode\openssl 。--prefix参数指定了我的openssl库的安装位置。
- 执行nmake、nmake test、 nmake install(nmake test可以不执行,一般不会有错误。执行nmake test测试项一般输出yes,有一些因为平台不支持的则会显示skiped)。nmake这一步耗时会特别久,笔者等了半小时。
执行完成后你会得到如下的文件目录。
2. 编译安装live555
官方提供的编译方式是通过mak文件,但是对于VS2019而已,操作mak还是太陌生了,所以笔者选择了新建项目来编译运行。
2.1 源码文件夹介绍
live555源码目录进去后会有几个文件夹,其中BasicUsageEnvironment、groupsock、liveMedia、UsageEnvironment、WindowsAudioInputDevice是库;mediaServer是服务器主程序,proxyServer是代理服务器,hlsProxy是HLS代理,testProgs是一些测试程序,其中有客户端程序testRTSPClient。
BasicUsageEnvironment:这个类是UsageEnvironment的一个实现类。
groupsock:这个库的类封装了网络接口和套接字,需要注意的是,Groupsock封装了发送或接收组播报文的操作。
liveMedia:这个库定义了以Medium类为根的树状层级类,封装了大量流媒体类型和编码。
UsageEnvironment:UsageEnvironment和TaskScheduler类用于调度延迟事件、给异步读事件分配句柄、输出错误或警告消息。HashTable类定义了通用哈希表接口,该接口被源码的其他部分使用。这些类是抽象类,需要去继承并实现。
WindowsAudioInputDevice:这个库是liveMedia中抽象类AudioInputDevice的实现,能在Windows上从输入设备读取PCM音频采样。在后续中没有使用到这个库,故之后不会编译它。
2.2 编译
2.2.1 在VS2019中新建一个空白解决方案
2.2.2 创建对应的工程
库文件创建静态库工程,应用程序创建空项目工程。
新建的工程名建议与live555的源码目录中一致。笔者在这儿创建了四个静态库工程BasicUsageEnvironment、groupsock、liveMedia、UsageEnvironment,还有两个空项目工程mediaServer、testRTSPClient。
建议先创建库工程编译通过后再创建空项目工程。
2.2.3 删除创建时生成的文件,取消预编译头
2.2.4 拷贝源码
拷贝源码下的头文件和源文件到新建的工程下,并添加到工程中,以BasicUsageEnvironment为例。
拷贝文件,如下图。
工程中添加文件,可以只添加项目文件夹下的文件(其中有.cpp文件和.hh文件),include文件夹中的头文件可以不添加到工程文件中,之后会通过配置“附加包含目录”引用。
2.2.5 配置库工程一些属性
需要配置”附加包含目录”’、”预处理器定义“等
①不同工程需要的”附加包含目录“如下
(这儿是third目录是笔者的openssl的库文件安装目录)
上面是几个库工程各自需要添加的附加包含目录
②右键单独编译单个工程
③编译错误,添加预处理器定义
当编译报错后,根据提示添加对应的预处理器定义,笔者遇到的报错如下:
NO_GETIFADDRS 宏
提示找不到“ifaddrs.h”文件,因为这个是Linux下才有的文件,添加对应的预处理器定义
_CRT_SECURE_NO_WARNINGS 宏
使用了过时的不安全的函数C4996
_CRT_NONSTDC_NO_DEPRECATE 宏
找不到“fileno”文件
其他宏
如果遇到其他的报错,也可以上网搜索,
2.2.6 编译应用程序
应用程序项目需要添加“附加包含目录”、“预处理器定义”、“附加库目录”、“附加依赖项”等。需要注意的是openssl的包含,以及windows下的socket调用需要的包含。
上面编译的静态库生成的库文件会在解决方案目录下的Debug/Release目录中。
①“附加包含目录”
(third目录是笔者的openssl安装目录)
②预处理器定义
预处理器定义同样可以通过编译报错的提示再进行添加
③“附加库目录”
mediaServer工程的“附加库目录”同上。x64\Debug是笔者的上面四个静态库的编译结果,third\lib是笔者的openssl的静态库路径
④“附加依赖项”
mediaServer工程的“附加依赖项”同上。
2.2.7 运行
编译出来的exe程序还不能直接运行,需要把openssl的动态库拷贝到exe的运行目录下。
testRTSPClient.exe运行需要指定url参数,所以得通过cmd运行
标签:live555,工程,windows,openssl,编译,源码,添加,目录 From: https://www.cnblogs.com/unrealCat/p/17142081.html