首页 > 系统相关 >LIVE555再学习 -- Windows 下编译

LIVE555再学习 -- Windows 下编译

时间:2023-04-03 20:05:43浏览次数:59  
标签:LIVE555 obj lib 符号 -- Windows mediaServer error liveMedia



然后开始下载编译,其中包含,Windows、Linux和交叉编译三种形式。

首先来讲Windows下编译

参看:Live555研究之一 源代码编译

一、下载源码

下载:Index of /liveMedia/public

参看:LIVE555 Streaming Media


选择下载 live555-latest.tar.gz

LIVE555再学习 -- Windows 下编译_应用程序

二、文件介绍

我的开发环境为 win 10 64位+VS2017

将上面下载的 live555-latest.tar.gz 解压

LIVE555再学习 -- Windows 下编译_预编译头_02

包括上述四个库和mediaServer服务器程序,以及其他的测试代码。

这几个文件在官网是有介绍的:

参看:live555 Description

三、创建工程

这个我已经不陌生了,在讲 FFmpeg 的时候就创建过好几次了。

参看:FFmpeg再学习 -- Windows下安装说明

新建控制台工程

打开 VS;


文件->新建->项目->Win32控制台应用程序,点击确认。


注意,选择的位置最好不要有空格或者汉字。


(1)BasicUsageEnvironment


项目名称为 BasicUsageEnvironment,解决方案名称为 live555


LIVE555再学习 -- Windows 下编译_应用程序_03


LIVE555再学习 -- Windows 下编译_无法解析_04




应用程序类型为静态库,附加选项不勾选预编译头



LIVE555再学习 -- Windows 下编译_应用程序_05

(2)UsageEnvironment

添加新建项目,选择win32控制台项目,项目名称为 UsageEnvironment

LIVE555再学习 -- Windows 下编译_无法解析_06

LIVE555再学习 -- Windows 下编译_预编译头_07



应用程序类型为静态库,附加选项不勾选预编译头

LIVE555再学习 -- Windows 下编译_应用程序_05

(3)groupsock 

添加新建项目,选择win32控制台项目,项目名称为 groupsock 

LIVE555再学习 -- Windows 下编译_无法解析_06

LIVE555再学习 -- Windows 下编译_应用程序_10




应用程序类型为静态库,附加选项不勾选预编译头


LIVE555再学习 -- Windows 下编译_应用程序_05


(4)liveMedia 


添加新建项目,选择win32控制台项目,项目名称为 liveMedia 


LIVE555再学习 -- Windows 下编译_无法解析_06


LIVE555再学习 -- Windows 下编译_预编译头_13





应用程序类型为静态库,附加选项不勾选预编译头



LIVE555再学习 -- Windows 下编译_应用程序_05


(5)mediaServer


添加新建项目,选择win32控制台项目,项目名称为 mediaServer



LIVE555再学习 -- Windows 下编译_无法解析_06



LIVE555再学习 -- Windows 下编译_应用程序_16




应用程序类型为控制台应用程序,附加选项为勾选空项目


LIVE555再学习 -- Windows 下编译_预编译头_17


(6)最终创建的 5 个项目


LIVE555再学习 -- Windows 下编译_无法解析_18


对比一下和源码的那些库文件名,它们是一一对应的


LIVE555再学习 -- Windows 下编译_预编译头_19




四、将源文件加入工程


(1)打开源码目录,将BasicUsageEnvironment、UsageEnvironment、groupsock、mediaServer、liveMedia目录下的include目录、cpp文件、c文件、.hh和.h文件拷贝到上述创建的对应的工程目录下。


注意:尤其是 liveMedia 和 Groupsock 中有几个 .c 文件,千万不要忘记添加了。


后面会讲到,忘记这事,遇到个问题查了一个多小时才搞定。




点击右键,选择在资源管理器中打开文件夹,进入项目目录。


(注意,如果手动进入注意文件夹位置,我就是没找好位置,试了半天最后才发现,将上面的这些文件拷贝到错误的文件夹下了)


