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

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

一、编译环境及准备材料

1、编译环境:

1.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

1.2、交叉编译器

$ arm-hisiv100nptl-linux-gcc -v
Using built-in specs.
Target: arm-hisiv100-linux-uclibcgnueabi
Configured with: ../gcc-4.4-2010q1/configure --host=i486-linux-gnu --build=i486-linux-gnu --target=arm-hisiv100-linux-uclibcgnueabi 
--prefix=/home/sying/uclibc_h3/hisiv100_finalnptl_src/hisiv100_src/install/arm-hisiv100-linux 
...
...
Thread model: posix
gcc version 4.4.1 (Hisilicon_v100(gcc4.4-290+uclibc_0.9.32.1+eabi+linuxpthread)) 

2、openssl 源码

openssl 官网源码下载

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

3、live555库

live555官网源码下载路径

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


二、编译openssl

1、创建目录用来安装openssl,解压openssl源码包 openssl-1.1.0l.tar.gz,并进入源码目录

$ mkdir ssl_result
$ tar zxvf openssl-1.1.0l.tar.gz
$ cd openssl-1.1.0l

2、指定安装目录、交叉编译器,命令如下

./config no-asm shared no-async --prefix=/home/samba/live555/ssl_result  --cross-compile-prefix=arm-hisiv100nptl-linux-

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

3、修改Make file,删除 -m64,可以在Makefile去搜索删除,共两处,也可以使用以下命令删除

sed -i 's/-m64//' Makefile

4、编译、安装,命令如下

make && make install

完成后,在刚才创建的 ssl_result 目录下有如下文件,编译live555时需要用到

$ ls ../ssl_result
bin  include  lib  share  ssl

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


三、编译live555

1、解压代码

将live555源码压缩包复制到前面创建的 ssl_result同一目录下,解压缩后, 进入live 文件夹。

$ tar zxvf live.2022.01.06.tar.gz 
$ cd live

2、生成Makefile并编译,报错

2.1、利用config.armlinux文件来生成Makefile,先复制config.armlinux为config.3531A

cp config.armlinux config.3531A

原来的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 =

修改交叉编译器、指定openssl的头文件和库文件后,config.3531A内容如下:

CROSS_COMPILE?=   arm-hisiv100nptl-linux-
COMPILE_OPTS =    $(INCLUDES) -I/home/samba/live555/ssl_result/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
LDFLAGS=          -L /home/samba/live555/ssl_result/lib
LINK_OPTS =       $(LDFLAGS)
CONSOLE_LINK_OPTS =  $(LINK_OPTS)
LIBRARY_LINK =    $(CROSS_COMPILE)ar cr 
LIBRARY_LINK_OPTS =
LIB_SUFFIX =         a
LIBS_FOR_CONSOLE_APPLICATION = -lssl -lcrypto
LIBS_FOR_GUI_APPLICATION =
EXE =

2.2、执行命令生成Makefile

./genMakefiles linux

2.3、编译后,报如下错误:

$ ./genMakefiles linux
$ make
...
...
arm-hisiv100nptl-linux-g++ -otestMP3Streamer -L /home/samba/live555/ssl_result/lib testMP3Streamer.o announceURL.o ../liveMedia/libliveMedia.a ../groupsock/libgroupsock.a ../BasicUsageEnvironment/libBasicUsageEnvironment.a ../UsageEnvironment/libUsageEnvironment.a -lssl -lcrypto
/home/samba/live555/ssl_result/lib/libcrypto.so: warning: gethostbyname is obsolescent, use getnameinfo() instead.
../liveMedia/libliveMedia.a(Locale.o): In function `Locale::~Locale()':
Locale.cpp:(.text+0x20): undefined reference to `uselocale'
Locale.cpp:(.text+0x28): undefined reference to `freelocale'
../liveMedia/libliveMedia.a(Locale.o): In function `Locale::~Locale()':
Locale.cpp:(.text+0x58): undefined reference to `uselocale'
Locale.cpp:(.text+0x60): undefined reference to `freelocale'
../liveMedia/libliveMedia.a(Locale.o): In function `Locale::~Locale()':
Locale.cpp:(.text+0x90): undefined reference to `uselocale'
Locale.cpp:(.text+0x98): undefined reference to `freelocale'
../liveMedia/libliveMedia.a(Locale.o): In function `Locale::Locale(char const*, LocaleCategory)':
Locale.cpp:(.text+0xd0): undefined reference to `newlocale'
Locale.cpp:(.text+0xd8): undefined reference to `uselocale'
../liveMedia/libliveMedia.a(Locale.o): In function `Locale::Locale(char const*, LocaleCategory)':
Locale.cpp:(.text+0x10c): undefined reference to `newlocale'
Locale.cpp:(.text+0x114): undefined reference to `uselocale'
collect2: ld returned 1 exit status
make[1]: *** [testMP3Streamer] Error 1
make[1]: Leaving directory `/home/samba/live555/live/testProgs'
make: *** [all] Error 2

3、问题分析

       查看错误,uselocale 等函数没有定义,使用grep命令搜索了 openssl 源码目录和 live555源码目录,都没有对 uselocale 函数的定义,所以这个函数可能自其他的库,也可能属于系统函数,包含在编译工具里,而这个交叉工具链没有该函数。

       在源码里查看调用这个函数的类,在定义该类的头文件 Locale.hh 中发现有下面这个注释,意思是:如果您使用的系统(无论出于何种原因)没有“setlocale()”或“newlocale()”函数,则将“-DLOCALE_NOT_USED”添加到“config.*”文件中。

