live555学习(一)通读Makefile编译live555

live555 编译live555 学习开源


前言

拿到一份开源代码,我们应该怎么学习呢,第一次接触的时候面对海量的源码,会有种找不着北的感觉吧。这里我会写下自己的学习过程,以及学习中遇到的那些问题一一记录下来,望对初学会有所帮助。

学习开源代码,我认同一种说法,“竟可能在代码内找答案,而不是在代码外找答案”因为你看到那篇文章的时候有可能已经过时了,以至于不精确.其次他人对整个项目的掌握程度你并不清楚,你并不一定能完全理解他人的文章,怎么说也都是他人的东西,并不是说你读了,就能成为你的东西。

学习一个项目,我认为最快捷了解整个项目的方法就是去看它的Makefile文件,工程目录的Makefile定义了整个项目的整合规则,而各个目录下的Makefile文件则是定义了这个模块的编译规则。本文将通读Live555的Makefile文件,先来了解live555有分别有哪些模块,编译生成了些什么。

live555简介

live555是最重量级的一个C++流媒体开源项目,其中不仅包括了传输协议(SIP、RTP)、音视频编码器(H.264、MPEG4)等,还包括流媒体服务器的例子,是流媒体项目的首选,里面的传输模块是非常值得视频会议开发作为参考的。

下载live555

下载源代码:http://www.live555.com/liveMedia/public/选择live555-x.tar.gz下载。

live的编译

生成Makefile

解压完源代码,我们可以并没看到源代码下有Makefile文件吧,这是因为live555是可多种平台编译的,所以编译前肯定要根据平台不同做不不同的配置吧,我们先找找配置文件。可以看到根目录下很多config.xxx文件,打开一看也确实像是配置文件,还有makefile.head、makefile.tail、genMakefile文件不妨都打开来看一看.

打开genMakefile


1.#!/bin/sh
2.
3.usage() {
4. echo "Usage: $0 <os-platform>"
5. exit 1
6.}
7.
8.if [ $# -ne 1 ]
9.then
10. usage $*
11.fi
12.
13.platform=$1
14.subdirs="liveMedia groupsock UsageEnvironment BasicUsageEnvironment testProgs mediaServer proxyServer"
15.
16.for subdir in $subdirs
17.do
18. /bin/rm -f $subdir/Makefile
19. cat $subdir/Makefile.head config.$platform $subdir/Makefile.tail > $subdir/Makefile
20. chmod a-w $subdir/Makefile
21.done
22.
23./bin/rm -f Makefile
24.cat Makefile.head config.$1 Makefile.tail > Makefile
25.chmod a-w Makefile

platform=$1

这是一个shell脚本,可以看到platform = 我们输入的第一个参数,即选择平台。

cat $subdir/Makefile.head config.$platform $subdir/Makefile.tail > $subdir/Makefile

可以看到这个shell脚本会先进入各个子目录把Makefile.head config.$platform Makefile.tail 三个文件合成Makefile文件. 
然后再在根目录合成Makefile文件.这下就清晰了Makefile怎么生成的了。

Make的生成目标

./genMakefile linux制作好Makefile后,打开根目录下的Makefile查找它的生成目标。


1.all:
2. cd $(LIVEMEDIA_DIR) ; $(MAKE)
3. cd $(GROUPSOCK_DIR) ; $(MAKE)
4. cd $(USAGE_ENVIRONMENT_DIR) ; $(MAKE)
5. cd $(BASIC_USAGE_ENVIRONMENT_DIR) ; $(MAKE)
6.
7. cd $(TESTPROGS_DIR) ; $(MAKE)
8. cd $(MEDIA_SERVER_DIR) ; $(MAKE)
9. cd $(PROXY_SERVER_DIR) ; $(MAKE)

我们先看第一个目标目录LiveMedia下的Makefile


1.LIB_SUFFIX = a
2.
3.##### End of variables to change
4.
5.NAME = libliveMedia
6.LIVEMEDIA_LIB = $(NAME).$(LIB_SUFFIX)
7.ALL = $(LIVEMEDIA_LIB)
8.all: $(ALL)
9.
10..$(C).$(OBJ):
11. $(C_COMPILER) -c $(C_FLAGS) $<
12..$(CPP).$(OBJ):
13. $(CPLUSPLUS_COMPILER) -c $(CPLUSPLUS_FLAGS) $<

可以看到该目录编译的目标 是libliveMedia.a 静态库. 
先编译一下,看看是不是这样. 
make 编译live555.


1.root@ubuntu:/OpenSrc/live# find -name "*.a"
2../groupsock/libgroupsock.a
3../liveMedia/libliveMedia.a
4../BasicUsageEnvironment/libBasicUsageEnvironment.a
5../UsageEnvironment/libUsageEnvironment.a

可以看到本次编译共生成了4个静态库,正好是前4个编译的目标.

再看看后面三个目标 
TESTPROG目录下的Makefile是这样子的.


1.MULTICAST_APPS = $(MULTICAST_STREAMER_APPS)
2.UNICAST_APPS = $(UNICAST_STREAMER_APPS)
3.MISC_APPS = testMPEG1or2Splitter$(EXE)
4.
5.ALL = $(MULTICAST_APPS) $(UNICAST_APPS) $(MISC_APPS)
6.all: $(ALL)
7.
8.extra: testGSMStreamer$(EXE)
9.
10..$(C).$(OBJ):
11. $(C_COMPILER) -c $(C_FLAGS) $<
12..$(CPP).$(OBJ):
13. $(CPLUSPLUS_COMPILER) -c $(CPLUSPLUS_FLAGS) $<

根据名字,可以先猜测TestPROG编译的目标应该是一些测试用的应用程序.


1.PROXY_SERVER = live555ProxyServer$(EXE)
2.MEDIA_SERVER = live555MediaServer$(EXE)

同时可以看到另外两个目标也是应用, 这样整个Live默认配置下,编译生成的那些东西就清楚了:4个静态库3个应用

本文至此已经结束了,经过通读Makefile,我们已经知道了live555项目的目录状况.但是这些模块分别是干什么用的呢,我现在也不知道,可以先通过名字猜猜意思吧,下篇文章,将通过使用live555自带的例程和VLC,做一个用rtsp流的实验,敬请关注.

live555学习(一)通读Makefile编译live555的更多相关文章

  1. 开源项目live555学习心得

      推荐:伊朗美女找丈夫比找工作难女人婚前一定要看清三件事 × 登录注册   疯狂少男-IT技术的博客 http://blog.sina.com.cn/crazyboyzhaolei [订阅][手机订 ...

  2. 【VS开发】【Live555-rtsp】在windows 使用vs2008编译live555

    在windows 使用vs2008编译live555 基于 liveMedia的程序,需要通过继承UsageEnvironment抽象类和TaskScheduler抽象类,定义相应的类来处理事件调度, ...

  3. 【Linux学习】 写一个简单的Makefile编译源码获取当前系统时间

    打算学习一下Linux,这两天先看了一下gcc的简单用法以及makefile的写法,今天是周末,天气闷热超市,早晨突然发现住处的冰箱可以用了,于是先出去吃了点东西,然后去超市买了一坨冰棍,老冰棍居多, ...

  4. vs2010编译live555源码

    最近加入了公司的C++视频小组,利用中秋这个假期将研究了一些live555的源码,现在先将如何编译使用vs2010编译live555,整理出来,对以后分析代码有很大帮助. 1.下载live555源码, ...

  5. live555学习经验链接二

    live555学习经验链接二:http://blog.csdn.net/nkmnkm/article/category/1066093/2

  6. live555学习经验链接一

    live555学习经验链接:http://xingyunbaijunwei.blog.163.com/blog/#m=0&t=1&c=fks_084071082087086069082 ...

  7. Windows下编译live555源码

    Windos下编译live555源码 环境 Win7 64位 + VS2012 步骤 1)源码下载并解压 在官网上下载最新live555源码,并对其进行解压. 2)VS下建立工程项目 新建Win32项 ...

  8. (转)live555学习笔记10-h264 RTP传输详解(2)

    参考: 1,live555学习笔记10-h264 RTP传输详解(2) http://blog.csdn.net/niu_gao/article/details/6936108 2,H264 sps ...

  9. C++---初识《通过g++ / makefile 编译和调用动态库so文件》(ubuntu)

    C++---初识<通过g++ / makefile  编译和调用动态库so文件>(ubuntu) ------------------------目录------------------- ...

随机推荐

  1. SQLServer 删除表中的重复数据

    create table Student(        ID varchar(10) not null,        Name varchar(10) not null, ); insert in ...

  2. 027.1 反射技术 Class

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...

  3. Idea2018版本建的项目总是找不到主类

    最近更新idea到2018,总是遇见无法加载到主类,刚开始以为是装的过程有什么搞错了,但重装好几遍都是,换成2017又恢复正常,最后发现聪明的同学找到了个偏门可以解决. 那就是先创建文件夹,然后在创建 ...

  4. 元素视差方向移动jQuery插件-类似github 404页面效果

    原文地址:http://www.xuanfengge.com/shake.html 前言: 视差滚动,大家也许并不陌生.但是对于视差方向移动,你是否有见过效果呢?看官请进来瞧瞧~ demo : 轩枫阁 ...

  5. Arcgis for Js之加载wms服务

    概述:本节讲述Arcgis for Js加载ArcgisServer和GeoServer发布的wms服务. 1.定义resourceInfo var resourceInfo = { extent: ...

  6. docker tomcat 已主机名为日志输出路径

    目的:所有的日志输出到共享存储目录中 方法:将 tomcat 的日志放置到 /data/logs/主机名/  下, 1. 修改tomcat/conf下的logging.properties [root ...

  7. MUST_COMPLETE

    应用: xxx主机: xxx时间: 2018-03-07 04:34:03.887线程: [scheduler-1]级别: ERROR Class: org.springframework.sched ...

  8. 分享一个excel根据文件超链接获取链接文档的最后更新时间

    #获取制定单元格内超链接对应的链接地址Sub geturi() For Each cell In Range("E3:E43") If cell.Hyperlinks.Count ...

  9. 谷歌开源漏洞跟踪工具 Monorail 存在跨站点搜索漏洞

    一名安全研究员表示,在谷歌开源漏洞跟踪工具 Monorail 中找到一个漏洞,可被用于执行跨站点搜索 (XS-Search) 攻击. Monorail 用于检查和 Chromium 相关项目中的问题, ...

  10. C++之new和delete操作符

    在C语言中的动态分配和释放内存的函数是malloc calloc 和 free , 而在C++中要用 new new[] delete delete[] 来申请动态空间和释放空间. 注意:的是new. ...