【问题标题】:gst-launch works with fakesink but not autovideosinkgst-launch 适用于 fakesink 但不适用于 autovideosink
【发布时间】: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


    【解决方案1】:

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

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

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

    fakesink 是不同的。它只是丢弃数据,不关心格式,所以它不会出现这个错误。

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

    【讨论】:

    • 谢谢你,玛蒂尔达。我实际上认为autovideosink 是那些“神奇”的之一(比如playbin 本身),它只是添加了让它工作所需的东西:-) 但是,显然不是。我今天不在办公室,但明天会检查并告诉你进展如何。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多