gpt4 book ai didi

video-streaming - Gstreamer 管道 - 在单独的进程中生产和使用输出

转载 作者:行者123 更新时间:2023-12-05 03:59:04 24 4
gpt4 key购买 nike

我想要两个独立的 gstreamer 管道,一个产生视频输出,另一个使用它。 生产者在 Docker 容器中,而消费者在主机上运行。为此,我试图获得与 gst-launch 一起工作的最基本的东西工具,但无论如何我都无法让它工作。例如,这在接收端失败并显示 ERROR: from element/GstPipeline:pipeline0/GstRtpVRawDepay:rtpvrawdepay0: No RTP format was negotiated.:

# process to produce video stream:
gst-launch-1.0 --gst-debug-level=3 \
videotestsrc ! videoconvert \
! rtpvrawpay ! udpsink host=127.0.0.1 port=5600

# process to consume it (and display it):
gst-launch-1.0 --gst-debug-level=3 \
udpsrc port=5600 \
! rtpvrawdepay ! videoconvert ! autovideosink

...令我感到困惑的是,我确实设法开始使用看似复杂得多的设置:

# produce:
gst-launch-1.0 filesrc location=/path/to/my.mp4 \
! decodebin ! videoconvert \
! x264enc tune=zerolatency \
! rtph264pay \
! udpsink host=127.0.0.1 port=5600

# consume:
gst-launch-1.0 -vc udpsrc port=5600 close-socket=false multicast-iface=false auto-multicast=true \
! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 \
! fpsdisplaysink sync=false async=false --verbose

(注意:第二个示例中的特殊接收器类型无关紧要,使用 autovideosink 也可以正常工作。)

最佳答案

看来您想在同一台主机上执行此操作。太好了,这样我们就可以忘记网络协议(protocol)和传输的复杂性了。

GStreamer 提供了不同的方法来做到这一点。我建议看看 gdp 插件:

Plugin Details:
Name gdp
Description Payload/depayload GDP packets
Filename /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstgdp.so
Version 1.16.0
License LGPL
Source module gst-plugins-bad
Source release date 2019-04-19
Binary package GStreamer Bad Plugins (Debian)
Origin URL http://packages.qa.debian.org/gst-plugins-bad1.0

gdpdepay: GDP Depayloader
gdppay: GDP Payloader

2 features:
+-- 2 elements

结合 shm 插件:

Plugin Details:
Name shm
Description shared memory sink source
Filename /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstshm.so
Version 1.16.0
License LGPL
Source module gst-plugins-bad
Source release date 2019-04-19
Binary package GStreamer Bad Plugins (Debian)
Origin URL http://packages.qa.debian.org/gst-plugins-bad1.0

shmsink: Shared Memory Sink
shmsrc: Shared Memory Source

2 features:
+-- 2 elements

这样做可以让您在进程之间传递完整的 GstBuffer 数据。这意味着所有时间戳、标志等。

所以基本上制作人会做这样的事情:

.. ! gdppay ! shmsink

和消费者:

shmsrc ! gdpdepay ! ..

相应地设置属性和套接字路径..

我想通过 filesink/filesrc 的常规文件/管道可以工作,但我还没有尝试过..

关于video-streaming - Gstreamer 管道 - 在单独的进程中生产和使用输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57506349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com