一、编译环境及准备材料
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
到此,文章结束,如果对你有帮助的话,点赞支持一下^_^
需要交叉编译的看这个文章