ffmpeg推流测试

发布于:2025-09-14 ⋅ 阅读:(15) ⋅ 点赞:(0)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

环境信息:
摄像头:usb摄像头 (拼多多20多块钱,在windows上,linux上驱动有问题,显示不正常)

ffmpeg -list_devices true -f dshow -i dummy

[dshow @ 000001d2704e4940] "Wed Camera" (video) [dshow @ 000001d2704e4940] Alternative name "@device_pnp_\\?\usb#vid_32e6&pid_9221&mi_00#7&26eff30a&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
windows11: ffmpeg ffmpeg version 8.0-full_build-www.gyan.dev Copyright © 2000-2025 the FFmpeg developers built with gcc 15.2.0 (Rev8, Built by MSYS2 project)
linux 虚拟机 ubuntu 22.04 : ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright © 2000-2021 the FFmpeg developers


提示:以下是本篇文章正文内容,下面案例可供参考

一、操作步骤

1.测试1

windows下使用ffmpeg推摄像头的流,到linux端显示:
摄像头在windows上 windows -> linux

video_ffmpeg.sdp

lxt@lxt-ubuntu:~/video_test$ cat video_ffmpeg.sdp 
v=0
o=- 0 0 IN IP4 127.0.0.1
s=H.264 Video Stream
c=IN IP4 192.168.3.10
t=0 0
m=video 10000 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1

c=IN IP4 192.168.3.10	媒体连接地址:本机监听此 IP 的 UDP
m=video 10000 RTP/AVP 96	视频流使用端口 10000,payload type 96
a=rtpmap:96 H264/90000	payload type 96 对应 H.264 编码,时钟频率 90000 Hz
a=fmtp:96 packetization-mode=1	H.264 分包模式为 1(支持分片,适合网络传输)

播放命令:
ffplay -protocol_whitelist file,rtp,udp video_ffmpeg.sdp

windows:
列出摄像头设备
ffmpeg -list_devices true -f dshow -i dummy

开始推流:
ffmpeg -f dshow -video_size 1280x720 -framerate 30 -i video=“Wed Camera” -c:v libx264 -preset veryfast -f rtp rtp://<192.168.3.10>:10000

ffmpeg	调用 FFmpeg 主程序
-f dshow	指定输入设备格式为 DirectShow(Windows 专用,用于摄像头、麦克风等)
-video_size 1280x720	设置摄像头采集的分辨率为 1280×720
-framerate 30	设置采集的帧率为 30 fps(每秒30帧)
-i video="Wed Camera"	指定输入源为名为 "Wed Camera" 的视频设备(你的摄像头)
-c:v libx264	指定视频编码器为 libx264(即 H.264 编码)
-preset veryfast	编码速度预设:编码速度很快,压缩率适中,适合实时推流(比 ultrafast 稍慢但压缩更好)
-f rtp	指定输出格式为 RTP 协议(Real-time Transport Protocol,用于实时音视频传输)
rtp://192.168.3.10:10000	指定 RTP 流发送到 IP 为 192.168.3.10 的主机,端口为 10000

注意:
命令失败的时候可能摄像头已经出错了,可以插拔下摄像头再执行。

2.测试2

windows下使用ffmpeg推摄像头的流,到linux端,linux收到转发给另一个windows:
摄像头在windows上 windows -> linux -> windows

由测试1的命令windows推流

linux命令:
ffmpeg -protocol_whitelist file,udp,rtp -i video_ffmpeg.sdp -c:v copy -f rtp rtp://192.168.3.11:10002

windows 电脑2上 接收设置
ffplay -protocol_whitelist file,rtp,udp -i video_relay.sdp
video_ffmpeg.sdp

v=0
o=- 0 0 IN IP4 127.0.0.1
s=Relayed H.264 Stream
c=IN IP4 0.0.0.0
t=0 0
m=video 10002 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1

总结

介绍了ffmpeg再windows和linux上推流显示usb摄像头画面操作。