Win10下用VS2017编译live555

Win7下使用VS2013编译live555

一.live555简介

live555是一个为流媒体提供解决方案的跨平台C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持。live555能在Linux,Mac OS X,Windows和QNX等多个平台编译和运行。目前,它被用于流化、接收和处理MPEG、H.264、H.265、H.263+、DV等视频,以及MPEG(MP3的编码)、AAC、PCM等音频。由于良好的扩展性,live555可轻松支持其他的音视频编码格式,相关功能已经被添加到多款流行的播放器中,比如说VLC和MPlayer。

更多介绍详见官网:LIVE555.COM

二.下载

下载链接:Index of /liveMedia/public

已经更新到了2016.11.06

三.编译

这里config-windows有编译步骤。

1.解压到E:\live555

2.修改E:\live555\win32config文件,将文件中的TOOLS32=  c:\Program Files\DevStudio\Vc改为你的VS2013路径,我改成了TOOLS32=  C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC

3.cd到E:\live555,执行genWindowsMakefiles,会在E:\live555的每个子文件夹中生成后缀为.mak的MakeFiles文件,该文件能被VS打开

4.用VS2013打开各个子文件夹中的*.mak文件,此时会发现VS2013根本就不能打开*.mak文件,google后发现只有VC6.0才能直接打开*.mak文件,此后版本的VS只能用命令行来编译。So,没必要继续看下去了。

现在直接新建VS2013工程,将源文件添加进去,然后再进行编译。这种方法虽然繁琐,但是便于调试。

在E:\live555中共有8个子文件夹,如下所示:

其中其中BasicUsageEnvironment、groupsock、liveMedia、UsageEnvironment、WindowsAudioInputDevice是基础类库,以静态库的形式存在,testProgs则主要存放一些测试代码,mediaServer则是服务器的主程序,以一个可执行文件形式存在。

UsageEnvironment:UsageEnvironment和TaskScheduler类用于调度延迟事件、给异步读事件分配句柄、输出错误或警告消息。HashTable类定义了通用哈希表接口,该接口被源码的其他部分使用。这些类是抽象类,需要去继承并实现。

groupsock:这个库的类封装了网络接口和套接字,需要注意的是,Groupsock封装了发送或接收组播报文的操作。

liveMedia:这个库定义了以Medium类为根的树状层级类,封装了大量流媒体类型和编码。

BasicUsageEnvironment:这个类是UsageEnvironment的一个实现类。

testProgs:一些测试程序。

WindowsAudioInputDevice:这个库是liveMedia中抽象类AudioInputDevice的实现,能在Windows上从输入设备读取PCM音频采样。

mediaServer:服务器主程序。

proxyServer:代理服务器,以一个可执行文件形式存在。

1.新建一个空白解决方案

像该解决方案中添加7个Win32控制台项目(不包括例子),其中5个静态库如下设置,选择静态库,并且不勾选预编译头。

两个可执行程序如下设置,选择控制台应用程序,并且勾选空项目。

添加完成后,解决方案如下图所示:

然后就是向各个项目中添加源代码,注意源代码一定别遗漏,否则静态库虽然编译可能通过,但是调用时会出现链接错误。此时直接编译肯定是编不过的,相关的头文件和库文件没有添加。

这里以编译BasicUsageEnvironment和mediaServer为例,其他的操作类似。

2.BasicUsageEnvironment编译

为了防止类似error C4996: '_snprintf': This function or variable may be unsafe的错误,7个项目中都要在预处理定义中加入_CRT_SECURE_NO_DEPRECATE和_WINSOCK_DEPRECATED_NO_WARNINGS

3.mediaServer编译

等5个静态库编译成功后(WindowsAudioInputDevice暂时没用到,可以先不用编译),就可以编译mediaServer了。

这里以Debug配置来演示,Release步骤一样。5个静态库默认被编译到E:\live555\live555project\Debug,像上图设置可以加入库目录。

注意别忘了添加Ws2_32.lib,不然的话,会出现一大堆Socket相关的链接错误。编译成功的mediaServer也在E:\live555\live555project\Debug中。

4.mediaServer运行

控制台中打印出客户端访问时使用的URL地址格式和live555支持的文件类型。

四.测试

这里需要特别注意一点,当通过IDE运行mediaServer时,live555推送的是项目工作目录中的视频或音频。工作目录也就是和*.vcxproj同级的目录,即E:\live555\live555project\mediaServer,此时视频应该放在这个目录下。当双击mediaServer.exe运行时,视频理所当然的和mediaServer.exe放在一个目录,即E:\live555\live555project\Debug。

测试视频:480320.264

客户端:vlc-2.2.4-win32

操作步骤:

如果URL地址不对(视频名字错了或其他原因),会出现如下提示:

需要说明的是mediaServer只实现读取本地文件推送到客户端的点播功能,实际应用中往往需要实时采集影视频数据,并打包成RTSP流推送出去,即直播。此时,可以继承live555的相关类,实现从内存中读取数据并推送。详见下篇:

通过live555实现H264 RTSP直播(Windows版)

参考链接:live555 --- vs2010编译_maplele20的博客-CSDN博客

------------------------------------------------------分割线---------------------------------------------------------------

