NVIDIA jetson nano搭建Ubuntu ARM+ROS+EasyDarwin+FFmpeg+x264+RTSP推流服务器

公司任务

基于ROS NVIDIA jetson nano搭建easydarwin+ffmpeg+rtsp推流服务器

根据结果,需要准备(版本随意,但是不能是pre版本):

1
2
3
4
5
x264
ffmpeg
node
easydarwin
go

编译流程为:Ubuntu1604交叉编译全志T7开发板ARM版Easydarwin

编译结果:ros-arm64-ubuntu18.04编译结果本站下载

前提

公司的智能车是小R智能科技的,系统为Ubuntu 18.04 bionic,ros系统为ros melodic desktop搭配NVIDIA jetson nano显卡,安装的系统包为jetson-nano-sd-r32.1-2019-03-18(https://developer.nvidia.com/embedded/downloads

准备

x264 https://www.videolan.org/developers/x264.html

ffmpeg http://ffmpeg.org/download.html

node https://nodejs.org/zh-cn/download/current/

go https://golang.google.cn/dl/

easydarwin https://github.com/easydarwin/easydarwin

编译安装

x264

下载源代码,解压,然后:

1
2
3
./configure
make -jn
sudo make install

会默认安装到/usr/local/lib

ffmpeg

下载源代码,解压,编译:

1
2
3
./configure --enable-shared --enable-x264 --enable-gpl
make -jn
sudo make install

会默认安装到/usr/local/文件夹中。

刚开始我只有–enable-shared 最后运行时出现错误:“ffmpeg [h264_v4lm2m @ 0x556643f480] Could not find a valid device”,就是因为没有添加–enable-x264导致的,添加x264需要添加–enable-gpl。

go

下载arm版linux包(https://dl.google.com/go/go1.13.10.linux-arm64.tar.gz),并且解压到/usr/local/文件夹下,设置环境变量(.bashrc或者.zshrc):

1
2
3
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$GOROOT/bin:$GOPATH:/bin:$PATH

GOROOT是go官方软件的位置,GOPATH是go用户的自定义位置(默认用户软件安装位置)

安装软件包:

1
2
3
4
5
go get -u -v github.com/rainycape/dl
go get -u -v github.com/kardianos/govendor
go get -u -v github.com/penggy/gobuild
go get -u -v github.com/Bowery/prompt
go get -u -v github.com/common-nighthawk/go-figure

会自动安装到$GOPATH目录下,并且自动编译。

node

从官方网站下载arm版的node,版本随意推荐最新的。

然后解压到/usr/local/文件夹下就可以了,同时设置环境变量/usr/local/bin/usr/local/include//usr/local/lib等等。

注意,不能是pre版本,否则后面会出错。

安装软件包

1
2
3
4
npm i -g @penggy/pack
npm i -g cross-dev --save-dev
npm i -g rimraf
npm i -g apidoc

-g表示安装到系统目录,需要sudo。默认安装到当前目录。

easydarwin

下载(安装官方说明):

1
2
3
4
5
cd $GOPATH/src/github.com
mkdir EasyDarwin
cd EasyDarwin
git clone https://github.com/EasyDarwin/EasyDarwin.git --depth=1 EasyDarwin
cd EasyDarwin

先到web_src安装依赖,然后编译前端:

1
2
3
4
cd web_src
npm i
cd ..
npm run build:www

然后编译软件:

1
npm run build:lin

打包:

1
2
npm run build:lin
pack tar

测试

解压打包后的可执行文件,然后:

1
sudo sh start.sh

第一次执行需要将服务复制到系统服务目录,需要sudo权限。

启动服务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ sudo sh start.sh
[sudo] password for xrrobot:
[EasyDarwin] 2020/04/30 11:48:22 main.go:186: git commit code:8637f73
[EasyDarwin] 2020/04/30 11:48:22 main.go:187: build date:2020-04-30 10:10:08
_____ ____ _
| ____| __ _ ___ _ _ | _ \ __ _ _ __ __ __ (_) _ __
| _| / _` | / __| | | | | | | | | / _` | | '__| \ \ /\ / / | | | '_ \
| |___ | (_| | \__ \ | |_| | | |_| | | (_| | | | \ V V / | | | | | |
|_____| \__,_| |___/ \__, | |____/ \__,_| |_| \_/\_/ |_| |_| |_|
|___/
[EasyDarwin] 2020/04/30 11:48:22 main.go:214: EasyDarwin_Service install ...
[EasyDarwin] 2020/04/30 11:48:22 main.go:216: Failed to install EasyDarwin_Service: Init already exists: /etc/systemd/system/EasyDarwin_Service.service
[EasyDarwin] 2020/04/30 11:48:22 utils.go:234: Press any to exit
[EasyDarwin] 2020/04/30 11:48:27 main.go:186: git commit code:8637f73
[EasyDarwin] 2020/04/30 11:48:27 main.go:187: build date:2020-04-30 10:10:08
_____ ____ _
| ____| __ _ ___ _ _ | _ \ __ _ _ __ __ __ (_) _ __
| _| / _` | / __| | | | | | | | | / _` | | '__| \ \ /\ / / | | | '_ \
| |___ | (_| | \__ \ | |_| | | |_| | | (_| | | | \ V V / | | | | | |
|_____| \__,_| |___/ \__, | |____/ \__,_| |_| \_/\_/ |_| |_| |_|
|___/
[EasyDarwin] 2020/04/30 11:48:27 main.go:214: EasyDarwin_Service start ...
[EasyDarwin] 2020/04/30 11:48:27 main.go:219: EasyDarwin_Service start ok

服务界面,网址:http://localhost:10008

服务器版本信息:

使用FFmpeg推流,插入usb摄像头,linux会生成一个/dev/video0的文件。

1
ffmpeg -re i /dev/video0 -rtsp_transport tcp -vcodec h264 -f rtsp rtsp://localhost/test

推流结果:

easydarwin推流界面:

FFmpeg取流:

十分卡,考虑撤销缓存和使用cuda加速。