0 前言
最近在学习Live555开源代码,这是一个跨平台的C++开源项目,网上也有很多相关的编译教程和源码分析文章,本文主要针对Live555在Windows下的编译以及VS工程创建过程进行总结与分享。
1 Live555简介
Live555是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持。
Live555实现了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括MPEG、H265、H264、H.263+、DV、JPEG视频和多种音频编码。同时由于良好的设计,Live555非常容易扩展对其它格式的支持。
目前,Live555已经被用于多款播放器的流媒体播放功能的实现,如VLC(VideoLan)、MPlayer。
源码目录结构如下:
2 在Windows上使用makefile编译Live555
- 下载Live555源码。
- 修改win32config中的TOOLS32和LINK_OPTS_0两个选项,如下所示:
# 本机Visual Studio安装目录,以VS2010为例
TOOLS32=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC
# msvcirt.lib在Visul C++2003开始就不支持了
LINK_OPTS_0=$(linkdebug)msvcrt.lib
- 修改groupsock/makefile.head,
INCLUDES = -Iinclude -I../UsageEnvironment/include
修改为
INCLUDES = -Iinclude -I../UsageEnvironment/include -DNO_STRSTREAM
- 运行genWindowsMakefiles.cmd生成VS能够编译的*.mak文件
- 编写批处理文件,将以下代码保存为live\compile.bat
call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
cd liveMedia
nmake /B -f liveMedia.mak
cd ../groupsock
nmake /B -f groupsock.mak
cd ../UsageEnvironment
nmake /B -f UsageEnvironment.mak
cd ../BasicUsageEnvironment
nmake /B -f BasicUsageEnvironment.mak
cd ../testProgs
nmake /B -f testProgs.mak
cd ../mediaServer
nmake /B -f mediaServer.mak
cd ../proxyServer
nmake /B -f proxyServer.mak
cd ../WindowsAudioInputDevice
nmake /B -f WindowsAudioInputDevice.mak
注意:目前的VS已不支持直接打开Makefile文件并转化成sln。需要使用nmake命令行进行编译。
- 在命令行下运行compile.bat文件,编译过程会在命令行中显示,最后会在各个源码目录下生成对应的lib或exe文件。
3 生成VS2010解决方案
3.1 添加四个基本库并编译
- 新建4个empty project: BasicUsageEnvironment,GroupSock,LiveMedia,UsageEnvironment。
-
复制源文件到对应的工程目录下,以BasicUsageEnvironment为例,复制后目录结构如下:
- 添加文件到工程,方法:
add->Existing Item
,快捷键:Shift+Alt+A
。 - 根据
.mak
文件中的INCLUDES
属性修改每个工程的头文件引用,方法:Project->Properties->Configuration Properties->VC++ Directories->Include Directories
,属性界面如下图所示:
# BasicUsageEnvironment
$(SolutionDir)BasicUsageEnvironment\include;
$(SolutionDir)UsageEnvironment\include;
$(SolutionDir)GroupSock\include;
$(IncludePath)
# GroupSock
$(SolutionDir)GroupSock\include;
$(SolutionDir)UsageEnvironment\include;
$(IncludePath)
# LiveMedia
$(SolutionDir)LiveMedia\include;
$(SolutionDir)UsageEnvironment\include;
$(SolutionDir)GroupSock\include;
$(IncludePath)
# UsageEnvironment
$(SolutionDir)UsageEnvironment\include;
$(SolutionDir)GroupSock\include;
$(IncludePath)
注意,$(IncludePath)对应的就是Include Directories属性页中左下角的
Inherit from parent or project defaults
勾选后的结果,主要包含了IDE默认的Include头文件,去除后会导致无法找到系统的头文件而编译报错。
- 修改工程输出文件类型,方法:
Project->Properties->Configuration Properties->General->Configuration Type
,界面如下:
- 设置工程输出目录,尽量通用,便于输出文件的管理与移植,个人习惯如下:
file type | Output Directory |
---|---|
lib | $(SolutionDir)\Output\Lib(Debug) |
dll | $(SolutionDir)\Output\Bin(Debug) |
exe | $(SolutionDir)\Output\Bin(Debug) |
pdb | $(SolutionDir)\Output\Pdb(Debug) |
3.2 添加可执行文件工程(MediaServer)并运行
- 新建1个empty project: MediaServer。
- 复制源文件到MediaServer工程目录。
- 添加源文件到MediaServer工程。
- 设置头文件引用目录,如下:
# MediaServer
$(SolutionDir)BasicUsageEnvironment\include;
$(SolutionDir)LiveMedia\include;
$(SolutionDir)UsageEnvironment\include;
$(SolutionDir)GroupSock\include;
$(IncludePath)
- 设置Linker目录,方法:
Project->Properties->Configuration Properties->Linker->General->Additional Library Directories
,界面如下:
# Debug
$(SolutionDir)\Output\LibDebug;
%(AdditionalLibraryDirectories)
# Release
$(SolutionDir)\Output\Lib;
%(AdditionalLibraryDirectories)
- 添加lib静态依赖库,方法:
Project->Properties->Configuration Properties->Linker->Input->Additional Dependencies
,界面如下:
UsageEnvironment.lib
liveMedia.lib
groupsock.lib
BasicUsageEnvironment.lib
Ws2_32.lib
- 设置MediaServer为启动工程,方法:
右键MediaServer工程->Set as StartUp Project
-
运行结果如下图:
3.3 流媒体播放测试
将测试文件(如test.264)拷贝到MediaServer.exe同级目录。
运行MediaServer.exe。
-
打开VLC播放器,
媒体->打开网络串流(Ctrl+N)
,输入rtsp,如下图所示:
-
点击“播放”,运行结果如下所示: