前言

说明,本文是在Win10中用VS2019编译live555的过程中,对遇到的问题进行说明。编译过程主要参考的是下面一篇文章,在此表示感谢:

https://blog.csdn.net/m0_37360684/article/details/90109110

由于每个人的电脑上已安装软件、下载的软件源码版本、安装步骤选择等会有所差异,所以遇到的问题也有所不同,本文重点要说明的是本人在编译live555过程中的差异部分。

一、下载live555源码

live555下载地址:http://www.live555.com/liveMedia/public/

下载最新的即可,此处我下载的是 live555-latest-20220120.tar.gz。另外,也应该下载几个用于测试的视频流,如h264,mp3,mpg文件等。

本来还想直接下载一个windows下的可执行文件,在官网上却没有找到,页面如下(只有类unix下的):

http://www.live555.com/mediaServer/

对于windows下的,那就只好自己编译了。当然,网上也能找到别人已经编译好的windows下的可执行文件,一则可以先体验一下,二则可以对比自己编译出来的结果。本文的重点是编译,不多说了。

二、在VS2019中创建项目

我们要创建 BasicUsageEnvironment、UsageEnvironment、groupsock、liveMedia4个项目,分布生成对应的lib库文件;创建mediaServer项目,调用前面的4个库,生成可执行文件,即rtsp服务器的运行程序。

2.1 首先创建BasicUsageEnvironment

步骤如下:

打开VS2019,选择【创建新项目】,在 语言处选择 C++,选择【Windows 桌面向导】,单击【下一步】,输入项目名称 BasicUsageEnvironment,解决方案填写live555(也可以填写其他名称,易于理解即可)。点击【创建】,在弹出的Windows桌面项目窗口中的 应用程序类型中 选择 【静态库(.lib)】,其他选项 中 勾选【空项目】,点击【确定】。

2.2 类似的过程,创建UsageEnvironment、groupsock、liveMedia4

2.3创建 mediaServer项目

基本是相同的步骤,只是在应用程序类型 选择 【控制台应用程序(.exe)】。

三、将源文件加入工程:

也是逐个项目处理,就是将解压的live555的源码文件(只需要c文件与h文件),对应拷贝到VS的项目目录中。

然后将每个工程下的 include下的头文件 添加到 头文件筛选器下,再将 .cpp、.c、.hh 和 .h  文件 添加到 源文件筛选器下。

四、为每个项目添加依赖头文件

(下面的步骤,只是其中的一种实现方法):

1,以BasicUsageEnvironment项目为例:

1.1,在vs2019中的BasicUsageEnvironment项目处单击鼠标右键,选择【属性】;

在BasicUsageEnvironment属性页的 【配置属性】--【常规】--【输出目录】中填写

$(SolutionDir)$(Platform)\$(Configuration)\lib\

$(SolutionDir)是指解决方案的路径,如:D:\workSpace\VS2019\live555\

这个 $(Platform) 是指cpu平台,例如x86或x64:

$(Configuration)是指Debug或Release

(注意)这里的lib文件夹会在后来Debug过程中在Debug文件夹下自动生成,这样填写完全是为了最后mediaServer的属性页的【链接器】--【常规】--【附加库目录】中方便。

最后生成的路径类似如下:D:\workSpace\VS2019\live555\x64\Debug\lib\

1.2,通过点击【输出目录】右侧对应的 倒三角按钮选择<编辑...>,可以看到对应的输出目录;

1.3,在BasicUsageEnvironment属性页的【C/C++】--【常规】--【附加库目录】中输入:

..\BasicUsageEnvironment\include;..\groupsock\include;..\liveMedia\include;..\UsageEnvironment\include

(将这4个全部包含只是为了方便,相互之间的依赖关系可以不用考虑了)

1.4,点击【附加包含目录】那行 最右侧的 倒三角型按钮,选择<编辑...>:

1.5,在弹出的 附加包含目录面板中  勾选 从父级或项目默认设置继承,连续点击【确定】返回即可 。

2,采用同样的方法将剩余的UsageEnvironment、groupsock和liveMedia这3个项目进行设置。

3,设置mediaServer项目中的属性

3.1,mediaServer项目中的属性页的 【配置属性】--【常规】--【输出目录】不用改写,默认即可;

3.2 mediaServer项目中的属性页的 【C/C++】--【常规】--【附加包含目录】中同样输入:

..\BasicUsageEnvironment\include;..\groupsock\include;..\liveMedia\include;..\UsageEnvironment\include

3.3 别忘记 勾选 从父级或项目默认设置继承:

3.4 从mediaServer属性页的【链接器】--【常规】--【附加库目录】填入

$(SolutionDir)$(Platform)\$(Configuration)\lib\

这个目录就是前面4个工程设置的【配置属性】 --【常规】--【输出目录】,同样别忘记 勾选 从父级或项目默认设置继承:

3.5 从mediaServer属性页的【链接器】--【常规】--【输入】填入

UsageEnvironment.lib

liveMedia.lib

groupsock.lib

BasicUsageEnvironment.lib

Ws2_32.lib

一定要有Ws2_32.lib,否则编译生成时会报错,依次点击【确定】 返回即可。

五、编译

先编译 BasicUsageEnvironment、groupsock、liveMedia、UsageEnvironment 这四个工程,最后再编译 mediaServer 这个工程,注意是 mediaServer是最后再编译的。

在vs2019中对应的项目处单击鼠标右键,选择【生成】

编译过程遇到错误说明:

错误1:

error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.See online help for details.

解决方法:

在项目处单击鼠标右键,选择【属性】,【C/C++】-->【预处理器】-->【预处理器定义】中增加:

_CRT_SECURE_NO_WARNINGS

一点理解:在VS中调用 scanf、sprintf、strcpy、strcat 等函数时常常会提示 _CRT_SECURE_NO_WARNINGS 警告,原因是Visual studio C++不是真正的C++,而是经过Microsoft公司优化的。也许是微软公司的那些开发工程师们认为这些C函数功能内部没有对内存做边界检查,极有可能造成内存越界等问题,在早期的VS版本中设置了不安全警告,在VS2019版本中,这些警告就变为错误了。

错误2:

error C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings

解决方法:

在项目处单击鼠标右键,选择【属性】,【C/C++】-->【预处理器】-->【预处理器定义】中增加:

_WINSOCK_DEPRECATED_NO_WARNINGS

说明:其实'gethostbyname' getaddrinfo的关系就像是strcpy与strcoy_s的关系.微软推荐别人使用新函数。这里我们尽量不修改原代码,所以选择去掉此警告。

错误3:

live555\groupsock\GroupsockHelper.cpp(46,10): fatal error C1083: 无法打开包括文件: “ifaddrs.h”: No such file or directory

解决方法:

右键项目名称 --》  配置属性 --》 C/C++ --》预处理器 --》预处理器定义

添加  NO_GETIFADDRS

错误4:

编译 liveMedia 时报错:

错误(活动)     E1696     无法打开 源 文件 "openssl/ssl.h"     liveMedia       D:\ workSpace\VS2019\live555\liveMedia\include\TLSState.hh     34

解决方法:

上网查了,说是确实电脑上没有安装openssl,需要安装。还有一种方案是去掉openssl的依赖,即添加一个预编译宏:NO_OPENSSL。

此处我由于考虑尽量不改变原live555工程的功能,采用的是编译安装openssl的方式(虽然后来都有些后悔,实在是挺麻烦的):

第一步,下载工具与源码:

ActivePerl工具,官网下载链接:Download & Install Perl - ActiveState

此处我下载的是V5.32版本的。

openssl源码,下载链接:https://www.openssl.org/source/

此处我下载的是openssl-3.0.1.tar.gz

第二步,安装

1.安装ActivePerl;

2.解压openssl源码到指定目录;

3.进入VS2019自带的命令行界面,注意区分版本

本文进入的是x64 Native Tools Command Prompt for VS2019

注意,需要以管理员的权限打开。

4.在VS2019自带的命令行界面中,进入openssl解压目录,D:\workSpace\VS2019\openssl-3.0.1,运行:

perl Configure VC-WIN64A no-asm –prefix=E:\mylib\openssl

进行相关的配置

注意:prefix指定安装目录,VC-WIN64A安装平台

执行编译,安装:

$ nmake

编译过程很慢,大概花了20分钟。

$ nmake test

$ nmake install

第三步,拷贝安装路径下的文件至live555目录下,路径如下:

D:\workSpace\VS2019\live555\openssl

里面有lib与include目录。

第四步,配置live555工程项目的属性:

把openssl的头文件添加到对应路径

