gpt4 book ai didi

c++ - C++ 中的 GStreamer 管道

转载 作者:行者123 更新时间:2023-12-01 16:06:33 35 4
gpt4 key购买 nike

我在终端中有一个正在运行的 GStreamer-1.0 管道,我正在尝试在 Mac/Xcode 上使用 GStreamer 1.0 在代码中复制它。

我的发送管道:

gst-launch-1.0 videotestsrc ! videoconvert ! x264enc ! rtph264pay config-interval=1 ! udpsink host=127.0.0.1 port=5000

我的接收管道:

gst-launch-1.0 -vvv udpsrc port=5000 caps="application/x-rtp" ! rtph264depay ! avdec_h264 ! videoconvert ! xvimagesink

这也可以通过以下 SDP 文件在 VLC 中播放:

v=0
m=video 5000 RTP/AVP 96
c=IN IP4 127.0.0.1
a=rtpmap:96 H264/90000

我创建了以下代码来复制上述内容,但问题是接收管道在运行此代码时不显示任何内容。该代码确实根据 Xcode 调试控制台向网络发送数据包。

gint
main (gint argc,
gchar *argv[])
{
GstElement *pipeline, *videosrc, *conv,*enc, *pay, *udp;

// init GStreamer
gst_init (&argc, &argv);
loop = g_main_loop_new (NULL, FALSE);

// setup pipeline
pipeline = gst_pipeline_new ("pipeline");

videosrc = gst_element_factory_make ("videotestsrc", "source");

conv = gst_element_factory_make ("videoconvert", "conv");

enc = gst_element_factory_make("x264enc", "enc");

pay = gst_element_factory_make("rtph264pay", "pay");
g_object_set(G_OBJECT(pay), "config-interval", 1, NULL);

udp = gst_element_factory_make("udpsink", "udp");
g_object_set(G_OBJECT(udp), "host", "127.0.0.1", NULL);
g_object_set(G_OBJECT(udp), "port", "5000", NULL);

gst_bin_add_many (GST_BIN (pipeline), videosrc, conv, enc, pay, udp, NULL);

if (gst_element_link_many (videosrc, conv, enc, pay, udp, NULL) != TRUE)
{
return -1;
}

// play
gst_element_set_state (pipeline, GST_STATE_PLAYING);

g_main_loop_run (loop);

// clean up
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (GST_OBJECT (pipeline));
g_main_loop_unref (loop);

return 0;
}

最佳答案

问题是端口参数应该是 int,所以我必须更改

g_object_set(G_OBJECT(udp), "port", "5000", NULL);

g_object_set(G_OBJECT(udp), "port", 5000, NULL);

有时很容易错过自己的简单错误。

关于c++ - C++ 中的 GStreamer 管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24633281/

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