LIVE555再学习 -- Windows 下编译_预编译头_20





举个例子,拷贝完后此时的 BasicUsageEnvironment 项目目录下文件为:


LIVE555再学习 -- Windows 下编译_无法解析_21


同样的方法拷贝完其他四个项目。


(2)接着就是将这些文件添加进对应项目,将每个工程下的 include下的头文件则添加到头文件筛选器下,再将 .cpp、.c、.hh 和 .h 添加到源文件筛选器下。

LIVE555再学习 -- Windows 下编译_应用程序_22


LIVE555再学习 -- Windows 下编译_应用程序_23


来一个效果图

LIVE555再学习 -- Windows 下编译_应用程序_24


(3)添加依赖头文件。在属性->C/C++->常规->附加包含目录填写需要包含的头文件路径

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


BasicUsageEnvironment添加后效果如下图,其他4个工程项目重复操作即可。

LIVE555再学习 -- Windows 下编译_无法解析_25

五、编译生成

先编译 BasicUsageEnvironment、groupsock、liveMedia、UsageEnvironment 这四个项目

注意 mediaServer 是最后再编译的。

右击属性,点击生成。

LIVE555再学习 -- Windows 下编译_预编译头_26

LIVE555再学习 -- Windows 下编译_应用程序_27


然后可以看到 live555/Debug 文件夹下有生成的四个 lib 文件

LIVE555再学习 -- Windows 下编译_无法解析_28

然后在 mediaServer 目录下新建一个 lib 文件夹,将这四个 lib 文件拷贝到该文件夹下。

LIVE555再学习 -- Windows 下编译_无法解析_29

配置 mediaServer 的属性->链接器->常规->附加库目录,输入“ lib” (刚才拷贝库文件的目录)


LIVE555再学习 -- Windows 下编译_应用程序_30




配置属性->链接器->输入->附加依赖项,输入 

BasicUsageEnvironment.lib;groupsock.lib;liveMedia.lib;UsageEnvironment.lib;Ws2_32.lib

LIVE555再学习 -- Windows 下编译_无法解析_31

LIVE555再学习 -- Windows 下编译_预编译头_32


此刻再编译 mediaServer,OK 编译成功,生成 mediaServer.exe。

LIVE555再学习 -- Windows 下编译_预编译头_33


问题分析:

这里遇到一个问题,检查了一个小时。最后发现是 liveMedia 和 Groupsock 中有几个 .c 文件未拷贝到项目中。

1>------ 已启动全部重新生成: 项目: mediaServer, 配置: Debug Win32 ------
1>live555MediaServer.cpp
1>DynamicRTSPServer.cpp
1>d:\zslfchenjuke\work2017\live555\live555\mediaserver\dynamicrtspserver.cpp(50): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_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.15063.0\ucrt\stdio.h(207): note: 参见“fopen”的声明
1>d:\zslfchenjuke\work2017\live555\live555\mediaserver\dynamicrtspserver.cpp(188): warning 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.
1>c:\program files (x86)\windows kits\10\include\10.0.15063.0\ucrt\stdio.h(1772): note: 参见“sprintf”的声明
1>正在生成代码...
1>BasicUsageEnvironment.lib(BasicUsageEnvironment.obj) : error LNK2019: 无法解析的外部符号 _initializeWinsockIfNecessary,该符号在函数 "protected: __thiscall BasicUsageEnvironment::BasicUsageEnvironment(class TaskScheduler &)" (??0BasicUsageEnvironment@@IAE@AAVTaskScheduler@@@Z) 中被引用
1>groupsock.lib(GroupsockHelper.obj) : error LNK2001: 无法解析的外部符号 _initializeWinsockIfNecessary
1>groupsock.lib(NetAddress.obj) : error LNK2019: 无法解析的外部符号 _our_inet_addr,该符号在函数 "public: __thiscall NetAddressList::NetAddressList(char const *)" (??0NetAddressList@@QAE@PBD@Z) 中被引用
1>groupsock.lib(GroupsockHelper.obj) : error LNK2001: 无法解析的外部符号 _our_inet_addr
1>groupsock.lib(GroupsockHelper.obj) : error LNK2019: 无法解析的外部符号 _our_srandom,该符号在函数 "unsigned int __cdecl ourIPAddress(class UsageEnvironment &)" (?ourIPAddress@@YAIAAVUsageEnvironment@@@Z) 中被引用
1>groupsock.lib(GroupsockHelper.obj) : error LNK2019: 无法解析的外部符号 _our_random,该符号在函数 "unsigned int __cdecl chooseRandomIPv4SSMAddress(class UsageEnvironment &)" (?chooseRandomIPv4SSMAddress@@YAIAAVUsageEnvironment@@@Z) 中被引用
1>liveMedia.lib(ProxyServerMediaSession.obj) : error LNK2001: 无法解析的外部符号 _our_random
1>liveMedia.lib(RTCP.obj) : error LNK2001: 无法解析的外部符号 _our_random
1>liveMedia.lib(RTPSink.obj) : error LNK2001: 无法解析的外部符号 _our_random
1>liveMedia.lib(GenericMediaServer.obj) : error LNK2019: 无法解析的外部符号 _our_random32,该符号在函数 "protected: class GenericMediaServer::ClientSession * __thiscall GenericMediaServer::createNewClientSessionWithId(void)" (?createNewClientSessionWithId@GenericMediaServer@@IAEPAVClientSession@1@XZ) 中被引用
1>liveMedia.lib(RTPSink.obj) : error LNK2001: 无法解析的外部符号 _our_random32
1>liveMedia.lib(RTPSource.obj) : error LNK2001: 无法解析的外部符号 _our_random32
1>liveMedia.lib(RTCP.obj) : error LNK2019: 无法解析的外部符号 _OnExpire,该符号在函数 "private: void __thiscall RTCPInstance::onExpire1(void)" (?onExpire1@RTCPInstance@@AAEXXZ) 中被引用
1>liveMedia.lib(RTCP.obj) : error LNK2019: 无法解析的外部符号 _OnReceive,该符号在函数 "private: void __thiscall RTCPInstance::onReceive(int,int,unsigned int)" (?onReceive@RTCPInstance@@AAEXHHI@Z) 中被引用
1>D:\zslfchenjuke\work2017\LIVE555\live555\Debug\mediaServer.exe : fatal error LNK1120: 7 个无法解析的外部命令
1>已完成生成项目“mediaServer.vcxproj”的操作 - 失败。
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========  


再有可能遇到下面的问题(我是没有遇到)

error C4996: ‘_snprintf’:This function or variable may be unsafe. Consider using _snprintf_s instead. Todisable deprecation, use _CRT_SECURE_NO_WARNINGS.
参看:Live555源代码下载编译与测试

六、测试

双击 mediaServer.exe 

LIVE555再学习 -- Windows 下编译_应用程序_34


然后找一个视频文件,放在和 mediaServer.exe 同一目录。注意视频格式,要是上面所支持的。

然后打开 VLC,媒体->打开网络串流,输入网络URL。 rtsp://电脑IP地址/<filename>

LIVE555再学习 -- Windows 下编译_无法解析_35

LIVE555再学习 -- Windows 下编译_无法解析_36

七、项目下载

下载:Windows 下 LIVE555 项目工程


标签:LIVE555,obj,lib,符号,--,Windows,mediaServer,error,liveMedia
From: https://blog.51cto.com/u_15979522/6167167

