Streaming 如何使用Gstreamer通过RTMP传输数据?

Streaming 如何使用Gstreamer通过RTMP传输数据?,streaming,gstreamer,rtmp,wowza,Streaming,Gstreamer,Rtmp,Wowza,我试图使用Gstreamer将视频和音频流传输到RTMP服务器(Wowza),但存在许多问题 几乎没有关于如何正确使用rtmpsink(一种通过RTMP将媒体发送到指定服务器的插件)的文档。不仅如此,目前制作与rtmpsink兼容的正确Gstreamer管道仅仅是一个试错练习 我目前的Gstreamer管道是: sudo gst-launch-1.0 -e videotestsrc ! queue ! videoconvert ! x264enc ! flvmux streamable=true

我试图使用Gstreamer将视频和音频流传输到RTMP服务器(Wowza),但存在许多问题

几乎没有关于如何正确使用
rtmpsink
(一种通过RTMP将媒体发送到指定服务器的插件)的文档。不仅如此,目前制作与
rtmpsink
兼容的正确Gstreamer管道仅仅是一个试错练习

我目前的Gstreamer管道是:

sudo gst-launch-1.0 -e videotestsrc ! queue ! videoconvert ! x264enc ! flvmux streamable=true ! queue ! rtmpsink location='rtmp://<ip_address>/live live=true'
由于Wowza端缺乏文档,另一个问题实际上是pin将正确的ip地址指向点
rtmpsink
at,并且Gstreamer端缺乏文档,除了在一些论坛上找到的一些示例之外,由于其他变量,无法确认RTMP身份验证是否有效


使用
rtmpsink
通过RTMP进行流式处理的正确Gstreamer管道是什么?我如何正确实现
rtmpsink
,无论是否使用身份验证?

实际上,您使用的管道工作正常

然而,禁用Wowza的RTMP安全性是必须的,也指向了正确的安全方向

遵循下一页的指导原则:

  • 重新检查应用程序播放类型中是否启用了RTMP:

  • 禁用所有安全选项以确保GStreamer兼容性

  • 在“播放安全性”选项卡中,检查是否未选择任何客户端限制(默认情况下已选择)

  • 在“源”选项卡的左列中,可以检查服务器设置:

完成所有这些步骤后,我们可以启动之前的管道:

gst-launch-1.0 -e videotestsrc ! queue ! videoconvert ! x264enc ! flvmux streamable=true ! queue ! rtmpsink location='rtmp://192.168.1.40:1935/livertmp/myStream'
它可以工作,并且可以通过点击“测试玩家”按钮来检查结果。结果如下:

虽然可能超出范围,但可以将音频添加到管道并通过添加缺少的某些属性来改进:

gst-launch-1.0 videotestsrc is-live=true ! videoconvert ! x264enc bitrate=1000 tune=zerolatency ! video/x-h264 ! h264parse ! video/x-h264 ! queue ! flvmux name=mux ! rtmpsink location='rtmp://192.168.1.40:1935/livertmp/myStream' audiotestsrc is-live=true ! audioconvert ! audioresample ! audio/x-raw,rate=48000 ! voaacenc bitrate=96000 ! audio/mpeg ! aacparse ! audio/mpeg, mpegversion=4 ! mux.

关于密码加密内容,使用GStreamer实现它并不简单。

感谢您的回复。在启动管道
sudo gst-launch-1.0-e videotestsrc时,我已经完全遵循了您的指示!队列视频转换!x264enc!flvmux streamable=true!队列rtmpsink位置rtmp://192.168.78.10:1935/live/myStream“
会产生与前面所述相同的行为。但是,通过附加观察,将其指向Wowza服务器的公共ip地址会立即出现上述错误,但使用本地ip
192.168.78.10
(由Wowza提供)会导致其在抛出相同错误之前尝试工作一分钟左右。感谢帮助。原来防火墙阻止了端口1935上的通信,因此无法通过RTMP进行连接。另一个后续问题是,我有一个管道
sudo gst-launch-1.0 shmsrc socket path=/tmp/mixer1 do timestamp=true is live=true!'视频/x-raw,格式=BGRA,像素纵横比=1/1,隔行模式=渐进式,帧速率=24/1,宽度=1024,高度=576'!视频转换!x264enc比特率=1024!h264parse!flvmux name=mux streamable=true!rtmpsink位置rtmp://192.168.78.10:1935/live/RTMPStream“
报告它正在接收数据,但只播放一个黑屏。将其更改为
udpsink
,并通过VLC成功播放。你知道问题是什么吗?
gst-launch-1.0 videotestsrc is-live=true ! videoconvert ! x264enc bitrate=1000 tune=zerolatency ! video/x-h264 ! h264parse ! video/x-h264 ! queue ! flvmux name=mux ! rtmpsink location='rtmp://192.168.1.40:1935/livertmp/myStream' audiotestsrc is-live=true ! audioconvert ! audioresample ! audio/x-raw,rate=48000 ! voaacenc bitrate=96000 ! audio/mpeg ! aacparse ! audio/mpeg, mpegversion=4 ! mux.