ffmpeg云服务器推流

简介: 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

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
存储 Cloud Native Ubuntu
音视频 ffmpeg命令直播拉流推流
音视频 ffmpeg命令直播拉流推流
|
2月前
|
应用服务中间件 Linux nginx
FFmpeg学习笔记(一):实现rtsp推流rtmp以及ffplay完成拉流操作
这篇博客介绍了如何使用FFmpeg实现RTSP推流到RTMP服务器,并使用ffplay进行拉流操作,包括在Windows和Linux系统下的命令示例,以及如何通过HTML页面显示视频流。
544 0
|
2月前
|
网络协议 应用服务中间件 nginx
FFmpeg错误笔记(一):nginx-rtmp-module推流出现 Server error: Already publishing
这篇文章讨论了在使用nginx-rtmp-module进行RTMP推流时遇到的“Server error: Already publishing”错误,分析了错误原因,并提供了详细的解决办法,包括修改nginx配置文件和终止异常的TCP连接。
206 0
FFmpeg错误笔记(一):nginx-rtmp-module推流出现 Server error: Already publishing
|
2月前
FFmpeg学习笔记(二):多线程rtsp推流和ffplay拉流操作,并储存为多路avi格式的视频
这篇博客主要介绍了如何使用FFmpeg进行多线程RTSP推流和ffplay拉流操作,以及如何将视频流保存为多路AVI格式的视频文件。
306 0
|
4月前
|
编解码 Java Android开发
FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流
​SRT Streamer是一个安卓手机端的开源SRT协议直播推流框架,可用于RTMP直播和SRT直播。SRT Streamer支持的视频编码包括H264、H265等等,支持的音频编码包括AAC、OPUS等等,可谓功能强大的APP直播框架。另一款APP直播框架RTMP Streamer支持RTMP直播和RTSP直播,不支持SRT协议的直播。而本文讲述的SRT Streamer支持RTMP直播和SRT直播,不支持RTSP协议的直播。有关RTMP Streamer的说明参见之前的文章《使用RTMP Streamer开启APP直播推流》,下面介绍如何使用SRT Streamer开启手机直播。
88 4
FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流
|
5月前
|
视频直播 Windows
FFmpeg开发笔记(四十一)结合OBS与MediaMTX实现SRT直播推流
《FFmpeg开发实战》书中介绍了直播中的RTSP、RTMP和SRT协议,SRT提供更低延迟和稳定性。FFmpeg从4.0版起支持SRT,OBS Studio和MediaMTX等工具也已支持。在Windows环境下,通过集成libsrt的FFmpeg,可以建立SRT直播系统。MediaMTX日志显示SRT服务监听8890端口,OBS Studio设置SRT推流至"publish:live"。ffplay和VLC通过"read:live"拉流成功,验证了SRT推拉流功能。更多详情见《FFmpeg开发实战:从零基础到短视频上线》。
202 2
FFmpeg开发笔记(四十一)结合OBS与MediaMTX实现SRT直播推流
|
5月前
|
Web App开发 缓存 编解码
FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址
《FFmpeg开发实战》书中介绍了轻量级流媒体服务器MediaMTX,适合测试RTSP/RTMP协议,但不适用于复杂直播场景。SRS是一款强大的开源流媒体服务器,支持多种协议,起初为RTMP,现扩展至HLS、SRT等。在FFmpeg 6.1之前,推送给SRS的HEVC流不受支持。要播放RTMP流,Android应用可使用ExoPlayer,需在`build.gradle`导入ExoPlayer及RTMP扩展,并根据URL类型创建MediaSource。若SRS播放黑屏,需在配置文件中开启`gop_cache`以缓存关键帧。
172 2
FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址
|
5月前
|
Web App开发 缓存 Linux
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
《FFmpeg开发实战》书中第10章提及轻量级流媒体服务器MediaMTX,适合测试RTSP/RTMP协议,但不适合生产环境。推荐使用SRS或ZLMediaKit,其中SRS是国产开源实时视频服务器,支持多种流媒体协议。本文简述在华为欧拉系统上编译安装SRS和FFmpeg的步骤,包括安装依赖、下载源码、配置、编译以及启动SRS服务。此外,还展示了如何通过FFmpeg进行RTMP推流,并使用VLC播放器测试拉流。更多FFmpeg开发内容可参考相关书籍。
135 2
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
|
6月前
|
编解码 Java Android开发
FFmpeg开发笔记(三十一)使用RTMP Streamer开启APP直播推流
RTMP Streamer是一款开源的安卓直播推流框架,支持RTMP、RTSP和SRT协议,适用于各种直播场景。它支持H264、H265、AV1视频编码和AAC、G711、OPUS音频编码。本文档介绍了如何使用Java版的RTMP Streamer,建议使用小海豚版本的Android Studio (Dolphin)。加载项目时,可添加国内仓库加速依赖下载。RTMP Streamer包含五个模块:app、encoder、rtmp、rtplibrary和rtsp。完成加载后,可以在手机上安装并运行APP,提供多种直播方式。开发者可以从《FFmpeg开发实战:从零基础到短视频上线》获取更多信息。
137 7
FFmpeg开发笔记(三十一)使用RTMP Streamer开启APP直播推流
|
6月前
|
Web App开发 安全 Linux
FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流
《FFmpeg开发实战》书中介绍轻量级流媒体服务器MediaMTX,但其功能有限,不适合生产环境。推荐使用国产开源的ZLMediaKit,它支持多种流媒体协议和音视频编码标准。以下是华为欧拉系统下编译安装ZLMediaKit和FFmpeg的步骤,包括更新依赖、下载源码、配置、编译、安装以及启动MediaServer服务。此外,还提供了通过FFmpeg进行RTSP和RTMP推流,并使用VLC播放器拉流的示例。
320 3
FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流
下一篇
DataWorks