WIFI 调试
使用正点原子的 STM32MP157 开发板,使用了 SDIO 接口的 WIFI 芯片 RTL8723DS。
WIFI 驱动不需要我们编写,因为 realtek 公司提供了 WIFI 驱动源码,因此我们只需要将 WIFI 驱动源码添加到 Linux 内核中,然后通过图形界面配置,选择将其编译成模块即可。
向 Linux内核添加WIFI驱动
将rtl8723ds 目 录 拷 贝 到 ubuntu 下 Linux 内 核 源 码 中 的
drivers/net/wireless/realtek/目录下。
打开 drivers/net/wireless/ realtek/Kconfig,在里面加入下面这一行内容:
source "drivers/net/wireless/realtek/rtl8723ds/Kconfig"
打开 drivers/net/wireless/realtek/Makefile,在里面加入下面以后内容,这里新添加一个内核配置,会根据 CONFIG_RTL8723DS 这个宏来决定 8723ds WIFI 驱动是编译进内核还是模块。
obj-$(CONFIG_RTL8723DS) += rtl8723ds/
编译 WIFI驱动
执行“make menuconfig”命令,打开 Linux 内核配置界面,然后按照如下路径选择将 rtl8723ds驱动编译成模块。
rtl8723ds配置完如图 所示:
接着就用以下命令去编译成模块:
make modules -j2 //编译驱动模块
在内核的源码目录下,把模块拷贝到开发板根目录下,拷贝命令如下:
scp zuozhongkai@10.0.14.226:/home/drivers/net/wireless/realtek/rtl8723ds/8723ds.ko /
首先我们先测试一下板载的 SDIO WIFI。进入到开发板目录/lib/modules/5.4.31
中,运行以下命令进行加载 8723ds.ko 这个驱动模块:
depmod //第一次加载驱动的时候需要运行此命令
modprobe 8723ds.ko //RTL8723DS 模块加载 8723ds.ko 模块
如果驱动加载成功的话如图所示:
输入“ifconfig -a”命令,查看 wlanX(X=0….n)网卡是否存在,一般是 wlan0,结果如图 所示:
从图 中可以看出,当前开发板有一个叫做“wlan0”的网卡,这个就是 RTL8723DS
对应的网卡。
RTL8723 SDIO WIFI联网测试
确保 RTL8723 能扫描出要连接的 WIFI 热点。要连接的 WIFI 热点扫描到以后就可以连接了,开发板根文件系统/etc 目录下会有一个名为“wpa_supplicant.conf”的配置文件
此文件用于配置要连接的 WIFI 热点以及对应的密码。
wpa_supplicant.conf 文件内容如下所示:
ssid 是要连接的 WIFI 热点名字,psk 就是要连接的 WIFI 热点密码。
准备好以后就可以使用 wpa_supplicant 工具让 RTL8723 SDIO WIFI 连接到热点上,
输入如下命令:
wpa_supplicant -Dnl80211 -c /etc/wpa_supplicant.conf -i wlan0 &
当 RTL8723 连接上 WIFI 热点以后会输出如图所示的信息:
接下来就是最后一步了,设置 wlan0 的 IP 地址,这里使用udhcpc 命令从路由器申请 IP 地址,输入如下命令:
udhcpc -i wlan0 //从路由器获取 IP 地址
IP 地址获取成功以后会输出如图所示信息:
可以直接在开发板上使用 wlan0 来 ping 一下百度网站,至此 RTL8723 SDIO WIFI 就完全驱动起来了。
2.1 摄像头调试
使用ov5640摄像头模块(500万像素),摄像头镜头往开发板外则直接插到 CAMERA 接口处,镜头朝向板子外侧。开机前先插上摄像头,不支持热插拨。插上摄像头再启动开发板。
查看 ov5640 生成的节点,确认节点是 video0。
ls /dev/video0
查看驱动中支持摄像头的格式,主要查看支持的分辨率采集及支持的采集帧数,使用如下命令:
v4l2-ctl --device=/dev/video0 --list-formats-ext
2.1 Ffmpeg 推流框架
使用 RTMP 流媒体服务来实现视频监控,RTMP 流媒体服务框架图如下所示:
流媒体服务推流端负责将视频数据通过 RTMP 流媒体协议传输给 RTMP 流媒体服务器,拉流端可以从流媒体服务器中通过 RTMP 协议获取到视频数据;而流媒体服务器负责接收推流端的视频数据、当有客户端(拉流端)想要获取视频数据时再将其发给相应的客户端。所以从上图可知,要想实现 RTMP 视频监控,必须要有这三部分:推流客户端、拉流客户端以及流媒体服务器。推流我们可以使用 FFmpeg 来做,拉流则可以实现 VLC 播放器来做,而流媒体客户端则使用 Nginx 来搭建即可!
2.2.Nginx 移植
我们可以使用 Nginx 来搭建 RTMP 流媒体服务器,因为我们要实现远程拉流,所以必须在公网ip主机上搭建服务器,这里选择使用云服务器搭建。
进入到云服务器的 Ubuntu 系统的某个目录下,执行下面这条命令下载 Nginx 源码:
wget http://nginx.org/download/nginx-1.20.0.tar.gz
原生的 Nginx 并不支持 RTMP,我们需要安装第三方模块 nginx-rtmp-module 插件使其支持RTMP。通过下面这条命令下载 nginx-rtmp-module。
git clone GitHub - arut/nginx-rtmp-module: NGINX-based Media Streaming Server
解压之后生成 nginx-1.20 文件夹,进入到该目录下,配置源码、接下执行 make 编译源码,最后执行 make install 安装即可。
2.3配置源码
首先第一步是配置源码,在配置之前,需要进行一个简单的修改,否则配置通不过;首先打开 nginx 源码目录下的 auto/cc/name 文件,将 21 行处的”exit 1”给注释掉!如下所示:
修改完成之后保存退出即可!接着执行下面这条命令进行配置:
./configure --prefix=/home/dt/tools/nginx-1.20.0/install \ --with-http_ssl_module \ --with-http_mp4_module \ --with-http_v2_module \ --without-http_upstream_zone_module \ --add-module=/home/dt/tools/nginx-rtmp-module
上述命令中,--prefix 指定了 nginx 的安装路径;--add-module 用于添加第三方模块,譬如我们前面下载的 nginx-rtmp-module,所以--add-module 需要指向 nginx-rtmp-module 源码路径。
编译成功之后,接着我们进行安装,执行 make install。
Nginx的conf 目录下有很多的配置文件,如下所示,其中 nginx.conf 配置文件很重要,后续我们会对该配置文件进行相应的配置。
2.4测试 nginx
接下来我们要启动 nginx,执行如下命令:
./nginx -p /etc/nginx
此时 nginx 服务便在后台运行了,通过 ps 命令可查看到:
ps -aux
此时我们可以打开电脑浏览器,输入云服务器的公网 IP 地址,如下所示:
如果显示出上面这个页面,表示我们的 nginx 已经正常工作了。
2.5 配置 nginx
后续我们会使用 FFmpeg 进行推流,将视频流通过 RTMP 推给 nginx 云流媒体服务器,在此之前,我们需要对 nginx 进行配置,打开 nginx 的配置文件/etc/nginx/conf/nginx.conf,添加如下内容:
rtmp { server { listen 1935; # 监听 1935 端口 chunk_size 4096; application live{ allow publish 127.0.0.1; allow play all; live on; # 打开直播 record off; # 关闭 record meta copy; } application hls { live on; hls on; hls_path /tmp/hls; hls_fragment 8s; } } }
如下所示:
添加完成之后保存退出即可!接着执行如下命令重启 nginx:
./nginx -p /etc/nginx -s reload
2.6使用 FFmpeg 推流
nginx 重启之后,接着我们便可使用 FFmpeg 进行推流,将视频流数据通过 RTMP 推给 nginx 流媒体服务器,执行如下命令进行推流:
ffmpeg -f v4l2 -video_size 320x240 -framerate 15 -i /dev/video0 -q 10 -f flv rtmp://101.201.142.82/live/mytest
介绍一下参数,-f v4l2视频设备, 首先-i 表示输入视频数据,这里我们使用/dev/video0视像头;rtmp://101.201.142.82/live/mytest 表示将视频流通过 RTMP 推给云流媒体服务器,-framerate 表示帧率。
现在可以进行拉流了,将我们的 Windows 主机作为拉流端,使用 VLC 软件进行拉流安装好之后打开 VLC,如下所示,输入流媒体服务器的 IP 地址以及路径
点击“播放”即可从 RTMP 流媒体服务器拉取视频数据进行播放,如下所示: