win10系统VS2017编译live555
需要编译live555的源码,win10系统,使用VS2017
1. 下载源码
下载地址: http://www.live555.com/liveMedia/public/
下载内容: live555-latest.tar.gz
2. 编译步骤
- 将下载的文件,解压在 D:\live555\live 路径下
- 打开vs2017,新建一个项目,Visual C++, 选择空项目 (因为vs2017升级版本后,没有了win32控制台应用程序的 选择空项目的那个设置页。)
- 输入名称:UsageEnvironment。如下图:
5. 继续添加其他项目,groupsock
6. 添加 liveMedia 项目
7. 添加 mediaServer 项目
8. 继续添加UsageEnvironment. 同上面的步骤。
9. 添加完5个项目之后,如下图所示。项目名称与文件名一一对应。
10. 将解压好的文件,对应的文件夹的内容,分别移动到项目的对应的文件夹下面,如下面两幅图所示,移动BasicUsageEnvironment的所有文件到项目中。
11. 将解压的文件中(上面右图)的include文件,即 .hh 和 .h 文件,添加到对应项目的 头文件中, 将文件中的 .cpp .c 文件,添加到对应项目的源文件中。 需要注意的一点是,解压的文件中include文件之外也存在 .hh .h 文件,也需要把这些文件移动到include中,然后添加到对应的项目的头文件中。
12. 如下图所示,就把所有的 .hh .h .cpp .c 等文件都添加好了,需要注意一下, liveMedia的头文件和源文件比较多,且有些头文件散落在外面,需要移动到include中。
13. 对BasicUsageEnvironment groupsock liveMedia UsageEnvironment 的项目,都需要做如下操作:
右键项目名称 --》属性--》 C/C++ --》 常规 --》附加包含目录--》 为每一个项目都添加这四个项目的include路径,liveMedia没有include,就直接到 liveMedai这一条即可。切记,没有mediaServer项目。
14. 由于vs2017升级之后,没办法在一开始创建空项目的时候指定是编译静态库还是可执行文件,所以需要再此处进行设置。很重要。
对BasicUsageEnvironment groupsock liveMedia UsageEnvironment 的项目,都进行如下操作:
右键项目名称 --》 配置属性 --》 常规 --》 项目默认值 -- 》 配置类型 --》 改为:静态库。 切记,没有mediaServer项目。
15. 如果不改的话,对文件编译,会出现如下错误。 因为没有main函数,找不到执行入口。
具体原因,参考:https://blog.csdn.net/wushao126/article/details/51785505
1>------ 已启动生成: 项目: UsageEnvironment, 配置: Debug Win32 ------
1>HashTable.cpp
1>strDup.cpp
1>UsageEnvironment.cpp
1>正在生成代码...
1>LINK : fatal error LNK1561: 必须定义入口点
1>已完成生成项目“UsageEnvironment.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
16. 对BasicUsageEnvironment groupsock liveMedia UsageEnvironment 的项目,进行如下操作:选中项目名称,右键,生成,等待即可。切记,没有mediaServer项目。
17. 编译BasicUsageEnvironment 出现如下问题:
1>d:\project3\live555\basicusageenvironment\basicusageenvironment0.cpp(79):
error C4996: '_snprintf': This function or variable may be unsafe. Consider using
_snprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
See online help for details.
1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\ucrt\stdio.h(1961):
note: 参见“_snprintf”的声明
1>DelayQueue.cpp
1>正在生成代码...
1>已完成生成项目“BasicUsageEnvironment.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
18. 解决方案:在预处理器定义中,添加: _CRT_SECURE_NO_WARNINGS 对BasicUsageEnvironment groupsock liveMedia UsageEnvironment 的项目都进行如下操作。
其他的解决方案参考:https://www.cnblogs.com/wanghui1234/archive/2018/06/09/9158853.html
19. 编译结果:
BasicUsageEnvironment 成功!!!
1>------ 已启动生成: 项目: BasicUsageEnvironment, 配置: Debug Win32 ------
1>BasicHashTable.cpp
1>BasicTaskScheduler.cpp
1>BasicTaskScheduler0.cpp
1>BasicUsageEnvironment.cpp
1>BasicUsageEnvironment0.cpp
1>DelayQueue.cpp
1>正在生成代码...
1>BasicUsageEnvironment.vcxproj -> D:\project3\live555\Debug\BasicUsageEnvironment.lib
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
groupsock 成功!!!
1>------ 已启动全部重新生成: 项目: groupsock, 配置: Debug Win32 ------
1>GroupEId.cpp
1>Groupsock.cpp
1>GroupsockHelper.cpp
1>d:\project3\live555\groupsock\groupsockhelper.cpp(844): warning C4244: “=”:
从“time_t”转换到“long”,可能丢失数据
1>IOHandlers.cpp
1>NetAddress.cpp
1>NetInterface.cpp
1>正在生成代码...
1>inet.c
1>groupsock.vcxproj -> D:\project3\live555\Debug\groupsock.lib
1>已完成生成项目“groupsock.vcxproj”的操作。
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========
UsageEnvironment 成功!!!
1>------ 已启动全部重新生成: 项目: UsageEnvironment, 配置: Debug Win32 ------
1>HashTable.cpp
1>strDup.cpp
1>UsageEnvironment.cpp
1>正在生成代码...
1>UsageEnvironment.vcxproj -> D:\project3\live555\Debug\UsageEnvironment.lib
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========
groupsock 失败了!!!查看原因,是这样的:
1>d:\project3\live555\groupsock\netaddress.cpp(108): error C4996: 'gethostbyname':
Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS
to disable deprecated API warnings
1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\winsock2.h(2219):
note: 参见“gethostbyname”的声明
1>NetInterface.cpp
1>正在生成代码...
1>已完成生成项目“groupsock.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
解决方案: 添加: _WINSOCK_DEPRECATED_NO_WARNINGS 修改如下,再编译,groupsock就通过了。
遇到一个大麻烦:openssl/ssl.h 找不到。因为Windows上没有这个库,所以还得需要额外下载这个库,安装编译。
1>d:\project3\live555\livemedia\include\tlsstate.hh(31): fatal error C1083:
无法打开包括文件: “openssl/ssl.h”: No such file or directory
1>uLawAudioFilter.cpp
1>VideoRTPSink.cpp
1>VorbisAudioRTPSink.cpp
1>VorbisAudioRTPSource.cpp
1>VP8VideoRTPSink.cpp
1>VP8VideoRTPSource.cpp
1>VP9VideoRTPSink.cpp
1>VP9VideoRTPSource.cpp
1>WAVAudioFileServerMediaSubsession.cpp
1>WAVAudioFileSource.cpp
1>正在生成代码...
1>已完成生成项目“liveMedia.vcxproj”的操作 - 失败。
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========
未完待续、、、
上一篇: 音视频基础_2_数字音频简介
下一篇: 音视频开发-RTP协议