// If you're on a system that (for whatever reason) doesn't have either the "setlocale()" or the "newlocale()" function, then
// add "-DLOCALE_NOT_USED" to your "config.*" file.

4、问题解决

根据Locale.hh的要求,我们在 config.3531A 中添加 “-DLOCALE_NOT_USED”,修改后如下:

CROSS_COMPILE?=   arm-hisiv100nptl-linux-
COMPILE_OPTS =    $(INCLUDES) -I/home/samba/live555/ssl_result/include -I. -O2 -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -DLOCALE_NOT_USED
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
LDFLAGS=          -L /home/samba/live555/ssl_result/lib
LINK_OPTS =       $(LDFLAGS)
CONSOLE_LINK_OPTS =  $(LINK_OPTS)
LIBRARY_LINK =    $(CROSS_COMPILE)ar cr 
LIBRARY_LINK_OPTS =
LIB_SUFFIX =         a
LIBS_FOR_CONSOLE_APPLICATION = -lssl -lcrypto
LIBS_FOR_GUI_APPLICATION =
EXE =

再次生成Makefile,编译通过

$ ./genMakefiles 3531A
$ make clean
$ make

四、运行 live555MediaServer

1、运行 live555MediaServer

编译完成后,从live555官网下载一个264文件(test.264),并将 test.264、ssl_result、mediaServer目录下的 live555MediaServer 三个东西一起复制到arm板子上

cp /home/samba/test.264 ./mediaServer/live555MediaServer ../ssl_result /nfsroot/ -rf

然后,进入板子操作

添加动态库加载路径 LD_LIBRARY_PATH,运行 live555MediaServer,过程如下:

/nfsroot # export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/nfsroot/ssl_result/lib
/nfsroot # ./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 80 for optional RTSP-over-HTTP tunneling).)

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

2、使用 vlc 来打开rtsp流

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

2018122814580746.png

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

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

目录
相关文章
|
3月前
|
Ubuntu Linux
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
819 3
|
5月前
|
Linux
Linux交叉编译+粤嵌LCD实现三色图
Linux交叉编译+粤嵌LCD实现三色图
|
3月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
|
3月前
|
Linux 网络安全 开发工具
内核实验(二):自定义一个迷你Linux ARM系统,基于Kernel v5.15.102, Busybox,Qemu
本文介绍了如何基于Linux Kernel 5.15.102版本和BusyBox创建一个自定义的迷你Linux ARM系统,并使用QEMU进行启动和调试,包括内核和BusyBox的编译配置、根文件系统的制作以及运行QEMU时的命令和参数设置。
274 0
内核实验(二):自定义一个迷你Linux ARM系统,基于Kernel v5.15.102, Busybox,Qemu
|
3月前
|
编解码 安全 Linux
基于arm64架构国产操作系统|Linux下的RTMP|RTSP低延时直播播放器开发探究
这段内容讲述了国产操作系统背景下,大牛直播SDK针对国产操作系统与Linux平台发布的RTMP/RTSP直播播放SDK。此SDK支持arm64架构,基于X协议输出视频,采用PulseAudio和Alsa Lib处理音频,具备实时静音、快照、缓冲时间设定等功能,并支持H.265编码格式。此外,提供了示例代码展示如何实现多实例播放器的创建与管理,包括窗口布局调整、事件监听、视频分辨率变化和实时快照回调等关键功能。这一技术实现有助于提高直播服务的稳定性和响应速度,适应国产操作系统在各行业中的应用需求。
108 3
|
6月前
|
安全 Linux Android开发
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
该文介绍了如何在Linux服务器上交叉编译Android的FFmpeg库以支持HTTPS视频播放。首先,从GitHub下载openssl源码,解压后通过编译脚本`build_openssl.sh`生成64位静态库。接着,更新环境变量加载openssl,并编辑FFmpeg配置脚本`config_ffmpeg_openssl.sh`启用openssl支持。然后,编译安装FFmpeg。最后,将编译好的库文件导入App工程的相应目录,修改视频链接为HTTPS,App即可播放HTTPS在线视频。
109 3
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
|
5月前
|
Rust Linux iOS开发
Rust 交叉编译 macOS 为 Linux 和 Windows
Rust 交叉编译 macOS 为 Linux 和 Windows
246 0
|
5月前
|
Linux 编译器 C语言
编译Linux内核:基础、重要性和交叉编译方法
Linux内核作为操作系统的心脏,负责管理计算机的硬件资源,同时也是运行所有其他程序的基础。理解如何编译Linux内核对于系统管理员、开发者乃至高级用户来说都是一项极其宝贵的技能。本文将介绍编译Linux内核的基本知识、编译的重要性、具体步骤以及交叉编译的概念。
421 0
|
6月前
|
存储 Ubuntu Linux
xenomai3+linux构建linux实时操作系统-基于X86_64和arm
Xenomai是一个实时性解决方案,通过在Linux上添加实时内核Cobalt来增强实时性能。它有三个主要部分:libcobalt(用户空间实时库)、Cobalt(内核空间实时内核)和硬件架构特定层(ipipe-core或dovetail)。ipipe-core适用于Linux 5.4以下版本,而dovetail用于5.4及以上版本。本文介绍了在X86 Ubuntu环境下,如何编译Xenomai内核,搭建应用环境,包括配置、编译、安装和实时性测试。对于其他硬件架构,如ARM和ARM64,步骤类似。文章还提到了Xenomai与Linux内核版本的兼容性和实时性测试结果。
455 0
xenomai3+linux构建linux实时操作系统-基于X86_64和arm
|
9天前
|
缓存 监控 Linux