人工智能
直播中

xusiwei1236

12年用户 182经验值
擅长:嵌入式技术
私信 关注
[经验]

【爱芯派 Pro 开发板试用体验】实现简单视频直播系统

本文将介绍如何使用爱芯派Pro开发板、USB摄像头和个人电脑搭建一个简单的视频直播系统。本文搭建的简单视频直播系统主要由三个软件构成,分别是运行在爱芯派Pro 开发板上的ffmpeg和nginix,以及运行在PC上的VLC。他们三者的作用分别是,nginx(借助http-flv模块)实现视频流转发功能,ffmpeg实现视频流推送功能,PC上的VLC播放器实现视频流拉取和播放功能。

一、准备工作

1.1 硬件准备

开始本文的实验之前,需要准备的硬件有:

  • 爱芯派Pro开发板(包括电源适配器)
  • USB摄像头
  • 路由器(包括电源适配器)
  • PC
  • 网线
  • USB A-to-C线

1.2 软件准备

PC上,需要准备VLC播放器,用于播放视频流,可以从VLC官网下载:官方下载:VLC media player,最棒的开源播放器 - VideoLAN

爱芯派Pro上,准备一些软件:

  • 编译工具链,安装命令: sudo apt install build-essential g++ git make
  • ffmpeg命令行工具,安装命令: sudo apt install ffmpeg
  • nginx依赖的openssl库,安装命令: sudo apt install libssl-dev

开放板上的其他软件,可以用命令行安装。

二、安装nginx和http-flv模块

2.1 nginx和nginx-http-flv-module简介

来自官方的介绍:

nginx [engine x] 是一个 HTTP 和反向代理服务器、一个邮件代理服务器和一个通用的 TCP/UDP 代理服务器,最初由 Igor Sysoev 编写。长期以来,它一直在许多重载的俄罗斯网站上运行,包括Yandex,Mail.Ru,VK和Rambler。根据 Netcraft 的数据,在 2023 年5月份世界上21.18%活跃的网站正在使用nginx。

NGINX本身也是开源软件,它的源码以2段式的BSD协议发布。

NGINX源码是高度模块化设计的,开源社区中有非常多的nginx模块,本文介绍的 http-flv 模块也是一种nginx模块。

nginx最基础的功能为http(https)服务器以及反向代理功能,http-flv 模块则提供了流媒体转发的功能。

nginx-http-flv-module是基于https://github.com/arut/nginx-rtmp-module 的,nginx-http-flv-module相比于nginx-rtmp-module,,除了基础的rtmp流转发功能外,还扩展了很多功能,二者功能对比如下:

Untitled

2.2 编译并安装nginx和http-flv模块

由于nginx-http-flv-module是三方模块,nginx源码本身是不具有该模块的,因此需要通过源码编译的方式安装。接下来介绍,如何通过源码编译的方式安装nginx和nginx-http-flv-module。

首先,下载nginx和nginx-http-flv-module源码,以及nginx依赖的pcre、zlib源码。

# 下载 ningx 最新稳定版源码
wget https://nginx.org/download/nginx-1.24.0.tar.gz

# 解压 nginx
tar xvf nginx-1.24.0.tar.gz

# 下载 pcre 最新稳定版源码
wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz

# 解压 pcre
tar xvf pcre-8.45.tar.gz

# 下载 zlib 最新稳定版源码
wget https://www.zlib.net/zlib-1.3.tar.gz

# 解压 zlib
tar xvf zlib-1.3.tar.gz

# 下载 nginx-http-flv-module 源码
git clone https://github.com/winshining/nginx-http-flv-module.git

接下来,编译nginx和nginx-http-flv-module源码:

# 配置
cd nginx-1.24.0/
./configure --with-pcre=../pcre-8.45/ --with-zlib=../zlib-1.3/ --add-module=../nginx-http-flv-module/

# 构建,8个并发任务, AX650N CPU是8核的
make -j 8

编译完成:

nginx-build-done.png

安装命令:

sudo make install

安装完成:

nginx-install-done.png

其中,nginx可执行文件安装位置为:/usr/local/nginx/sbin/nginx ,所在目录 /usr/local/nginx/sbin 不在 PATH环境变量下,所以无法直接通过 nginx 命令执行。解决方法有两种,一种是在PATH环境变量现有的某个目录中创建符号链接,指向这个文件;另一种是,将所在目录添加到PATH环境变量中。

