简单说明
ffmpeg提供了ffserver可以搭建RTSP流媒体服务器。
注意:ffserver在ffmpeg4.0以上版本已经移除,需要此功能可以下载3.x版本。
概念介绍
这里ffserver涉及两个概念:
- ffserver:负责响应客户端的流媒体请求,把流媒体发送给客户端
- ffserver.conf:ffserver启动的配置文件,这个文件主要对网络协议、缓存文件feed和要发送的流媒体文件的格式参数做具体的设定
配置应用
ffserver可以配置带缓存和不带缓存:
- 不带缓存:只需要配置stream的位置,不需要配置feed和。
RTSPPort 30120
BindAddress 0.0.0.0
RTSPBindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 30000
CustomLog -
NoDaemon
<Stream bag_lost_all_videos_splice.mp4>
File "/data/videos/bag_lost_all_videos_splice.mp4"
Format rtp
</Stream>
- 带缓存:需要配置feed。
RTSPPort 30120 # 绑定的端口号
BindAddress 0.0.0.0 # 绑定的IP
RTSPBindAddress 0.0.0.0 # RTSP绑定的IP地址
MaxHTTPConnections 2000 # 最大的HTTP连接数
MaxClients 1000 # 最大客户端连接数
MaxBandwidth 30000 # 最大带宽
CustomLog - # 日志文件,"-"为直接打印
NoDaemon # 默认全局参数
<Feed bag_lost_all_videos_splice.mp4> # 每一个输入建立一个feed
File /tmp/bag_lost_all_videos_splice.mp4 # feed缓存文件
FileMaxSize 40m # 缓存文件最大值
ACL allow 0.0.0.0 # 允许写入feed的ip
</Feed>
<Stream bag_lost_all_videos_splice.mp4> # 转换后的视频流
File "/data/videos/bag_lost_all_videos_splice.mp4" # 已经存在的文件(非实时流)
Format rtp # 视频流格式
</Stream>
安装部署
工具下载地址:https://ffbinaries.com/downloads
# 将下载的ffserver和ffmpeg工具,上传解压到服务器
[root@unity ~]# unzip ffserver-3.4-linux-64.zip
# 创建配置文件,注意:这里将配置文件指定的视频放到我们配置的目录下
[root@unity ~]# vim ffserver.conf
RTSPPort 30120 # RTSP监听端口
BindAddress 0.0.0.0
RTSPBindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 30000
CustomLog -
NoDaemon
<Stream bag_lost_all_videos_splice.mp4>
File "/root/bag_lost_all_videos_splice.mp4"
Format rtp # 这里格式必须设置为rtp
</Stream>
# 启动ffserver
[root@unity ~]# ./ffserver -f ffserver.conf
ffserver version 3.4-static http://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 6.4.0 (Debian 6.4.0-7) 20170920
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-6 --enable-fontconfig --enable-frei0r --enable-gnutls -
-enable-gray --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-librtmp --enable-libsoxr --enable-libspeex --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
libpostproc 54. 7.100 / 54. 7.100
ffserver.conf:2: BindAddress option is deprecated. Use HTTPBindAddress instead.
ffserver.conf:8: NoDaemon option has no effect. You should remove it.
Wed Dec 29 13:18:42 2021 Opening feed file '/root/bag_lost_all_videos_splice.mp4' for stream 'bag_lost_all_videos_splice.mp4'
Wed Dec 29 13:18:42 2021 FFserver started.
# 测试拉取rtsp流
# 这里使用VLC工具,播放rtsp://10.198.3.22:30120/bag_lost_all_videos_splice.mp4
问题说明
- 视频源名称和目录名称都不建议使用中文名称