右键项目名称 --》  配置属性 --》 C/C++ --》常规 --》附加包含目录

..\openssl\include

工程中添加对应的lib库

1.先添加lib库所在路径

右键项目名称 --》  配置属性 --》 链接器 --》常规 --》附加库目录

$(SolutionDir)openssl\lib\

2.添加lib名称

右键项目名称 --》  配置属性 --》 链接器 --》输入 --》附加依赖项

添加如下两项即可:

libcrypto.lib

libssl.lib

继续编译,继续报错:

错误5:

严重性    代码       说明       项目       文件       行    禁止显示状态

错误       C4996     'fileno': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _fileno. See online help for details.  liveMedia       D:\workSpace\VS2019\live555\liveMedia\MP3FileSource.cpp        63    _CRT_NONSTDC_NO_DEPRECATE

错误原因:fileno函数是符合POSIX标准的函数,在VS2019下这个标准已经过时,被ISO C++取代。在ISO C++标准下,该函数的名称为_fileno。

解决方法有两个:

方法一:把fileno更改为_fileno。如:#define fileno _fileno

方法二:定义宏 _CRT_NONSTDC_NO_WARNINGS 或_CRT_NONSTDC_NO_DEPRECATE。

错误6:

严重性    代码       说明       项目       文件       行    禁止显示状态

错误       C2131     表达式的计算结果不是常数       liveMedia       D:\ workSpace\VS2019\live555\liveMedia\MultiFramedRTPSink.cpp    377

查看错误代码:

u_int8_t packet[fOutBuf->curPacketSize() + SRTP_MKI_LENGTH + SRTP_AUTH_TAG_LENGTH];

分析原因:C2131: 表达式的计算结果不是常数。原因是定义数组时尺寸是不能用变量的。

修改为:

u_int8_t *packet = new u_int8_t[fOutBuf->curPacketSize() + SRTP_MKI_LENGTH + SRTP_AUTH_TAG_LENGTH];

错误7:

编译通过后,最后链接库的时候,遇到链接错误:

严重性    代码       说明       项目       文件       行    禁止显示状态

错误       LNK1112 模块计算机类型“x86”与目标计算机类型“x64”冲突   mediaServer       D:\workSpace\VS2019\live555\mediaServer\liveMedia.lib(MediaSink.obj)    1

解决方法:

一个可能原因是工程依赖的lib文件是win32下编译的,而工程时x64的,此时,需要把lib换成64位系统编译的。比如openssl,之前是在win32下编译的,则需要重新编译为64位的。

当然,按我上面的流程走下来,openssl就是选择为x64下编译的。

实际我在操作过程中,是使用了64位的openssl库,而live555工程选择了x86,导致了不匹配。将每个工程项目都修改为x64,全部重新编译,ok。

六,运行

第一次运行,还缺库:libcrypto-3-x64.dll

进入openssl-3.0.1路径,将 libcrypto-3-x64.dll 与 libssl-3-x64.dll 一起拷贝到与 mediaServer.exe 同级路径下,能运行了:

还遇到一个问题:rtsp服务器IP的选择,不是我希望的那一个,怎么修改?

把其他几个网卡都禁用掉,就获取到正确的ip了。我遇到的问题,其实是VMWare的虚拟网卡影响的,关闭就好了。

七、验证

打开VLC播放器,选择【媒体】--【打开网络串流】,在【网络】下面的请输入网络URL中输入上面步骤mediaServer.exe命令行窗口中的第4行 的格式 ,rtsp://192.168.3.4/<filename>,在这里输入 rtsp://192.168.3.4:8000/test.264

rtsp://192.168.3.4:8000/test.264的意思:前面表示rtsp协议,中间的是ip地址与端口号,后面的是文件名称。

如下图,则表示成功了:

参考文章:

https://blog.csdn.net/m0_37360684/article/details/90109110

Windows10+VS2017下安装和 编译openssl库_tianse12的专栏-CSDN博客_vs2017编译openssl

https://blog.csdn.net/Hanford/article/details/53582189

https://blog.csdn.net/tfy1028/article/details/8660823

