Linux(Ubuntu)下编译 Live555最新代码

简介: Linux(Ubuntu)下编译 Live555最新代码

一、编译环境及准备材料

1、编译环境:ubuntu 14.04.1

$ uname -a
Linux ubuntu 4.4.0-128-generic #154~14.04.1-Ubuntu SMP Fri May 25 14:58:51 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

2、live555库

live555官网源码下载路径

在官网下载源码时,没有提供旧版本的源码,我下载的是最新的发布版 live.2022.01.06.tar.gz

3、openssl 源码

openssl 官网源码下载

openssl有提供旧版本源码下载,我这里下载的是 openssl-1.1.0l.tar.gz


二、编译及问题分析

1、解压代码

下载完成后,将代码压缩包拷贝到 Ubuntu 系统的目录下,用下面的命令解压,解压后在当前目录会生成一个 live 的文件夹。

tar zxvf live.2022.01.06.tar.gz 

2、生成Makefile并编译,报错

进入live目录后,没有Makefile文件,需要自己修改config文件来生成Makefile,我们这里直接使用config.linux来生成Makefile,然后直接make,操作过程如下。

$ cd live
$ ./genMakefiles linux
$ make
...
...
c++ -c -Iinclude -I../UsageEnvironment/include -I../groupsock/include -I/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1   TLSState.cpp
TLSState.cpp: In member function ‘Boolean ServerTLSState::setup(int)’:
TLSState.cpp:209:38: error: ‘SSL_CTX_set_ecdh_auto’ was not declared in this scope
     if (SSL_CTX_set_ecdh_auto(fCtx, 1) != 1) break;
                                      ^