相关文章

  • RTSP再学习 -- RTSP协议分析(转载)
    最近一直在看RTSP,但是RTSP协议是个啥?还没有搞清楚。首先流媒体百度百科上有这样一段,从基本的名字上或多或少可以理解一下这些传输协议的区别。这很重要!!传输协议1、RSVP:资源预留协议2、RTP:实时传输协议3、RTCP:实时传输控制协议4、MMS:微软流媒体服务协议5、RTSP:实时流传输协议6、MIM......
  • mysql多实例配置
    实现在一台服务器上开两个数据库服务。配置:[mysqld_multi]user=rootmysqld=/usr/local/mysql/bin/mysqld_safemysqladmin=/usr/local/mysql/bin/mysqladmin[mysqld1]datadir=/dir1port=3307pid-file=/dir1/mysqld1.pidlog-error=/dir1/mysqld1.errsocket=/dir1/mysqld1.sock[mysqld......
  • MQTT再学习 -- 安装MQTT客户端及测试
    上一篇文章我们已经讲了MQTT服务器的搭建,参看:MQTT再学习--搭建MQTT服务器及测试接下来我们看一下MQTT客户端。一、客户端下载首先,客户端也有多种,我们需要面临选择了。参看:基于mqtt的消息推送(三)客户端实现现有客户端sdk分析,基本分为两大类:一类移植自C类库,如Mosquitto,一类是用o......
  • FFmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器
    继续看雷霄骅的课程资料-基于FFmpeg+SDL的视频播放器的制作最后一篇,主要是想学一下MFC创建和配置。一、创建MFC工程文件->新建->项目->VisualC++->MFC应用程序应用程序类型,选择基于对话框生成效果如下:二、设置控件找到“工具箱”,就可以将相应的控件拖拽至应用程序对话框......
  • 图像和流媒体 -- Sapera 安装遇到的问题
    一、下载安装包参看:GenieNanoM1930-NIR点击软件及例程下载二、安装遇到的问题(1)Installationdirectorymustbeonalocalharddrive解决方法:clsicacls%temp%/reset/T/Q/Cpause以上文件复制到txt中将后缀名修改为bat以管理员执行即可。windows自身权限的的问题。(2)安......
  • Problem B. Harvest of Apples 组合数求和(莫队没怎么看懂)
    ProblemB.HarvestofApplesTimeLimit:4000/2000MS(Java/Others)    MemoryLimit:262144/262144K(Java/Others)TotalSubmission(s):3775    AcceptedSubmission(s):1450 ProblemDescriptionTherearenapplesonatree,numberedfrom1ton.Count......
  • MQTT再学习 -- 漫谈MQTT协议
    MQTT服务器搭建我们已经完成了,现在回过头来看协议。参看:MQTT官网参看:MQTT_V3.1_Protocol_Specific参看:MQTT协议中文版参看:MQTT协议中文版上面这几篇文章,已经说明了一切。下面着重讲一下MQTT的消息格式和主要特征。一、什么是MQTT首先你要知道什么是MQTT。额,这个很重要。官网是......
  • 日常生活小技巧 -- 惠普 Windows10 进入安全模式
    今天手贱,是真的很贱。将用户模式从管理员组改为标准用户方法是:WIN+R打开controluserpasswords2然后出现了用户账户控制,你要允许此应用对你的设备进行更改吗?最关键的是没有“是”选项。试了各种方法都不成功。比如网上说的进入命令提示符(管理员)或者更改用户账户控制设置,都会弹出......
  • IDEA Spring-boot 使用@Component注解的工具类,用@Autowired注入 @Service或者@Reposit
    IDEASpring-boot使用@Component注解的工具类,用@Autowired注入@Service或者@Repository会空指针(使用@PostContruct)原文链接:https://blog.csdn.net/ld_secret/article/details/104627597/使用idea编译器时,对于spring-boot的项目,大都使用注解,那么:一、现象:@Component标注的U......
  • 2019牛客暑期多校训练营(第四场) K numbers
    链接:https://ac.nowcoder.com/acm/contest/884/K?&headNav=acm&headNav=acm来源:牛客网 题目描述300iqlovesnumberswhoaremultipleof300.Onedayhegotastringconsistedofnumbers.Hewantstoknowhowmanysubstringsinthestringaremultiplesof300whe......