ffmpeg云服务器推流

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: ffmpeg云服务器推流

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


微信图片_20230117221606.png


此时我们可以打开电脑浏览器,输入云服务器的公网 IP 地址,如下所示:


如果显示出上面这个页面,表示我们的 nginx 已经正常工作了。


微信图片_20230117221649.png


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;
}
}
}


如下所示:


微信图片_20230117221750.png


添加完成之后保存退出即可!接着执行如下命令重启 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 地址以及路径


微信图片_20230117221807.png


点击“播放”即可从 RTMP 流媒体服务器拉取视频数据进行播放,如下所示:


微信图片_20230117221953.png

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
存储 Cloud Native Ubuntu
音视频 ffmpeg命令直播拉流推流
音视频 ffmpeg命令直播拉流推流
|
9月前
ffmpeg推流报错Failed to update header with correct duration.
ffmpeg推流报错Failed to update header with correct duration.
306 0
|
3月前
|
编解码 网络协议 Unix
相较于ffmpeg我更倾向于使用socket实现推流工作
相较于ffmpeg我更倾向于使用socket实现推流工作
36 0
|
4月前
[音视频 ffmpeg] 复用推流
[音视频 ffmpeg] 复用推流
|
4月前
【音视频 ffmpeg 】直播推流QT框架搭建
【音视频 ffmpeg 】直播推流QT框架搭建
|
4月前
|
网络协议 应用服务中间件 Linux
【音视频 ffmpeg 学习】 RTMP推流 mp4文件
【音视频 ffmpeg 学习】 RTMP推流 mp4文件
|
4月前
|
应用服务中间件 nginx Windows
ffmpeg推流到nginx服务器,并使用vlc播放rtmp视频
ffmpeg推流到nginx服务器,并使用vlc播放rtmp视频
|
7月前
|
Ubuntu 网络安全 Docker
[笔记]Qt5+FFMpeg+Opencv 实现实时美颜直播推流《一》基础知识以及直播服务器配置
[笔记]Qt5+FFMpeg+Opencv 实现实时美颜直播推流《一》基础知识以及直播服务器配置
|
8月前
|
算法 API 开发工具
Android平台Camera2数据如何对接RTMP推流到服务器
在Google 推出Android 5.0的时候, Android Camera API 版本升级到了API2(android.hardware.camera2), 之前使用的API1(android.hardware.camera)就被标为 Deprecated 了。
242 0
|
9月前
|
编解码 网络协议 计算机视觉
ffmpeg推流rtmp指定udp传输
ffmpeg推流rtmp指定udp传输
381 0