GStreamer RTP 全双工视频输入/输出,带单个 rtpbin

发布于 2024-12-01 06:52:19 字数 585 浏览 1 评论 0原文

我正在尝试使用 rtpbin 创建 gstreamer 管道以双向传输网络摄像头(视频电话)。但是,我什至无法使 rtpbin 使用像下面这样的简单代码片段工作,该代码片段仅获取网络摄像头源并输出流,然后其他 udpsrc 捕获 RTP 数据包并显示。所有本地主机。当分成两个管道并分别启动时,它就可以工作。然而,事实并非如此。我觉得它与线程有关,但是我被困在这里,因为到目前为止没有队列对我有用。 基本上,我需要的是显示传入的视频流并将我的网络摄像头视频流传输到远程方。

gst-启动-v \ gstrtpbin名称=rtpbin \ udpsrc caps =“应用程序/ x-rtp,媒体=(字符串)视频,时钟速率=(int)90000,编码名称=(字符串)H263”端口= 5000! rtpbin。 \ rtpbin。 ! rtph263depay! ffdec_h263! ffmpeg颜色空间! xvimagesink \ v4l2src !视频/x-raw-yuv,帧率=30/1,宽度=320,高度=240!视频尺度!视频率! “视频/x-raw-yuv,宽度=352,高度=288,帧率=30/1”! ffenc_h263! rtph263付费! rtpbin。 \ rtpbin。 ! udpsink 端口=5000

I'm trying to create gstreamer pipeline with rtpbin to stream webcam both way (videophone). However, I am not even able to make rtpbin work with simple snippet like below which just takes webcam source and streams out, then other udpsrc captures RTP packets and displays. All localhost. When splitted to two pipes and launched separately, it works. This, however, not. I feel it has something with threading, however I am stucked here as no queue worked for me so far.
Basically, what I need is displaying incomming videostream and stream out my webcam videostream out to remote party.

gst-launch -v \
gstrtpbin name=rtpbin \
udpsrc caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H263" port=5000 ! rtpbin. \
rtpbin. ! rtph263depay ! ffdec_h263 ! ffmpegcolorspace ! xvimagesink \
v4l2src ! video/x-raw-yuv, framerate=30/1, width=320, height=240 ! videoscale ! videorate ! "video/x-raw-yuv,width=352,height=288,framerate=30/1" ! ffenc_h263 ! rtph263pay ! rtpbin. \
rtpbin. ! udpsink port=5000

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

星軌x 2024-12-08 06:52:19

好吧,我必须回答自己,将sync=false async=false 添加到udpsink 就足够了:

gst-launch -v \
gstrtpbin name=rtpbin udpsrc caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H263" port=5000 !队列 ! rtpbin。 \
rtpbin。 ! rtph263depay! ffdec_h263! ffmpeg颜色空间! xvimagesink \
v4l2src !视频/x-raw-yuv,帧率=30/1,宽度=320,高度=240!视频尺度!视频率! “视频/x-raw-yuv,宽度=352,高度=288,帧率=30/1”! ffenc_h263! rtph263付费! rtpbin。 \
rtpbin。 ! udpsink 端口=5000 sync=false async=false

Ok, I have to answer to myself, it was enough to add sync=false async=false to the udpsink:

gst-launch -v \
gstrtpbin name=rtpbin udpsrc caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H263" port=5000 ! queue ! rtpbin. \
rtpbin. ! rtph263depay ! ffdec_h263 ! ffmpegcolorspace ! xvimagesink \
v4l2src ! video/x-raw-yuv, framerate=30/1, width=320, height=240 ! videoscale ! videorate ! "video/x-raw-yuv,width=352,height=288,framerate=30/1" ! ffenc_h263 ! rtph263pay ! rtpbin. \
rtpbin. ! udpsink port=5000 sync=false async=false

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文