Windows下编译live555

先下载live555的代码
http://www.live555.com/liveMedia/public/live555-latest.tar.gz

本文用的版本是2017-10-27的。本地安装的是Visual Studio 2015对代码进行解压缩,进入live目录,修改win32config文件。把TOOLS32改成VC的安装目录 D:\Program Files (x86)\Visual Studio 2015\VC

进入VS2015开发人员命令提示,运行live目录下的 genWindowsMakefiles 批处理,产生每个项目目录下的*.mak文件。然后依次进入各个项目的子目录进行编译

cd liveMedia
nmake /f liveMedia.mak
cd ../groupsock
nmake /f groupsock.mak
cd ../UsageEnvironment
nmake /f UsageEnvironment.mak
cd ../BasicUsageEnvironment
nmake /f BasicUsageEnvironment.mak

第一次编译过程中出现错误 liveMedia.mak(19) : fatal error U1052: 未找到文件“ntwin32.mak”。这是因为VS的高级版本中,这个文件不在VC的include目录下,而是在Windows SDK的include目录下。把 NtWin32.Mak、Win32.Mak 从
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include
拷贝到
D:\Program Files (x86)\Visual Studio 2015\VC\include
就可以正常编译了

编译完成后会在四个子目录中生成四个.lib文件

如果要编译可调试的debug版本静态库,先把win32config文件中的第二行“NODEBUG=1”注释掉。然后重新运行 genWindowsMakefiles以及之后的每一步。注意在每个目录下先运行一下
del *.obj
清除上次编译的结果

如果想将c运行库从多线程DLL(/MD)改成多线程(/MT),把win32config文件中
COMPILE_OPTS = $(INCLUDES) $(cdebug) $(cflags) $(cvarsdll) -I. -I"$(TOOLS32)\include"
一行改为
COMPILE_OPTS = $(INCLUDES) $(cdebug) $(cflags) $(cvarsmt) -I. -I"$(TOOLS32)\include"

然后可以在VC里面新建一个控制台项目,跑一下测试程序。这个测试程序是根据testOnDemandRTSPServer.cpp简化的

#include "liveMedia.hh"
#include "BasicUsageEnvironment.hh"

UsageEnvironment* env;

// To make the second and subsequent client for each stream reuse the same
// input stream as the first client (rather than playing the file from the
// start for each client), change the following "False" to "True":
Boolean reuseFirstSource = False;

static void announceStream(RTSPServer* rtspServer, ServerMediaSession* sms,
    char const* streamName, char const* inputFileName) {
    char* url = rtspServer->rtspURL(sms);
    UsageEnvironment& env = rtspServer->envir();
    env << "\n\"" << streamName << "\" stream, from the file \""
        << inputFileName << "\"\n";
    env << "Play this stream using the URL \"" << url << "\"\n";
    delete[] url;
}

int main()
{
    // Begin by setting up our usage environment:
    TaskScheduler* scheduler = BasicTaskScheduler::createNew();
    env = BasicUsageEnvironment::createNew(*scheduler);

    // Create the RTSP server:
    RTSPServer* rtspServer = RTSPServer::createNew(*env, 8554, NULL);
    if (rtspServer == NULL) {
        *env << "Failed to create RTSP server: " << env->getResultMsg() << "\n";
        exit(1);
    }

    char const* descriptionString
        = "Session streamed by \"testOnDemandRTSPServer\"";

    // A H.264 video elementary stream:
    {
        char const* streamName = "h264ESVideoTest";
        char const* inputFileName = "test.264";
        ServerMediaSession* sms
            = ServerMediaSession::createNew(*env, streamName, streamName,
                descriptionString);
        sms->addSubsession(H264VideoFileServerMediaSubsession
            ::createNew(*env, inputFileName, reuseFirstSource));
        rtspServer->addServerMediaSession(sms);

        announceStream(rtspServer, sms, streamName, inputFileName);
    }

    env->taskScheduler().doEventLoop(); // does not return

    return 0; // only to prevent compiler warning
}

要在工程中添加include目录
live\liveMedia\include
live\groupsock\include
live\UsageEnvironment\include
live\BasicUsageEnvironment\include

需要链接的库文件包括
BasicUsageEnvironment/libBasicUsageEnvironment.lib
groupsock/libgroupsock.lib
liveMedia/libliveMedia.lib
UsageEnvironment/libUsageEnvironment.lib
Ws2_32.lib

测试文件可以直接从live555官网下载,或者自己编一段264码流
http://www.live555.com/liveMedia/public/264/test.264

工程运行后会提示
"h264ESVideoTest" stream, from the file "test.264"
Play this stream using the URL "rtsp://192.168.14.20:8554/h264ESVideoTest"

用ffplay就可以播放了
ffplay rtsp://192.168.14.20:8554/h264ESVideoTest

或者测试rtsp over tcp
ffplay -rtsp_transport tcp rtsp://192.168.14.20:8554/h264ESVideoTest

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

推荐阅读更多精彩内容