win7测试本地rtsp推流
本文介绍了在Windows环境下安装和使用GStreamer进行视频播放及RTSP服务部署的方法。主要内容包括: GStreamer安装配置:安装开发包和运行包,并配置环境变量。 视频播放:使用gst-launch-1.0命令播放本地视频文件。 RTSP服务部署:通过MediaMTX和FFmpeg搭建本地RTSP服务器,包括服务启动和视频推流。 许可证说明:对比GPL和LGPL许可证的区别及其对F
gstreamer Windows环境安装。
安装开发包+运行包。
环境变量,在path中将bin目录加入,例如:C:\gstreamer\1.0\msvc_x86_64\bin
播放本地视频。
gst-launch-1.0.exe playbin uri=file:///d:/test/AdamGrosser_2007-light.mp4
gst-launch-1.0.exe playbin uri=file:///d:/test/AdamGrosser_2007.mp4
gst-launch-1.0.exe playbin uri=file:///d:/test/AdamDriver_2015P-480p.mp4
rtsp本地服务部署启动。
mediamtx, win7支持到v1.0.0版本。
FFmpeg, win7支持到 6.0版本。
其他说明:GPL vs LGPL,这组区别是最重要的,它关乎法律和版权。
GPL(通用公共许可证)
要求:如果你在项目中使用 GPL 授权的代码,那么你的整个项目也必须以 GPL 许可证开源。
对 FFmpeg 的影响:gpl 版本包含了一些受 GPL 约束的编码器,最著名的是 x264(H.264 视频编码器)和 x265(HEVC/H.265 视频编码器)。些是当今最常用的高质量编码器。
简单理解:用了 gpl 版本,你的软件就必须开源。
LGPL(较宽松的通用公共许可证)
要求:相对宽松。你可以将 LGPL 授权的代码以动态链接库(DLL)的形式用于闭源商业软件,而无需开源你的整个项目。但如果你修改了 LGPL 库本身的代码,则需要将修改部分开源。
对 FFmpeg 的影响:lgpl 版本不包含受 GPL 约束的编码器(如 x264, x265)。它只包含 LGPL 授权的代码和一些没有版权限制的代码。
简单理解:用 lgpl 版本,可以开发闭源软件,但功能上缺少一些强大的编码器。
启动rtsp服务
将两个安装包解压到同一个目录下,cmd执行mediamtx.exe,输出[RTSP] listener opened on :8554则说明rtsp服务启动正常。
cmd输出:
D:\rtsp_test>mediamtx.exe
2025/10/21 09:58:50 INF MediaMTX v1.0.0
2025/10/21 09:58:50 INF [RTSP] listener opened on :8554 (TCP), :8000 (UDP/RTP),
:8001 (UDP/RTCP)
2025/10/21 09:58:50 INF [RTMP] listener opened on :1935
2025/10/21 09:58:50 INF [HLS] listener opened on :8888
2025/10/21 09:58:50 INF [WebRTC] listener opened on :8889 (HTTP)
2025/10/21 09:58:50 INF [SRT] listener opened on :8890 (UDP)
执行推流到本地rtsp服务。
ffmpeg -re -stream_loop -1 -i 你视频的文件名 -c copy -f rtsp rtsp://127.0.0.1:8554/video
ffmpeg -re -stream_loop -1 -i AdamGrosser_2007-light.mp4 -c copy -f rtsp rtsp://127.0.0.1:8554/video
cmd执行后输出及解释。
D:\rtsp_test>ffmpeg -re -stream_loop -1 -i AdamGrosser_2007-light.mp4 -c copy -f
rtsp rtsp://127.0.0.1:8554/video
ffmpeg version n6.0.1-20231130 Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 13.2.0 (crosstool-NG 1.25.0.232_c175b21)
configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-conf
ig=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw
32 --enable-version3 --disable-debug --disable-w32threads --enable-pthreads --en
able-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribi
di --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-op
encl --disable-libpulse --enable-libvmaf --disable-libxcb --disable-xlib --enabl
e-amf --enable-libaom --enable-libaribb24 --disable-avisynth --enable-chromaprin
t --enable-libdav1d --disable-libdavs2 --disable-libfdk-aac --enable-ffnvcodec -
-enable-cuda-llvm --disable-frei0r --enable-libgme --enable-libkvazaar --enable-
libass --enable-libbluray --disable-libjxl --enable-libmp3lame --enable-libopus
--enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-lib
webp --enable-lv2 --enable-libvpl --enable-openal --enable-libopencore-amrnb --e
nable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libop
enmpt --enable-librav1e --disable-librubberband --enable-schannel --enable-sdl2
--enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable
-libuavs3d --disable-libdrm --disable-vaapi --disable-libvidstab --enable-vulkan
--enable-libshaderc --disable-libplacebo --disable-libx264 --disable-libx265 --
disable-libxavs2 --disable-libxvid --enable-libzimg --enable-libzvbi --extra-cfl
ags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-ldexe
flags= --extra-libs=-lgomp --extra-version=20231130
libavutil 58. 2.100 / 58. 2.100
libavcodec 60. 3.100 / 60. 3.100
libavformat 60. 3.100 / 60. 3.100
libavdevice 60. 1.100 / 60. 1.100
libavfilter 9. 3.100 / 9. 3.100
libswscale 7. 1.100 / 7. 1.100
libswresample 4. 10.100 / 4. 10.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 00000000004c81c0] stream 0, timescale not set
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'AdamGrosser_2007-light.mp4':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isom
creation_time : 2011-05-01T15:50:33.000000Z
podcast : 1
media_type : 0
title : TED: Adam Grosser (2007)
artist : TED
date : 2007
album : TEDTalks
comment : To learn more about this speaker, find other TEDTalks, and
subscribe to this Podcast series, visit www.TED.com Feedback: tedtalks@ted.co
m
genre : Podcast
category : Higher Education
Duration: 00:03:34.42, start: 0.000000, bitrate: 85 kb/s
Stream #0:0[0x1](und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661),
yuv420p(progressive), 320x180 [SAR 1:1 DAR 16:9], 40 kb/s, 12 fps, 12 tbr, 12 t
bn (default)
Metadata:
creation_time : 2011-04-27T16:01:06.000000Z
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 24000 Hz, mono, fl
tp, 23 kb/s (default)
Metadata:
creation_time : 2011-05-01T15:50:35.000000Z
handler_name : GPAC ISO Audio Handler
vendor_id : [0][0][0][0]
Stream #0:2[0x0]: Video: png, rgba(pc), 600x600 [SAR 2835:2835 DAR 1:1], 90k t
br, 90k tbn (attached pic)
Output #0, rtsp, to 'rtsp://127.0.0.1:8554/video':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isom
category : Higher Education
podcast : 1
media_type : 0
title : TED: Adam Grosser (2007)
artist : TED
date : 2007
album : TEDTalks
comment : To learn more about this speaker, find other TEDTalks, and
subscribe to this Podcast series, visit www.TED.com Feedback: tedtalks@ted.co
m
genre : Podcast
encoder : Lavf60.3.100
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv4
20p(progressive), 320x180 [SAR 1:1 DAR 16:9], q=2-31, 40 kb/s, 12 fps, 12 tbr, 9
0k tbn (default)
Metadata:
creation_time : 2011-04-27T16:01:06.000000Z
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 24000 Hz, mono, fltp, 2
3 kb/s (default)
Metadata:
creation_time : 2011-05-01T15:50:35.000000Z
handler_name : GPAC ISO Audio Handler
vendor_id : [0][0][0][0]
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 0 fps=0.0 q=-1.0 size= 0kB time=-577014:32:22.77 bitrate= -0.0k
frame= 10 fps=0.0 q=-1.0 size=N/A time=00:00:00.58 bitrate=N/A speed=1.13x
frame= 16 fps= 16 q=-1.0 size=N/A time=00:00:01.08 bitrate=N/A speed=1.07x
frame= 22 fps= 14 q=-1.0 size=N/A time=00:00:01.58 bitrate=N/A speed=1.04x
命令概述
你执行的命令是:
ffmpeg -re -stream_loop -1 -i AdamGrosser_2007-light.mp4 -c copy -f rtsp rtsp://127.0.0.1:8554/video
-
-re:以原始帧率读取输入文件,模拟实时流。 -
-stream_loop -1:无限循环输入视频。 -
-i AdamGrosser_2007-light.mp4:指定输入文件。 -
-c copy:流复制,不重新编码,效率最高。 -
-f rtsp:指定输出格式为 RTSP。 -
rtsp://127.0.0.1:8554/video:RTSP 服务器的目标地址。
输出详解
1. FFmpeg 版本和构建信息
ffmpeg version n6.0.1-20231130 Copyright (c) 2000-2023 the FFmpeg developers built with gcc 13.2.0 (crosstool-NG 1.25.0.232_c175b21) configuration: --prefix=/ffbuild/prefix ... (省略)
这部分显示了您使用的 FFmpeg 版本(n6.0.1)、编译时间和编译配置。它表明您使用的是一个功能非常全面的构建版本。
2. 库版本信息
libavutil 58. 2.100 / 58. 2.100 libavcodec 60. 3.100 / 60. 3.100 ...
这些是 FFmpeg 核心库的版本号,对于一般用户来说,知道这是核心组件即可。
3. 输入文件分析
[mov,mp4,m4a,3gp,3g2,mj2 @ 00000000004c81c0] stream 0, timescale not set Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'AdamGrosser_2007-light.mp4':
FFmpeg 识别出输入文件是一个 MP4 容器。timescale not set 是一个警告,但在这个上下文中通常可以忽略,不影响推流。
文件元数据:
Metadata: major_brand : isom ... title : TED: Adam Grosser (2007) ... Duration: 00:03:34.42, start: 0.000000, bitrate: 85 kb/s
显示了文件的元信息(如标题、艺术家等),以及总时长(3分34秒)和平均比特率(85 kb/s,这是一个非常低的码率视频)。
流信息:
这是最关键的部分,说明了文件内包含的媒体流。
-
Stream #0:0:视频流
-
编码格式:
H.264 (Constrained Baseline) -
像素格式:
yuv420p(progressive)(逐行扫描) -
分辨率:
320x180 -
码率:
40 kb/s -
帧率:
12 fps -
时间基:
12 tbr, 12 tbn(这些是内部时间单位,通常帧率fps是最重要的)
-
-
Stream #0:1:音频流
-
编码格式:
AAC (LC) -
采样率:
24000 Hz -
声道:
mono(单声道) -
码率:
23 kb/s
-
-
Stream #0:2:附加图片(可能是专辑封面)
-
编码格式:
PNG -
分辨率:
600x600 -
注意:这个流没有被推流,因为你的命令默认只选择了第0个(视频)和第1个(音频)流。
-
4. 输出目标设置
Output #0, rtsp, to 'rtsp://127.0.0.1:8554/video':
FFmpeg 确认输出目标为 RTSP 协议,地址是 rtsp://127.0.0.1:8554/video。
流映射:
Stream mapping: Stream #0:0 -> #0:0 (copy) Stream #0:1 -> #0:1 (copy)
这清晰地显示了输入流到输出流的映射关系。(copy) 表示是流复制,没有重新编码。效率极高,CPU 占用率几乎为0。
5. 实时推流状态
这是滚动的实时信息,反映了推流的健康状况。
Press [q] to stop, [?] for help frame= 10 fps=0.0 q=-1.0 size=N/A time=00:00:00.58 bitrate=N/A speed=1.13x frame= 16 fps= 16 q=-1.0 size=N/A time=00:00:01.08 bitrate=N/A speed=1.07x ... frame= 490 fps= 12 q=-1.0 size=N/A time=00:00:40.58 bitrate=N/A speed=0.926x
-
frame=xxx:已处理并发送的视频帧总数。 -
fps=xx:当前的推流帧率。它会逐渐稳定在输入视频的原始帧率(12 fps)附近。这是推流是否顺畅的关键指标。 -
q=-1.0:质量指标。-1.0对于流复制模式是正常的,因为它不经过编码器的质量评估。如果进行重新编码,这个值会变化(例如q=29.0),值越大表示质量越差(压缩越多)。 -
size=N/A/bitrate=N/A:在流复制到某些格式时,FFmpeg 无法实时计算输出大小和码率,所以显示 N/A。这是正常现象。 -
time=xx:当前已推流的时间点。它应该随着视频播放而稳定增长。 -
speed=xxx:处理速度相对于实时播放的倍数。-
1.0x表示正好是实时速度(受-re参数控制)。 -
略高于或低于 1.0x 是正常的波动。
-
如果持续远低于 1.0x(如
0.5x),则说明系统(可能是网络、磁盘I/O或服务器处理能力)跟不上,会导致推流卡顿。
-
总结
从输出可以得出以下结论:
-
推流成功:FFmpeg 成功连接到了本地的 MediaMTX 服务器,并开始了流传输。
-
模式高效:使用了
-c copy(流复制),CPU 占用极低,视频质量无损。 -
流内容:正在推送一个低码率(85kbps)、低分辨率(320x180)的 H.264 视频和 AAC 音频流。
-
状态健康:
-
帧率(
fps)稳定在源文件的 12 fps 左右。 -
处理速度(
speed)在 1.0 附近轻微波动,属于正常现象,没有出现持续的大幅掉速。 -
时间线在稳定增长。
-
简单来说,你的本地 RTSP 流媒体服务器正在完美运行,FFmpeg 正在稳定地向它推送视频流。 你现在可以用 VLC 播放器或其他 RTSP 客户端打开 rtsp://127.0.0.1:8554/video 来观看这个循环播放的视频了。
gstreamer读取本地视频推流到本地rtsp服务
执行命令:
gst-launch-1.0 filesrc location=D:\rtsp_test\AdamGrosser_2007-light.mp4 ! qtdemux ! queue ! h264parse ! nvv4l2decoder enable-max-performance=1 ! nvv4l2h264enc ! rtspclientsink location = rtsp://localhost:8554/mystream
报错如下:
WARNING: erroneous pipeline: no element "nvv4l2decoder"
这个错误说明您的系统上没有 nvv4l2decoder 元素。这是 NVIDIA 专用的硬件解码器,只在安装了 NVIDIA GPU 和相应 GStreamer 插件的系统上可用。
让我为您提供几个通用的替代方案:
方案 1:使用软件解码(通用方案)
gst-launch-1.0 filesrc location=D:\\rtsp_test\\AdamGrosser_2007-light.mp4 ! qtdemux ! queue ! h264parse ! avdec_h264 ! videoconvert ! x264enc ! rtspclientsink location=rtsp://localhost:8554/mystream
方案 2:更稳定的软件编解码方案
gst-launch-1.0 filesrc location=D:\\rtsp_test\\AdamGrosser_2007-light.mp4 ! qtdemux name=demux \ demux.video_0 ! queue ! h264parse ! avdec_h264 ! videoconvert ! x264enc ! h264parse ! rtspclientsink location=rtsp://localhost:8554/mystream
方案 3:流复制模式(最高效,如果视频编码兼容)
gst-launch-1.0 filesrc location=D:\\rtsp_test\\AdamGrosser_2007-light.mp4 ! qtdemux name=demux \ demux.video_0 ! queue ! h264parse ! rtspclientsink location=rtsp://localhost:8554/mystream
方案 4:包含音频流的完整方案
gst-launch-1.0 filesrc location=D:\\rtsp_test\\AdamGrosser_2007-light.mp4 ! qtdemux name=demux \ demux.video_0 ! queue ! h264parse ! avdec_h264 ! videoconvert ! x264enc ! h264parse ! mux. \ demux.audio_0 ! queue ! aacparse ! avdec_aac ! audioconvert ! audioresample ! voaacenc ! mux. \ rtpmp4pay name=mux ! rtspclientsink location=rtsp://localhost:8554/mystream
硬件加速方案(根据您的显卡选择)
如果是 NVIDIA 显卡,但缺少插件:
# 首先安装 NVIDIA GStreamer 插件 # Ubuntu: sudo apt install gstreamer1.0-nvidia # 然后使用: gst-launch-1.0 filesrc location=D:\\rtsp_test\\AdamGrosser_2007-light.mp4 ! qtdemux ! queue ! h264parse ! nvdec ! nvh264enc ! rtspclientsink location=rtsp://localhost:8554/mystream
如果是 Intel 集成显卡:
gst-launch-1.0 filesrc location=D:\\rtsp_test\\AdamGrosser_2007-light.mp4 ! qtdemux ! queue ! h264parse ! vaapih264dec ! vaapih264enc ! rtspclientsink location=rtsp://localhost:8554/mystream
如果是 AMD 显卡:
gst-launch-1.0 filesrc location=D:\\rtsp_test\\AdamGrosser_2007-light.mp4 ! qtdemux ! queue ! h264parse ! avdec_h264 ! videoconvert ! amfh264enc ! rtspclientsink location=rtsp://localhost:8554/mystream
诊断您的 GStreamer 环境
要查看您系统上可用的编解码器,可以运行这些命令:
# 查看所有 H.264 相关的元素 gst-inspect-1.0 | grep 264 # 查看可用的解码器 gst-inspect-1.0 | grep dec # 查看可用的编码器 gst-inspect-1.0 | grep enc # 检查是否有 NVIDIA 元素 gst-inspect-1.0 | grep nv
推荐的使用顺序
-
首先尝试方案 3(流复制) - 如果您的视频本来就是 H.264 编码,这是最有效的方法
-
如果方案 3 不行,尝试方案 1(软件编解码) - 最通用的方案
-
根据诊断结果选择硬件加速方案 - 如果需要更好的性能
注意事项
-
在 Windows 路径中使用
D:\\rtsp_test\\(双反斜杠)或D:/rtsp_test/(正斜杠) -
确保 MediaMTX 或 RTSP 服务器正在运行在
localhost:8554 -
如果遇到音频问题,可以先用纯视频方案测试
建议您先从方案 1 开始测试,这是最通用的跨平台解决方案。
最终使用命令如下:
gst-launch-1.0 filesrc location=D:\\rtsp_test\\AdamGrosser_2007-light.mp4 ! qtdemux ! queue ! h264parse ! rtspclientsink location=rtsp://localhost:8554/mystream
rtsp推流,及播放验证OK。


参考:
windows环境下,搭建RTSP视频推流服务器:https://blog.csdn.net/EthanCo/article/details/125321957
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐

所有评论(0)