当前用户和root用户PATH环境变量的值:

Untitled

创建符号链接:

# /usr/local/sbin 下创建 nginx 符号链接:
sudo ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

# /usr/local/bin 下创建 nginx 符号链接:
sudo ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/

安装完成后,查看版本信息:

Untitled

三、运行nginx和http-flv模块

3.1 启动nginx服务

成功安装nginx后,使用如下命令即可启动 nginx:

sudo nginx

查看nginx进程,可用用pgrep:

pgrep -a nginx

输出如下:

Untitled

或者,使用命令:

ps -A | grep nginx

输出如下:

Untitled

3.2 修改nginx配置

默认的nginx配置,仅包含http服务功能,需要添加相关配置才能启用http-flv功能

首先使用vim打开 /usr/local/nginx/conf/nginx.conf 文件,

sudo vim /usr/local/nginx/conf/nginx.conf

然后,在文件末尾添加:

rtmp
{
    server
    {
        listen 1935;
        chunk_size 4096;
        application live
        {
            live on;
            max_connections 1024;
        }
    }
}

最后,保存并退出。

3.3 验证配置无误

修改完配置后,验证一下配置正确,再重启服务比较稳妥,验证命令为:

sudo nginx -t

运行输出如下:

Untitled

syntax is ok,表示配置没有问题。

3.4 重新加载nginx配置

配置没有问题之后,就可以重启nginx了,可以使用如下命令:

sudo nginx -s realod

再次执行 pgrep -a nginx 命令:

Untitled

可以看到 worker process 进程号已经变了。

四、推送视频流

4.1 准备摄像头

爱芯派Pro有4个USB口,两个蓝色的是3.0接口,两个黑色是2.0接口。我使用的是海康USB摄像头,型号 DS-E11,分辨率 640x480@25fps 或 1280x720@25fps,插在USB 2.0接口上。

4.2 查看摄像头信息

插上摄像头后(MIPI摄像头需要断电操作),可以使用 v4l2-ctl 命令查看摄像头信息。

如果没有v4l2-ctl命令,则需要先安装v4l-utils软件包:

sudo apt install v4l-utils

列出所有V4L设备:

Untitled

设备详细信息:

Untitled

4.3 使用ffmpeg推流

前面我们已经成功启动了nginx,并且修改了nginx的配置文件,添加了RTMP协议转发的配置。

现在,我们可以使用 ffmpeg 命令推流了,推流命令为:

sudo ffmpeg -i /dev/video1 -f flv rtmp://192.168.0.102:1935/live/test

其中 -i 选项用于指定输入设备,-f 选项用于指定视频格式,最后是推送的视频流链接。其中,/live 路径和前面的nginx配置对应。

Untitled

命令报错,换了一个USB摄像头,任然报错,两个USB摄像头在Windows系统上都可以正常使用。

安装了 guvcview 同样无法打开摄像头查看画面,感觉像是V4L2内核驱动有问题,暂时不折腾了。

不重要,本文的重点是介绍如何在AX650N上运行ffmpeg、nginx、VLC这三个软件。

接下来,使用视频替代摄像头,进行推流(板子上自带的视频):

sudo ffmpeg -i /root/boxvideos/01.mp4 -f flv rtmp://127.0.0.1:1935/live/test

五、查看视频流

有了前面的准备工作,现在就可以在PC上使用VLC播放器查看视频流画面了。

5.1 使用LVC查看视频流

接下来,在PC上打开VLC播放器,通过 媒体→打开网络串流 菜单,在URL栏输入刚刚的链接:

Untitled

为了降低延迟,这里可以勾选显示更多选项,并将缓存修改为100ms:

Untitled

然后,点击播放,稍等片刻就可以看到画面了:

Untitled

六、参考链接

  1. nginx官网: https://nginx.org/
  2. nginx-http-flv-moudle: https://github.com/winshining/nginx-http-flv-module/
  3. VLC官网: 官方下载:VLC media player,最棒的开源播放器 - VideoLAN
  4. FFMPEG官网: https://ffmpeg.org/
  5. [2022.8.15]v4l2-ctl基本使用方法_v4l2-ctl命令_vimer-hz的博客-CSDN博客

更多回帖

发帖
×
20
完善资料,
赚取积分