Win10下用VS2017编译live555

当前live555已经更新到了2022.04.26

 源码目录结构和六年前相比没有变化,用VS2017编译的方法也和VS2013一样,其实用Qt Creator来编译也很方便,文末是pro文件
这里突然更新一下,是因为去年做了个基于libVLC的视频播放器,现在想看看live555的源码,要看当然看最新的源码啦,顺便更新下这篇博文

live555\BasicUsageEnvironment\BasicUsageEnvironment.pro

TARGET = BasicUsageEnvironment
TEMPLATE = lib
CONFIG += staticlib

contains(QT_ARCH, i386) {
DESTDIR = ../out/win32
} else {
DESTDIR = ../out/x64
}

DEFINES += _CRT_SECURE_NO_DEPRECATE \
           _WINSOCK_DEPRECATED_NO_WARNINGS

INCLUDEPATH += $$PWD/include \
               $$PWD/../groupsock/include \
               $$PWD/../liveMedia/include \
               $$PWD/../UsageEnvironment/include

HEADERS += $$PWD/include/*.hh

SOURCES += $$PWD/*.cpp

live555\groupsock\groupsock.pro

TARGET = groupsock
TEMPLATE = lib
CONFIG += staticlib

contains(QT_ARCH, i386) {
DESTDIR = ../out/win32
} else {
DESTDIR = ../out/x64
}

DEFINES += _CRT_SECURE_NO_DEPRECATE \
           _WINSOCK_DEPRECATED_NO_WARNINGS \
           NO_GETIFADDRS

INCLUDEPATH += $$PWD/include \
               $$PWD/../BasicUsageEnvironment/include \
               $$PWD/../liveMedia/include \
               $$PWD/../UsageEnvironment/include

HEADERS += $$PWD/include/*.hh

SOURCES += $$PWD/*.cpp \
           $$PWD/*.c

live555\liveMedia\liveMedia.pro

TARGET = liveMedia
TEMPLATE = lib
CONFIG += staticlib

contains(QT_ARCH, i386) {
DESTDIR = ../out/win32
} else {
DESTDIR = ../out/x64
}

DEFINES += _CRT_SECURE_NO_DEPRECATE \
           _WINSOCK_DEPRECATED_NO_WARNINGS \
           NO_OPENSSL

macx {
DEFINES += LOCALE_NOT_USED
}

INCLUDEPATH += $$PWD/include \
               $$PWD/../BasicUsageEnvironment/include \
               $$PWD/../groupsock/include \
               $$PWD/../UsageEnvironment/include

HEADERS += $$PWD/include/*.hh \
           $$PWD/*.hh

SOURCES += $$PWD/*.cpp \
           $$PWD/*.c

live555\UsageEnvironment\UsageEnvironment.pro

TARGET = UsageEnvironment
TEMPLATE = lib
CONFIG += staticlib

contains(QT_ARCH, i386) {
DESTDIR = ../out/win32
} else {
DESTDIR = ../out/x64
}

DEFINES += _CRT_SECURE_NO_DEPRECATE \
           _WINSOCK_DEPRECATED_NO_WARNINGS

INCLUDEPATH += $$PWD/include \
               $$PWD/../BasicUsageEnvironment/include \
               $$PWD/../groupsock/include \
               $$PWD/../liveMedia/include

HEADERS += $$PWD/include/*.hh

SOURCES += $$PWD/*.cpp

live555\live555.pro

TEMPLATE = subdirs
CONFIG  += ordered

SUBDIRS += \
        $$PWD/BasicUsageEnvironment \
        $$PWD/groupsock \
        $$PWD/liveMedia \
        $$PWD/UsageEnvironment 

直接打开live555.pro就可以编译生成静态库,最后贴下mediaServer的pro文件

live555\mediaServer.pro

QT -= gui
TARGET = mediaServer
TEMPLATE = app

CONFIG += c++11 console
CONFIG -= app_bundle

DEFINES += _CRT_SECURE_NO_DEPRECATE \
           _WINSOCK_DEPRECATED_NO_WARNINGS \
           NO_OPENSSL

INCLUDEPATH += $$PWD/BasicUsageEnvironment/include \
               $$PWD/groupsock/include \
               $$PWD/liveMedia/include \
               $$PWD/UsageEnvironment/include


HEADERS += $$PWD/mediaServer/*.hh \

SOURCES += $$PWD/mediaServer/*.cpp \

LIBS +=  Ws2_32.lib

contains(QT_ARCH, i386) {
DESTDIR = out/win32
LIBS +=  $$PWD/out/win32/BasicUsageEnvironment.lib \
         $$PWD/out/win32/groupsock.lib \
         $$PWD/out/win32/liveMedia.lib \
         $$PWD/out/win32/UsageEnvironment.lib
} else {
DESTDIR = out/x64
LIBS +=  $$PWD/out/x64/BasicUsageEnvironment.lib \
         $$PWD/out/x64/groupsock.lib \
         $$PWD/out/x64/liveMedia.lib \
         $$PWD/out/x64/UsageEnvironment.lib
}

原文链接:https://blog.csdn.net/caoshangpa/article/details/53169297

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

草上爬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值