appsrc!视频转换!视频尺度!视频/x-raw,格式=BGR,宽度=2448,高度=2048,帧率=21/1!视频转换!打开h264enc! h264解析! rtph264支付! udpsink主机=127.0.0.1端口=10001
上面的管道是将视频从我的 RTP 服务器发送到 UDP 接收器的管道。
Powershell > ./gst-launch-1.0.exe udpsrc 地址=127.0.0.1 端口=10001 caps =“应用程序/ x-rtp,媒体=(字符串)视频,时钟速率=(int)90000, 编码名称=(string)H264,有效负载=(int)96"!rtph264depay! h264解析!打开h264dec!队列 !自动视频接收器
上面的 gstreamer 执行命令是从我的应用程序服务器流视频。当我运行此命令时,Windows powershell 中会输出以下内容:
使用Windows高分辨率时钟,精度:1 ms
将管道设置为暂停...
管道已上线,不需要 PREROLL ...
从元素“autovideosink0”获取上下文:gst.d3d11.device.handle=context, 设备=(GstD3D11Device)"(GstD3D11Device)\ d3d11device2", 适配器=(uint)0,适配器luid=(gint64)86769,设备id=(uint)5567, 供应商 ID =(uint)4098,硬件 =(布尔)true, 描述=(字符串)“AMD\ Radeon(TM)\ 780M”;
管道已预铺...
将管道设置为“播放”...
新时钟:GstSystemClock
大约 30 秒后,一个名为“Direct3D11 渲染器”的窗口运行,并在此处输出视频。
我创建了一个 .sdp 文件来在 VLC 上播放上述流媒体,但是虽然它在 VLC 中连接,但没有视频输出并且再次暂停。
.sdp 文件
v=0
o=- 0 0 IN IP4 127.0.0.1
s=GStreamer H264 stream
c=IN IP4 127.0.0.1
m=video 10001 RTP/AVP 96
a=rtpmap:96 H264/90000
有什么问题吗?
VLC 3.0 中 UDP mtu 限制为 1316,您可以在 OBS 端通过将地址设置为“udp://1.2.3.4:4242?pkt_size=1316”来设置数据包大小
不过,我建议您在 OBS 端使用“rtp_mpegts”作为容器,在 VLC 端使用 rtp://@1.2.3.4:4242 而不是使用原始 UDP。请务必使用偶数端口号。
参考:https://forum.videolan.org/viewtopic.php?t=143484#p470409
我的VLC版本是3.0.20。根据上面的答案,在服务器端更改了数据包大小和端口号,现在可以在 VLC 中观看视频了。
来自 RTP 服务器的修改管道:
appsrc!视频转换!视频尺度!视频/x-raw,格式=BGR,宽度=2448,高度=2048,帧率=21/1!视频转换! openh264enc 比特率=2000 ! h264解析! rtph264pay mtu=1316 配置间隔=1! udpsink 主机 = 127.0.0.1 端口 = 10002 同步 = false 异步 = false