Windows下Live555的编译及VS工程创建

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。
源码目录结构如下:

Live555源码目录结构

2 在Windows上使用makefile编译Live555

  1. 下载Live555源码
  2. 修改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
  1. 修改groupsock/makefile.head,
INCLUDES = -Iinclude -I../UsageEnvironment/include
修改为
INCLUDES = -Iinclude -I../UsageEnvironment/include -DNO_STRSTREAM
  1. 运行genWindowsMakefiles.cmd生成VS能够编译的*.mak文件
  2. 编写批处理文件,将以下代码保存为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命令行进行编译

  1. 在命令行下运行compile.bat文件,编译过程会在命令行中显示,最后会在各个源码目录下生成对应的lib或exe文件。

3 生成VS2010解决方案

3.1 添加四个基本库并编译

  1. 新建4个empty project: BasicUsageEnvironment,GroupSock,LiveMedia,UsageEnvironment。
  2. 复制源文件到对应的工程目录下,以BasicUsageEnvironment为例,复制后目录结构如下:


    BasicUsageEnvironment工程文件目录
  3. 添加文件到工程,方法:add->Existing Item,快捷键:Shift+Alt+A
  4. 根据.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头文件,去除后会导致无法找到系统的头文件而编译报错。

  1. 修改工程输出文件类型,方法:Project->Properties->Configuration Properties->General->Configuration Type,界面如下:
    输出文件类型
  2. 设置工程输出目录,尽量通用,便于输出文件的管理与移植,个人习惯如下:
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. 新建1个empty project: MediaServer。
  2. 复制源文件到MediaServer工程目录。
  3. 添加源文件到MediaServer工程。
  4. 设置头文件引用目录,如下:
# MediaServer
$(SolutionDir)BasicUsageEnvironment\include;
$(SolutionDir)LiveMedia\include;
$(SolutionDir)UsageEnvironment\include;
$(SolutionDir)GroupSock\include;
$(IncludePath)
  1. 设置Linker目录,方法:Project->Properties->Configuration Properties->Linker->General->Additional Library Directories,界面如下:
    lib静态依赖库目录
# Debug
$(SolutionDir)\Output\LibDebug;
%(AdditionalLibraryDirectories)
# Release
$(SolutionDir)\Output\Lib;
%(AdditionalLibraryDirectories)
  1. 添加lib静态依赖库,方法:Project->Properties->Configuration Properties->Linker->Input->Additional Dependencies,界面如下:
    lib静态依赖库文件
UsageEnvironment.lib
liveMedia.lib
groupsock.lib
BasicUsageEnvironment.lib
Ws2_32.lib
  1. 设置MediaServer为启动工程,方法:右键MediaServer工程->Set as StartUp Project
  2. 运行结果如下图:


    MediaServer运行截图

3.3 流媒体播放测试

  1. 将测试文件(如test.264)拷贝到MediaServer.exe同级目录。

  2. 运行MediaServer.exe。

  3. 打开VLC播放器,媒体->打开网络串流(Ctrl+N),输入rtsp,如下图所示:

    打开网络串流

  4. 点击“播放”,运行结果如下所示:


    播放截图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容