Linux version 4.15.0,Ubuntu 16.04.12,hi3518ev200开发板,OV9712摄像头,VLC
一、移植
1.直接下载或直接找镜像下低版本后面能少报点错,本人使用live.2019.06.28.tar.gz
wget http://live555.com/liveMedia/public/live.2023.06.20.tar.gz
2.解压
tar -vxf live.2023.06.20.tar.gz
3.进入live555下,复制一份arm版本,备份配置文件
cd /home/lu/linuxjc/nfs/rtsp/live
cp config.armlinux config.myarm
4.添加自己的交叉编译环境和宏-DLOCALE_NOT_USED
vim config.myarm
CROSS_COMPILE?= /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin/arm-hisiv300-linux-
COMPILE_OPTS = $(INCLUDES) -I. -O2 -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -DLOCALE_NOT_USED
5.生成Makefile,每次修改配置文件后都要执行(很多开源库不会给Makefile,会给config,需要自己先生成Makefile)
./genMakefiles myarm
6.编译
make
7.解决报错
找不到openssl的库文件
8.下载openssl,本人使用openssl-1.1.1h.tar.gz
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1s.tar.gz
9.解压
tar -vxf openssl-1.1.1s.tar.gz
10.配置config脚本,--prefix=后添加openssl生成文件的目标目录(创建自己的路径),--cross-compile-prefix=后添加海思交叉编译链
./config no-asm no-async shared --prefix=/home/lu/linuxjc/HI3518EV200/ssl --cross-compile-prefix=/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin/arm-hisiv300-linux-
11.进入Makefile,去掉两个-m64
cd Makefile
12.编译
make -j4
13.查看libssl.so.1.1是否位32位ARM版本
file libssl.so.1.1
14.安装
sudo make install
15.查看是否安装成功
cd /home/lu/linuxjc/HI3518EV200/ssl/lib
file libssl.so.1.1
16.将libcrypto.so和libssl.so链接到海思交叉编译环境的lib库下
sudo cp -R lib* /opt/hisi-linux/x86-arm/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnueabi/lib
17.查看是否链接成功
ls /opt/hisi-linux/x86-arm/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnueabi/lib
18.回到live555目录下继续编译,无报错即成功
make
二、使用
1.将live555和mpp复制到nfs下
2.打开开发板配置ip,挂载nfs
3.进入/mnt/nfs/rtsp/live/mediaServer下,运行./live555MediaServer,可见live555支持.264文件
4.由于海思生成的是.h264文件,所以需要更改海思代码(不熟悉的话,最好不要更改live555的代码),并且更改保存文件的路径
4-1.打开sample_venc.c文件,找到对应函数SAMPLE_COMM_VENC_StartGetStream右键跳转到定义
4-2.跳转到sample_comm_venc.c文件,选中函数SAMPLE_COMM_VENC_StartGetStream继续跳转到定义
4-3.跳转到此处往下翻,找到sprintf更改保存路径/mnt/nfs/rtsp/live/mediaServer/stream_chn
4-4.选中SAMPLE_COMM_VENC_GetFilePostfix,继续跳转到定义
4-5.将.h264更改为.264
5.后台运行live555
./live555MediaServer &
6.查看是否后台运行
ps aux
7.加载摄像头驱动
cd /mnt/nfs/mpp/ko
./load3518e -a -sensor ov9712 -osmem 32 -total 64
8..查看设备是否加载成功,多了设备
ls /dev
9.运行程序
cd /mnt/nfs/mpp/sample/venc
./sample_venc 0
c
10.打开VLC,进行拉流(摄像头运行保存视频到搭建的rtsp服务器下也就是live555,使用VLC输入网络链接进行拉流)
rtsp://192.168.11.123/stream_chn0.264
11.有名管道和共享内存(共享内存很麻烦,需要对c++非常熟悉)
使用有名管道
12.更改海思代码,创建有名管道
13.由于有三个通道(三种分辨率),因此使用通道时需要更改通道数量,防止播放时分辨率来回切换
14.保存编译mpp
cd /home/lu/linuxjc/nfs/rtsp/mpp
make clean
make
15.返回到开发板,运行程序
cd /mnt/nfs/mpp/sample/venc
./sample_venc 0
c
16.打开VLC,将生成的myfifo.264文件填入
rtsp://192.168.11.123/myfifo0.264
17.正常是运行第一次,生成管道文件,VLC一直连接不上;然后不关VLC,删除管道文件,正常退出程序,再次运行程序,VLC就连接成功了。
18.异常情况解决
由于写的管道代码过于简单,存在诸多不稳定性,会导致管道创建失败,程序自动退出等问题,可进行多次尝试(杀死后live555或重启开发板),若还不成功,可等待第二天再次尝试(本人亲测)。当然,也可完善管道代码或求助。
本人成功过程(成功案例不唯一,仅供参考)
18-1.准备好一切后第一次运行,异常退出,查看路径下未生成myfifo.264文件;
18-2.接着第二次运行正常,生成了myfifo.264文件,打开VLC,挂载路径,毫无反应。
18-3.按两次回车正常退出,删除生成的myfifo.264文件(只能有一个管道文件),VLC不退出,再次第三次运行,生成了myfifo.264文件,VLC成功显示实时播放,但显示如下。