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

目录
相关文章
|
1天前
|
Ubuntu 编译器 C++
Ubuntu系统下编译OpenCV4.8源码
本文档介绍了在Ubuntu系统下编译和安装OpenCV4.8的简单步骤:首先,通过wget命令下载源码包,然后解压;接着,安装必要的编译器和第三方库支持;最后,在源码目录创建build文件夹,执行cmake和make安装。整个过程包括下载、安装依赖和编译安装三个主要步骤。
15 6
|
1天前
|
Linux 程序员 Shell
【Linux】详解core dump文件的作用以及用法&&ubuntu20.04下无法形成core dump文件的解决办法
【Linux】详解core dump文件的作用以及用法&&ubuntu20.04下无法形成core dump文件的解决办法
|
2天前
|
Ubuntu Android开发
Android Froyo基于32 bit ubuntu 10.10编译问题
Android Froyo基于32 bit ubuntu 10.10编译问题
|
3天前
|
Ubuntu Android开发 数据安全/隐私保护
【Android平板编程】远程Ubuntu服务器Code-Server编程写代码
【Android平板编程】远程Ubuntu服务器Code-Server编程写代码
|
4天前
|
存储 安全 算法
【Linux | C++ 】基于环形队列的多生产者多消费者模型(Linux系统下C++ 代码模拟实现)
【Linux | C++ 】基于环形队列的多生产者多消费者模型(Linux系统下C++ 代码模拟实现)
21 0
|
4天前
|
算法 Linux 数据安全/隐私保护
【Linux | C++ 】生产者消费者模型(Linux系统下C++ 代码模拟实现)
【Linux | C++ 】生产者消费者模型(Linux系统下C++ 代码模拟实现)
11 0
|
4天前
|
Ubuntu
ubuntu下使用ndk编译libevnet
ubuntu下使用ndk编译libevnet
9 1
|
4天前
|
Ubuntu
ubuntu编译rk3588异常
ubuntu编译rk3588异常
11 0
|
6天前
|
Ubuntu 应用服务中间件 nginx
ubuntu编译安装nginx及安装nginx_upstream_check_module模块
以上是编译安装Nginx和安装 `nginx_upstream_check_module`模块的基本步骤。根据你的需求和环境,你可能需要进一步配置Nginx以满足特定的要求。
18 3
|
8天前
|
资源调度 JavaScript Ubuntu
Yarn介绍及快速安装Debian/Ubuntu Linux
现在,你已经成功安装了Yarn,可以在你的JavaScript项目中使用它来管理依赖。
49 3