gst-launch适用于fakesink但不支持autovideosink

时间:2016-02-22 09:46:04

标签: gstreamer

我正在试图弄清楚如何在GStreamer(1.4.4)中创建一个非常简单的playbin之外的管道。我有一个流被输入GTK + DrawingArea小部件,但它目前正在装箱,而我想试验扩展的视频流以适应整个小部件。

为此,我使用了gst-launch-1.0应用,但我发现最后fakesink似乎有用,但autovideosink没有。这两个管道是(X是IP摄像机的rtspt:// URI):

gst-launch-1.0 rtspsrc location=X ! rtph264depay ! h264parse ! decodebin ! fakesink
gst-launch-1.0 rtspsrc location=X ! rtph264depay ! h264parse ! decodebin ! autovideosink

换句话说,的区别在于接收器本身。看来,无论哪里我放置了接收器(即使它只是一个rtspsrc location=X ! sink),问题仍然存在,并且该问题表现为:

rtspsrc gstrtspsrc.c:5074:gst_rtspsrc_loop<rtspsrc0> error: Internal data flow error
rtspsrc gstrtspsrc.c:5074:gst_rtspsrc_loop<rtspsrc0> streaming task paused, reason not-linked (-1)

我尝试在较高的调试级别运行,但输出似乎没有超出已经给出的警告的任何有用信息。

请注意,以下两个命令都可以正常工作:

gst-play-1.0 X
gst-launch-1.0 playbin uri=X

但是,正如所讨论的那样,我真的不想要playbin,因为我想在管道中安装自己的视频缩放器。

我(虽然有限)理解是rtph264depay删除了不必要的RTSP协议内容,h264parse解码H.264数据,decodebin自动神奇地选择正确的解码器和autovideosink选择正确的接收器来显示流。

我不完全确定在第五阶段改变某些东西会影响第一阶段的工作方式。

那么为什么假水槽可以工作但是自动选择不起作用呢?

1 个答案:

答案 0 :(得分:2)

在autovideosink之前添加videoconvert将使其正常工作。

gst-launch-1.0 rtspsrc location=X ! rtph264depay ! h264parse ! decodebin ! videoconvert ! autovideosink

原因是sink元素不支持解码的格式输出,从而导致错误“流媒体任务暂停,原因未链接”。

fakesink是不同的。它只是丢弃数据,而不关心格式,因此不会出现此错误。

playbin可以播放,因为它会在需要时自动添加转换元素。