Win10中用VS2019编译live555相关推荐

  1. Windows10系统中用VS2019编译live555

    一.Win10(64位)系统中,首先下载live555源码: live555下载地址:http://www.live555.com/liveMedia/public/ 其中264文件夹下是264格式的 ...

  2. windows 10下VS2019编译mongoDB c、c++API(win10下vs2019编译mongo c++)

    1.windows 10下安装 git git clone https://github.com/mongodb/mongo-c-driver.git 拖到本地,然后mkdir cmake_build ...

  3. zlib / win10 下 vs2019 编译 zlib 的方法

    一.准备 官网下载 zlib 库源代码.(点我) 二.设置 1.进入源码根目录,双击打开 contrib \ vstudio \ vc14 \ zlibvc.sln. 2.初始编译时,会报错: 无法生 ...

  4. Win10下用VS2017编译live555

    Win7下使用VS2013编译live555 一.live555简介 live555是一个为流媒体提供解决方案的跨平台C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP.RTSP.SIP等 ...

  5. rippled win10 vs2019编译 rippled 1.6.0

    win10 vs2019 编译rippled 1.6.0 01 必备资源 rippled官方提高的编译文档一直都是vs2017的 boost1.70.0的说明.最近抽空尝试win10下面 使用 vs2 ...

  6. VS2019编译MQTT库 C/C++(超详细,含示例工程)

    目录 前言 一.前期准备 1.1 获取mqtt库 1.2 安装openssl 1.3 安装cmake-gui 二.生成C工程代码 三.编译C库 3.1 创建工程目录 3.2 修改输出目录 四.生成C+ ...

  7. vs2019编译obs源码生成sln解决方案

    目录 一.OBS介绍 二.OBS源码下载 三.Qt配置 四.设置依赖库目录 五.开始编译 六.main函数 七.视频教程 一.OBS介绍   obs的编译不是很难,只要代码下的全,环境变量配的ok, ...

  8. win10中用Intellij IDEA连接虚拟机Hadoop

    win10中用Intellij IDEA连接虚拟机Hadoop 确保安装好了jdk1.8以上&maven3.0以上,hadoop cmd命令查看 maven安装教程 hadoop文件解压,ba ...

  9. windows10系统VS2017编译live555

    需要编译live555的源码,win10系统,使用VS2017 1. 下载源码 下载地址: http://www.live555.com/liveMedia/public/ 下载内容: live555 ...

最新文章

  1. ping 不通 华为三层交换机vlan_华三两台三层华为交换机 vlan互访 配置
  2. TOPCODER SAM 686 div1 300
  3. Dataset之DA:数据增强(Data Augmentation)的简介、方法、案例应用之详细攻略
  4. web3.js_1.x.x--API(一)event/Constant/deploy/options
  5. js中立即执行函数会预编译吗_面试官:聊聊对Vue.js框架的理解
  6. 邮件服务器两种协议,邮件服务器协议
  7. cmu的计算机专业项目有哪些,CMU卡耐基梅隆大学计算机学院项目介绍(一)
  8. 设计模式的C语言应用-建造者模式-第七章
  9. 穷人的孩子真的早当家吗?
  10. 带lazy标记的线段树
  11. 枫叶股票监控免费软件 股票基金涨幅盈亏监控 上班摸鱼炒股神器
  12. Arduino与墨子号 BC26 4G模块的对接开发
  13. 网易互娱2017实习生招聘游戏研发工程师在线笔试第二场(一起消消毒)
  14. 哈利波特系列之伏地魔生平
  15. [Xcode 实际操作]七、文件与数据-(18)使用MarkMan与设计师进行心灵沟通
  16. 免安装PortableGit配置 + TortoiseGit安装
  17. 音质媲美入耳式耳机,设计时尚续航出色,南卡Runner Pro 4体验
  18. 学习笔记-Web Generic
  19. enc易能变频_ENC易能变频器专修公司
  20. unbuntu下 sudo apt-get update 更新软件源列表

热门文章

  1. 等维递推GM(1,1)模型、无偏灰色模型
  2. LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件
  3. 浅析3种电池容量监测方案
  4. iOS-Appstore上App下架后用另一个新账号上架
  5. 机器学习进阶 第一节 第十课
  6. Cisco 7600系列Supervisor Engine 720-3BXL
  7. B1094 谷歌的招聘 (20 分)
  8. vscode C++编译和调试
  9. 叶辽 c语言,段子贴,不定期更新叶辽、黄源清、守墓人都负重伤,而魔王也并不...
  10. 编码:8421 BCD码(彻底弄懂+6是什么意思,为什么要加6)