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最新代码

目录
相关文章
|
2月前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
163 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
26天前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
2月前
|
Ubuntu 编译器 计算机视觉
Ubuntu系统编译OpenCV4.8源码
【10月更文挑战第17天】只要三步即可搞定,第一步是下载指定版本的源码包;第二步是安装OpenCV4.8编译需要的编译器与第三方库支持;第三步就是编译OpenCV源码包生成安装文件并安装。
|
2月前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
2月前
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
278 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
3月前
|
Java Linux Python
Linux环境下 代码java调用python出错
Linux环境下 代码java调用python出错
59 3
|
3月前
|
监控 Ubuntu Python
代码实现Ubuntu系统参数监控的方法
通过这种方式,你可以方便地对Ubuntu系统的关键参数进行实时监控,对系统性能分析和资源管理具有重要意义。
35 0
|
3月前
|
Linux Shell Python
9-7|salt代码在linux机子那个目录
9-7|salt代码在linux机子那个目录
|
3月前
|
Linux 开发者 Python
从Windows到Linux,Python系统调用如何让代码飞翔🚀
【9月更文挑战第10天】在编程领域,跨越不同操作系统的障碍是常见挑战。Python凭借其“编写一次,到处运行”的理念,显著简化了这一过程。通过os、subprocess、shutil等标准库模块,Python提供了统一的接口,自动处理底层差异,使代码在Windows和Linux上无缝运行。例如,`open`函数在不同系统中以相同方式操作文件,而`subprocess`模块则能一致地执行系统命令。此外,第三方库如psutil进一步增强了跨平台能力,使开发者能够轻松编写高效且易维护的代码。借助Python的强大系统调用功能,跨平台编程变得简单高效。
47 0
|
API C++ Windows
【Live555】Live555 Windows下使用VS2017编译教程
【Live555】Live555 Windows下使用VS2017编译教程
【Live555】Live555 Windows下使用VS2017编译教程