Corrector: TinyCorrect v0.1-rc3 - [spaces]
Author: Jinwen Zhou zhoujwtony@163.com
Date: 2022/09/08
Revisor: Falcon falcon@tinylab.org
Project: RISC-V Linux 内核剖析
Sponsor: PLCT Lab, ISCAS
前面两篇文章介绍了 D1 开发板开机入门和使用 D1 实现摄像头实时人体识别功能,这篇文章介绍如何在 D1 开发板上使用 ffmpeg 进行直播推流,因为我们实现的开发板摄像头应用需要实现对摄像头进行直播推流的功能。下面首先介绍如何在开发板上部署 ffmpeg,该模块可将视频推流至服务器上;然后介绍在虚拟机里安装并部署 Nginx-RTMP 服务器,接受来自 ffmpeg 的网络流;最后在电脑上使用一个拉流软件,从服务器上拉取观看视频。
首先,D1 SDK 1.0 版本可直接支持 ffmpeg 的,编译使用即可,但 D1 SDK 目前已经升级到了 2.0 版本,2.0 已经不直接支持 ffmpeg,所以需要自己打个补丁,ffmpeg 补丁链接,下载后放到路径 tina/package/multimedia
下,在该路径下执行 mm
命令,编译结果的路径为 tina/out/d1-nezha/packages/target
。将可执行文件 ffmpeg,以及它依赖的共享库文件拷贝到 D1 开发板上。
这里特别介绍一下如何找到 ffmpeg 所需的共享库文件。通常,可以直接用 ldd
命令快速列出来,或者直接采用静态编译的方式,把所有代码编译进同一个可执行文件。
不过,由于我在 D1 安装的系统中没有 ldd
命令,所以我在开发板上采用 ./ffmpeg
命令来执行,然后根据报错提示逐个找出来,最终在路径 tina/out/d1-nezha/packages/target/ffmpeg-4.3.1/ipkg-install/usr/lib
下找到了这些文件,之后,把它们拷贝到开发板的 /usr/lib
目录下即可:
libavcodec.so.58
libavdevice.so.58
libavfilter.so.7
libavformat.so.58
libavutil.so.56
libswresample.so.3
libswscale.so.5
准备好执行文件和共享库之后,再测试一下能否使用。插上摄像头并用下面这条命令将摄像头采集到的视频保存为 out.mp4,导入到电脑上看看录制视频是否正常。其中 -f
设置解析格式,-s
设置视频的宽和高,-i
表示输入参数:
$ ffmpeg -f video4linux2 -s 1280x720 -i /dev/video0 out.mp4
Nginx 是一个 Web 服务器,可以用于 HTTP 服务器、反向代理、负载均衡等场合,此处我们需要使用 Nginx-RTMP 作为直播服务端。
Nginx 支持多种平台,包括 Windows、Linux、macOS 等。本节以 Ubuntu 22.04 虚拟机为例,介绍如何安装 Nginx。
Nginx 1.16.0
源码。Nginx 下载地址。tar -zxvf nginx-1.16.0.tar.gz
。Nginx 1.16.0
根目录 cd nginx-1.16.0
。./configure
命令,这一步可以增加参数,比如 ./configure --prefix=PATH
,以便指定安装路径。更多参数可以输入 ./configure --help
查看。./configure
命令之后,目录中新增了 Makefile
文件,然后执行 make
命令进行编译。编译完成后,进入 objs 目录,就可以看到可执行文件 nginx
。make install
命令安装 Nginx
,这一步默认的安装路径为 /usr/local/nginx
,进入该路径即可看到安装好的 Nginx
。sudo /usr/local/nginx/sbin/nginx
,打开浏览器,输入主机对应的 IP 地址(输入 ifconfig 自行查看),即可看到 Nginx 欢迎页面。sudo /usr/local/nginx/sbin/nginx -s stop
。Nginx-RTMP 是基于 Nginx 的 RTMP 媒体服务器,由 Nginx 和 nginx-rtmp-module 组成。下面使用 Nginx-RTMP 搭建媒体服务器,然后使用 ffmpeg 进行推流。
D1 开发板、一根 USB 线,一根串口线,一个 USB 摄像头,一根网线。
USB 线连接电源,串口线和网线连接电脑,USB 摄像头连接开发板 USB 口。
之前的两篇文章介绍了开发板的系统编译安装和摄像头 demo 的运行,我们已经准备好了一个编译系统和一个运行系统,在此基础之上,安装了 nginx 和 ffmpeg,为了查看直播的画面,我们还需要下载一个可以捕获网络串流的媒体播放器,比如 VLC media player,在 Windows 安装即可。
nginx-rtmp-module 依赖 Nginx 的源代码,编译过程如下:
$ ls
nginx-1.16.0 nginx-rtmp-module
$ cd nginx-1.16.0
$ ./configure --add-module=../nginx-rtmp-module --with-http_ssl_module
$ make
$ make install
要运行 RTMP 服务器,就要修改一下配置文件,默认的配置文件在 usr/local/nginx/conf/nginx.conf
,可以直接修改其内容,或者再新建一个命名为 rtmp.conf,运行时指定一下配置文件即可,内容如下:
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
application live {
live on;
}
}
}
更多配置代码可见 RTMP 配置。
编译及配置完成后,启动 Nginx-RTMP:
sudo /usr/local/nginx/sbin/nginx -c conf/rtmp.conf
给 D1 开发板上电,开机后输入以下内容,其中 IP 地址根据实际修改:
ffmpeg -f video4linux2 -s 1280x720 -i /dev/video0 -f flv rtmp://192.168.56.103/live/live
打开 VLC media player,点击“媒体——>打开网络串流”,输入网络 URL: rtmp://172.168.2.86/live/live
,能正常显示直播画面就成功了。
至此,我们用 nginx 部署了简单的服务器,在 D1 开发板上使用 ffmpeg 进行直播推流,下一步将进行视频检测和推流的功能扩展和整合。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。