【live555】live555实战-编译与使用
1.live555交叉编译
代码下载
github速度较慢,所以选gitee的镜像下载
git clone https://gitee.com/mirrors/live555.git
根据README.md的说明,如果想要编译linux环境下的库文件和可执行程序
./genMakefiles linux
make -j4
实际执行的是config.linux的配置文件,同理如果想编译其他平台可以执行对应的配置文件后缀名
基于aarch64架构的交叉编译
1.修改配置文件:需要以config.armlinux配置文件以基础来修改
2.适配C++库版本:
如果嵌入式系统的C++库版本低于C++20,您需要在config.armlinux文件的COMPILE_OPTS项中追加-DNO_STD_LIB。这一步是必要的,以避免因版本不兼容导致的语法报错。
3.处理openssl库依赖:
如果嵌入式系统中没有安装openssl库,您需要在config.armlinux文件的COMPILE_OPTS项中追加-DNO_OPENSSL=1。这样做可以防止因缺少openssl库而导致的编译错误。
4.BasicTaskScheduler.cpp中还有一个变量的定义要修改一下

BasicTaskScheduler0.cpp中



BasicUsageEnvironment0.hh中

原config.armlinux:
CROSS_COMPILE?= arm-elf-
COMPILE_OPTS = $(INCLUDES) -I/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
C = c
C_COMPILER = $(CROSS_COMPILE)gcc
C_FLAGS = $(COMPILE_OPTS)
CPP = cpp
CPLUSPLUS_COMPILER = $(CROSS_COMPILE)g++
CPLUSPLUS_FLAGS = $(COMPILE_OPTS) -Wall -DBSD=1
OBJ = o
LINK = $(CROSS_COMPILE)g++ -o
LINK_OPTS =
CONSOLE_LINK_OPTS = $(LINK_OPTS)
LIBRARY_LINK = $(CROSS_COMPILE)ar cr
LIBRARY_LINK_OPTS = $(LINK_OPTS)
LIB_SUFFIX = a
LIBS_FOR_CONSOLE_APPLICATION = -lssl -lcrypto
LIBS_FOR_GUI_APPLICATION =
EXE =
修改后
CROSS_COMPILE?= arm-elf-
COMPILE_OPTS = $(INCLUDES) -I/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -DNO_STD_LIB -DNO_OPENSSL=1
C = c
C_COMPILER = $(CROSS_COMPILE)gcc
C_FLAGS = $(COMPILE_OPTS)
CPP = cpp
CPLUSPLUS_COMPILER = $(CROSS_COMPILE)g++
CPLUSPLUS_FLAGS = $(COMPILE_OPTS) -Wall -DBSD=1
OBJ = o
LINK = $(CROSS_COMPILE)g++ -o
LINK_OPTS =
CONSOLE_LINK_OPTS = $(LINK_OPTS)
LIBRARY_LINK = $(CROSS_COMPILE)ar cr
LIBRARY_LINK_OPTS = $(LINK_OPTS)
LIB_SUFFIX = a
LIBS_FOR_CONSOLE_APPLICATION =
LIBS_FOR_GUI_APPLICATION =
EXE =
在live555目录下创建一个build.sh的脚本
touch build.sh
chmod 777 build.sh
添加脚本内容如下:
#!/bin/bash
LIVE555_DIR=`pwd`
cd $LIVE555_DIR
INSTALL_DIR=$LIVE555_DIR/output
mkdir -p $INSTALL_DIR
#编译成静态库
export LDFLAGS="-static"
#声明交叉编译器的路径
#export PATH=/opt/arm-gcc/bin/:$PATH
./genMakefiles armlinux
make -j$(nproc) CROSS_COMPILE=aarch64-linux-gnu-
make install PREFIX=$INSTALL_DIR CROSS_COMPILE=aarch64-linux-gnu-
执行脚本就会开始编译和安装,如无报错,表示编译安装成功,工程目录下会出现一个一个output的目录
zx@zx:~/mysoft/live555$ ls ./output/
bin include lib
查看bin目录下的文件是否为aarch64架构
zx@zx:~/mysoft/live555$ file ./output/bin/testH264VideoStreamer
./output/bin/testH264VideoStreamer: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=37a8895d70362122ac13a6f5c141ad57d1bfb4e4, for GNU/Linux 3.7.0, not stripped
zx@zx:~/mysoft/live555$
交叉编译安装成功,下一步就是将可执行文件推入目标板中运行测试。
2.live555MediaServer实测
将交叉编译出来的live555MediaServer推到树莓派中,在其同级目录下要放一个test.264的视频流文件作为视频源
我所使用的test.h264文件是在树莓派上通过v4l2取流编码后输出保存到文件中的,关于v4l2取流到x264编码最后输出到文件中保存,可以参考【树莓派】【v4l2】在树莓派环境下取流-编码-存储_raspberry v4l2-CSDN博客
在执行live555测试前,先检查一下h264文件是否是正确的AnnexB格式(带起始码 0x00000001),以下就是正确的格式-
pi@raspberrypi:~/app $ hexdump -C test.264 | head
00000000 00 00 00 01 67 42 c0 28 a6 80 50 05 ba 10 00 00 |....gB.(..P.....|
00000010 03 00 10 00 00 03 03 c8 f1 83 2a 00 00 00 01 68 |..........*....h|
00000020 ce 3c 80 00 00 01 06 05 ff ff 5e dc 45 e9 bd e6 |.<........^.E...|
00000030 d9 48 b7 96 2c d8 20 d9 23 ee ef 78 32 36 34 20 |.H..,. .#..x264 |
00000040 2d 20 63 6f 72 65 20 31 36 34 20 72 33 30 39 35 |- core 164 r3095|
00000050 20 62 61 65 65 34 30 30 20 2d 20 48 2e 32 36 34 | baee400 - H.264|
00000060 2f 4d 50 45 47 2d 34 20 41 56 43 20 63 6f 64 65 |/MPEG-4 AVC code|
00000070 63 20 2d 20 43 6f 70 79 6c 65 66 74 20 32 30 30 |c - Copyleft 200|
00000080 33 2d 32 30 32 32 20 2d 20 68 74 74 70 3a 2f 2f |3-2022 - http://|
00000090 77 77 77 2e 76 69 64 65 6f 6c 61 6e 2e 6f 72 67 |www.videolan.org|
然后执行树莓派端执行./live555MediaServer

PC端使用vlc拉流,串流地址填rtsp://192.168.3.17:8554/<filename>,我使用的测试文件名是test.h264,那么串流地址就是rtsp://192.168.3.17:8554/test.264


浙公网安备 33010602011771号