[置顶] 泰晓 RISC-V 实验箱,配套 30+ 讲嵌入式 Linux 系统开发公开课
RISC-V AI 开发:使用 ffmpeg 和 D1 开发板进行直播推流
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 开发板 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 编译安装
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
。 - 启动 nginx,检测 nginx 是否能成功运行:
sudo /usr/local/nginx/sbin/nginx
,打开浏览器,输入主机对应的 IP 地址(输入 ifconfig 自行查看),即可看到 Nginx 欢迎页面。 - 关闭 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 部署
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
ffmpeg 推流
给 D1 开发板上电,开机后输入以下内容,其中 IP 地址根据实际修改:
ffmpeg -f video4linux2 -s 1280x720 -i /dev/video0 -f flv rtmp://192.168.56.103/live/live
使用 VLC media player 拉流
打开 VLC media player,点击“媒体——>打开网络串流”,输入网络 URL: rtmp://172.168.2.86/live/live
,能正常显示直播画面就成功了。
小结
至此,我们用 nginx 部署了简单的服务器,在 D1 开发板上使用 ffmpeg 进行直播推流,下一步将进行视频检测和推流的功能扩展和整合。
参考资料
猜你喜欢:
- 我要投稿:发表原创技术文章,收获福利、挚友与行业影响力
- 知识星球:独家 Linux 实战经验与技巧,订阅「Linux知识星球」
- 视频频道:泰晓学院,B 站,发布各类 Linux 视频课
- 开源小店:欢迎光临泰晓科技自营店,购物支持泰晓原创
- 技术交流:Linux 用户技术交流微信群,联系微信号:tinylab
支付宝打赏 ¥9.68元 | 微信打赏 ¥9.68元 | |
请作者喝杯咖啡吧 |
Read Album:
- TinyBPT 和面向 buildroot 的二进制包管理服务(3):服务端说明
- TinyBPT 和面向 buildroot 的二进制包管理服务(2):客户端说明
- TinyBPT 和面向 buildroot 的二进制包管理服务(1):设计简介与框架
- RISC-V Linux 内核及周边技术动态第 118 期
- RISC-V Linux 内核及周边技术动态第 117 期