• ffmpeg云服务器推流


    1. WIFI 调试

    使用正点原子的 STM32MP157 开发板,使用了 SDIO 接口的 WIFI 芯片 RTL8723DS。

    WIFI 驱动不需要我们编写,因为 realtek 公司提供了 WIFI 驱动源码,因此我们只需要将 WIFI 驱动源码添加到 Linux 内核中,然后通过图形界面配置,选择将其编译成模块即可。

    1. 向 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/

    1. 编译 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

    对应的网卡。

    1. 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 流媒体服务器拉取视频数据进行播放,如下所示:

     

     

  • 相关阅读:
    代码格式化----逗号问题
    华为设备配置VRRP负载分担
    记录使用 Lib.Harmony 时注入过程中遇到的一个坑
    JAVA毕业设计家乡旅游文化推广网站计算机源码+lw文档+系统+调试部署+数据库
    Hololens开发-手势拖拽、旋转物体实现
    java计算机毕业设计网上汽车售票系统源代码+数据库+系统+lw文档
    Ubuntu22.04 安装配置流水账
    不同的操作加不同的锁详解
    【机器学习】近邻类模型:KNN算法在数据科学中的实践与探索
    2019 CSP-S1 模拟赛3-模拟测试题
  • 原文地址:https://blog.csdn.net/muaxi8/article/details/125468911