make[1]: *** [TLSState.o] Error 1
make[1]: Leaving directory `/home/samba/live555/live.2022.01.06/live/liveMedia'
make: *** [all] Error 2

3、问题分析

编译的时候直接报错,SSL_CTX_set_ecdh_auto 没有声明,从这个函数的命名来看,应该是openssl 的头文件没包含进来,但是看了ubuntu系统是安装了 openssl 的,所以可能是系统里的openssl太旧了。

之后又从网上找了一个 live555 旧版本(2019.03.06)的源码来编译,同样的步骤,可以编译通过。

然后尝试着使用这个命令重新安装 ubuntu 的 openssl,未果

sudo apt-get install openssl

4、问题解决

最后,从 openssl 官网下载新的 openssl 源码,重新编译成库和头文件,再修改live555的config文件,使编译时链接新的 openssl 头文件和库,最终编译通过。


三、编译 openssl 库和头文件

openssl 官网下载到源码后,在ubuntu系统配置、编译,并将编译结果安装到指定目录,过程如下:

$ mkdir ssl_result_ubuntu
$ tar zxvf openssl-1.1.0l.tar.gz 
$ cd openssl-1.1.0l/
$ ./config no-asm shared no-async --prefix=/home/samba/live555/ssl_result_ubuntu
$ make
$ make install

主要是用 prefix 指定安装的路径,

关于 no-asm shared no-async 的注释,详见 openssl编译参数选项

安装后,ssl_result_ubuntu有这些内容

$ ls ../ssl_result_ubuntu/ 
bin  include  lib  share  ssl

编译 openssl 遇到问题,可以看这 openssl 的编译和交叉编译


四、使用刚安装的openssl,重新编译 live555

1、修改 config.linux 的内容

回到live555的源码目录 live 后

将头文件路径由 /usr/local/include 修改为  /home/samba/live555/ssl_result_ubuntu/include

在 LINK_OPTS 上面添加一句 LDFLAGS= -L /home/samba/live555/ssl_result_ubuntu/lib

修改后如下:

COMPILE_OPTS =          $(INCLUDES) -I/home/samba/live555/ssl_result_ubuntu/include -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
C =                     c
C_COMPILER =            cc
C_FLAGS =               $(COMPILE_OPTS) $(CPPFLAGS) $(CFLAGS)
CPP =                   cpp
CPLUSPLUS_COMPILER =    c++
CPLUSPLUS_FLAGS =       $(COMPILE_OPTS) -Wall -DBSD=1 $(CPPFLAGS) $(CXXFLAGS)
OBJ =                   o
LINK =                  c++ -o
LDFLAGS=                -L /home/samba/live555/ssl_result_ubuntu/lib
LINK_OPTS =             -L. $(LDFLAGS)
CONSOLE_LINK_OPTS =     $(LINK_OPTS)
LIBRARY_LINK =          ar cr 
LIBRARY_LINK_OPTS =
LIB_SUFFIX =                    a
LIBS_FOR_CONSOLE_APPLICATION = -lssl -lcrypto
LIBS_FOR_GUI_APPLICATION =
EXE =

2、重新生成Makefile,编译通过

$ ./genMakefiles linux
$ make clean 
$ make

五、运行 live555MediaServer

1、运行 live555MediaServer

编译完成后,从live555官网下载一个264文件(test.264)放到编译完成的 live555 的 mediaServer 目录下,添加动态库加载路径 LD_LIBRARY_PATH,运行 live555MediaServer,过程如下:

$ cp /home/samba/test.264 ./mediaServer/
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/samba/live555/ssl_result_ubuntu/lib
$ cd mediaServer/
$ ./live555MediaServer 
LIVE555 Media Server
        version 1.10 (LIVE555 Streaming Media library version 2022.01.06).
Play streams from this server using the URL
        rtsp://192.168.2.100:8554/<filename>
where <filename> is a file present in the current directory.
Each file's type is inferred from its name suffix:
        ".264" => a H.264 Video Elementary Stream file
        ".265" => a H.265 Video Elementary Stream file
        ".aac" => an AAC Audio (ADTS format) file
        ".ac3" => an AC-3 Audio file
        ".amr" => an AMR Audio file
        ".dv" => a DV Video file
        ".m4e" => a MPEG-4 Video Elementary Stream file
        ".mkv" => a Matroska audio+video+(optional)subtitles file
        ".mp3" => a MPEG-1 or 2 Audio file
        ".mpg" => a MPEG-1 or 2 Program Stream (audio+video) file
        ".ogg" or ".ogv" or ".opus" => an Ogg audio and/or video file
        ".ts" => a MPEG Transport Stream file
                (a ".tsx" index file - if present - provides server 'trick play' support)
        ".vob" => a VOB (MPEG-2 video with AC-3 audio) file
        ".wav" => a WAV Audio file
        ".webm" => a WebM audio(Vorbis)+video(VP8) file
See http://www.live555.com/mediaServer/ for additional documentation.
(We use port 8000 for optional RTSP-over-HTTP tunneling).)

注意,LD_LIBRARY_PATH 添加的路径必须是刚才安装 openssl 的目录的lib。

运行live555MediaServer时有打印所有支持的格式,只要将对应格式的合法文件复制到运行 live555MediaServer 的目录,都可以通过vlc来访问。

2、使用 vlc 来打开rtsp流

在vlc菜单“媒体”->"打开网络串流"->"打开媒体",输入你对应的地址(运行 live555MediaServer  打印的ip和端口和 live555MediaServer  目录下对应的媒体文件)就可以访问到流,我这里的流地址是:rtsp://192.168.2.100:8554/test.264

2018122814580746.png

到此,文章结束,如果对你有帮助的话,点赞支持一下^_^

需要交叉编译的看这个文章

linux(arm、hi3531A)交叉编译live555最新代码

目录
相关文章
|
5月前
|
Ubuntu Linux UED
Ubuntu和Debian系统与Hat Linux系列的使用比较
所以,如果你想搞一个家用服务器,或者是个人使用,喜欢新鲜事物,那Ubuntu可能是你的最好选择。如果你需要一个在商业环境中经受住考验的系统,那Fedora或CentOS可能更符合你的口味。不过记住,CentOS现在是CentOS Stream,中途换马了,所以如果你是稳定性的极端追求者,可能得考虑一下这一变化。而Debian,则适合那些对稳定性需求极高,不太追求软件版本新旧的用户。
188 26
|
5月前
|
Ubuntu 搜索推荐 Linux
Ubuntu/Debian Hat系Linux的便捷操作指南
总的来说,虽然Ubuntu/Debian和Red Hat系列在操作方法上有所不同,但基本概念类似。掌握了包管理和服务管理,可以应对大多数常见的系统管理任务。同时,这两个系统都有丰富的在线资源可以查询,不管你在任务中遇到什么困难,搜索引擎都能帮你找到答案。这些基本技能能让你在Linux的世界里更加自如。
181 26
|
5月前
|
Ubuntu Linux Shell
Linux环境下VSCode快速安装终极指南:debian/ubuntu/linux平台通用
以上就是在Linux环境下安装VSCode的终极指南,抛开繁复的专业词汇,以平易近人的文字、形象生动的比喻让你轻松学会这一过程。别忘了,你的小伙伴VSCode已经在应用菜单里等你了!
1496 23
|
6月前
|
Ubuntu 搜索推荐 Linux
详解Ubuntu的strings与grep命令:Linux开发的实用工具。
这就是Ubuntu中的strings和grep命令,透明且强大。我希望你喜欢这个神奇的世界,并能在你的Linux开发旅程上,通过它们找到你的方向。记住,你的电脑是你的舞台,在上面你可以做任何你想做的事,只要你敢于尝试。
375 32
|
7月前
|
Ubuntu Linux 编译器
在Ubuntu Linux系统下如何搭建并安装EDK2
以上就是在Ubuntu Linux系统下搭建并安装EDK2的过程。这个过程可能会有些复杂,但只要按照步骤一步步来,应该不会有太大问题。如果在过程中遇到任何问题,都可以在网上找到相应的解决方案。希望这个指南能对你有所帮助!
303 17
|
8月前
|
Ubuntu 安全 Linux
Linux错误排查:解决Ubuntu 20.4执行sudo apt-get update时出现的libnettle.so.6错误。
很有可能在你得到解决方案时,你也学到了不少Linux修复技巧。祝你处理计算机问题时顺利如麻!永远记得,各种问题总是像老鼠一样从意想不到的地方冒出来。但记住,不管它们跑到哪里,最终都逃不过你的捕鼠器。盖起你的计算机,拾起你的代码,大步向前!
240 28
|
8月前
|
Ubuntu 安全 Linux
Linux错误排查:解决Ubuntu 20.4执行sudo apt-get update时出现的libnettle.so.6错误。
很有可能在你得到解决方案时,你也学到了不少Linux修复技巧。祝你处理计算机问题时顺利如麻!永远记得,各种问题总是像老鼠一样从意想不到的地方冒出来。但记住,不管它们跑到哪里,最终都逃不过你的捕鼠器。盖起你的计算机,拾起你的代码,大步向前!
237 18
|
9月前
|
Ubuntu Linux
Ubuntu Linux
背景 Ubuntu起源于南非,其名称“Ubuntu”来源于非洲南部祖鲁语或豪萨语,意为“人性”、“我的存在是因为大家的存在”,这体现了非洲传统的一种价值观。Ubuntu由南非计算机科学家马克·沙特尔沃斯(Mark Shuttleworth)创办,他创立了Canonical公司来推动Ubuntu的发展。Ubuntu的第一个版本于2004年发布,至今已经走过了近20个年头,成为了Linux发行版中的佼佼者。
282 4
Ubuntu Linux
|
9月前
|
缓存 Ubuntu Linux
Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget
通过本文,我们详细了解了 `yum`、`rpm`、`apt-get`和 `wget`的区别、常用命令以及在CentOS和Ubuntu中安装 `wget`的方法。`yum`和 `apt-get`是高层次的包管理器,分别用于RPM系和Debian系发行版,能够自动解决依赖问题;而 `rpm`是低层次的包管理工具,适合处理单个包;`wget`则是一个功能强大的下载工具,适用于各种下载任务。在实际使用中,根据系统类型和任务需求选择合适的工具,可以大大提高工作效率和系统管理的便利性。
1042 25
|
10月前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
565 15

热门文章

最新文章