Streaming GStreamer rtp流到vlc

Streaming GStreamer rtp流到vlc,streaming,gstreamer,vlc,Streaming,Gstreamer,Vlc,我在弄清楚如何使用gstreamer创建一个简单的rtp流并在vlc上显示它时遇到了一些困难 我已经安装了GStreamer 0.10.30和VLC 1.1.3。我唯一的要求是使用MPEG4或H.264编解码器 现在,我可以通过以下简单的管道流式传输GStreamervideotestsrc: gst-launch videotestsrc ! ffenc_mpeg4 ! rtpmp4vpay ! udpsink host=127.0.0.1 port=5000 gst-launch udps

我在弄清楚如何使用gstreamer创建一个简单的rtp流并在vlc上显示它时遇到了一些困难

我已经安装了GStreamer 0.10.30和VLC 1.1.3。我唯一的要求是使用MPEG4或H.264编解码器

现在,我可以通过以下简单的管道流式传输GStreamervideotestsrc

gst-launch videotestsrc ! ffenc_mpeg4 ! rtpmp4vpay ! udpsink host=127.0.0.1 port=5000
gst-launch udpsrc uri=udp://127.0.0.1:5000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)1, config=(string)000001b001000001b58913000001000000012000c48d88007d0a041e1463000001b24c61766335322e3132332e30, payload=(int)96, ssrc=(uint)298758266, clock-base=(uint)3097828288, seqnum-base=(uint)63478" ! rtpmp4vdepay ! ffdec_mpeg4 ! autovideosink
输出客户端接收流所需的“上限”:

/GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)1, config=(string)000001b001000001b58913000001000000012000c48d8800f50a041e1463000001b24c61766335322e3132332e30, payload=(int)96, ssrc=(uint)365697461, clock-base=(uint)390754204, seqnum-base=(uint)10399
我还可以使用以下管道显示流:

gst-launch videotestsrc ! ffenc_mpeg4 ! rtpmp4vpay ! udpsink host=127.0.0.1 port=5000
gst-launch udpsrc uri=udp://127.0.0.1:5000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)1, config=(string)000001b001000001b58913000001000000012000c48d88007d0a041e1463000001b24c61766335322e3132332e30, payload=(int)96, ssrc=(uint)298758266, clock-base=(uint)3097828288, seqnum-base=(uint)63478" ! rtpmp4vdepay ! ffdec_mpeg4 ! autovideosink
但当我尝试用vlc接收流时:

vlc -vvv rtp://127.0.0.1:5000

我什么也没有得到…

我已经解决了这个问题,它只需要一个如下的sdp文件:

v=0
m=video 5000 RTP/AVP 96
c=IN IP4 127.0.0.1
a=rtpmap:96 MP4V-ES/90000
以及rtpmp4vpay元素的选项“send config=true”:

gst-launch videotestsrc ! ffenc_mpeg4 ! rtpmp4vpay send-config=true ! udpsink host=127.0.0.1 port=5000
然后,它就可以玩了

vlc <filename>.sdp
vlc.sdp

如何为H264和新的gstreamer(windows)提供支持

sdp文件:

v=0
m=video 5000 RTP/AVP 96
c=IN IP4 127.0.0.1
a=rtpmap:96 H264/90000

有关其他编解码器,请参阅RFC链接中的相应SDP示例问题:此文件的路径、文件名以及您刚刚在gstreamer中编辑的配置文件在哪里?有效负载=(int)96是什么意思?我如何知道您的流式处理命令正在使用此设置/caps“/GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink:(…)”. 您从何处获得此信息?对于未来的用户:您可能会收到一条错误消息,表示不存在类似
ffenc\u mpeg4
的元素。只需将
ffenc\u mpeg4
ffdec\u mpeg4
分别替换为
avenc\u mpeg4
avdec\u mpeg4
。我发现了如何为任何编解码器编写sdp文件。请参阅然后转到具有SDP语法示例的共同响应RFC链接这是一种值得多次投票的行为。这个问题与我非常相关,但如果没有自我回答,它将是一种无用的。使用gstreamer 1.0,行应该是
gst launch videotestsrc!ffenc_mpeg4!rtpmp4vpay配置间隔=3!udpsink host=127.0.0.1端口=5000
其中
config interval=3
是以秒为单位发送配置数据的间隔<代码>发送配置现在已不推荐使用。如何为MJPEG流生成SDP文件?rfc2435似乎太大了。另外,
rtpjpegpay
没有像
send config
这样的选项。因为使用127.0.0.1并不清楚,我只是想提一下:在多机器环境中,这将导致您的客户端(VLC或其他)打开入站端口(因此可能需要防火墙规则),流将发送给它。此解决方案并没有为您提供让多个VLC客户端轻松连接到单个端点的方法。(这让我有点困惑)。你输入了错误的端口号,否则它是经过测试的,但是使用x264enc(Linux上)。。关于RFC和OSX等价物的好提示:
gst-launch-1.0videotestsrc!vtenc_h264!RTPH264支付配置间隔=10 pt=96!udpsink主机=127.0.0.1端口=5000
(而不是
openh264enc