【发布时间】:2016-02-24 10:10:29
【问题描述】:
我试图弄清楚如何在 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 选择正确的用于显示流的接收器。
我不完全确定在管道的第五阶段进行更改会如何影响第一阶段的工作方式。
那么为什么假水槽可以工作,而自动选择的水槽却不行呢?
【问题讨论】:
标签: gstreamer