为什么gstreamer瓶盖堵塞了管道

为什么gstreamer瓶盖堵塞了管道,gstreamer,Gstreamer,我正在尝试下面的基本管道。如果我在没有caps函数的情况下运行管道,它将直接通过(假设I/O格式相同)。一旦我添加了封盖,预滚开始,但视频不会继续到接收器输出 我是不是编错了 thx 艺术 #包括 #包括 静态空隙 在键盘上添加(GstElement*元素, GstPad*焊盘, gpointer数据) { GstPad*下沉板; GstElement*解码器=(GstElement*)数据; g_print(“创建动态焊盘,链接输出/输入”); sinkpad=gst_元素_get_静态_pa

我正在尝试下面的基本管道。如果我在没有caps函数的情况下运行管道,它将直接通过(假设I/O格式相同)。一旦我添加了封盖,预滚开始,但视频不会继续到接收器输出

我是不是编错了

thx 艺术

#包括
#包括
静态空隙
在键盘上添加(GstElement*元素,
GstPad*焊盘,
gpointer数据)
{
GstPad*下沉板;
GstElement*解码器=(GstElement*)数据;
g_print(“创建动态焊盘,链接输出/输入”);
sinkpad=gst_元素_get_静态_pad(译码器,“接收器”);
gst_垫_链接(垫、下沉垫);
gst_object_unref(下沉板);
}
int
主(内部argc,
字符*argv[]
{
GMainLoop*循环;
gboolean链接正常;
GstElement*管道、*源、*解码器、*ffcs、*vidsc、*capsfout、*sink;
GstBus*总线;
GSTCAP*上限;
/*初始化*/
gst_init(&argc,&argv);
loop=g_main_loop_new(NULL,FALSE);
/*创建gstreamer元素*/
管道=gst_管道_新(“视频播放器”);
来源=gst元素工厂制造(“文件来源”);
解码器=商品及服务税(gst)、元件、工厂、制造商(“decodebin2”、“dec-bin2”);
ffcs=gst元素工厂制造(“ffmpegcolorspace”、“ffcs”);
vidsc=商品及服务税(gst)、元件、工厂制造(“视频秤”、“vidsc”);
capsfout=gst元素工厂制造(“capsfilter”、“capsfout”);
接收器=gst元素工厂制造(“文件链接”、“视频输出”);
如果(!管道| | |!源| |!解码器| |!ffcs | |!vidsc | |!capsfout | |!接收器){
g_printerr(“无法创建一个元素。正在退出。\n”);
返回-1;
}
/*我们将输入/输出文件名设置为源元素*/
g_对象集(g_对象(源),“位置”,argv[1],空);
g_object_set(g_object(sink),“location”,argv[2],NULL);
总线=gst_管道_获取_总线(gst_管道(管道));
gst_bin_add_many(gst_bin(管道),
信源、解码器、ffcs、视频监控、capsfout、接收器、空);
/*我们将这些元素连接在一起*/
gst_元素_链路(源、解码器);
gst_元素_链路(解码器、ffcs);
gst元素链接(ffcs、vidsc);
caps=gst\u caps\u new\u simple(“视频/x-raw-yuv”,
“格式”、商品及服务税类型、商品及服务税品牌(I、4、2、0),
“宽度”,G_TYPE_INT,384,
“高度”,G_TYPE_INT,216,
“帧率”,GST_类型_分数,25,1,
无效);
链路\确定=gst \元素\链路\过滤(视频监控、接收器、电容);
gst_caps_unref(caps);
如果(!link_ok){
g_警告(“无法将vidsc链接到接收器!”);
}否则{
g_print(“似乎正常,未报告错误?\n”);
}
/*将管道设置为“正在播放”状态*/
g_print(“正在播放:%s\n”,argv[1]);
gst元素设置状态(管道、gst状态);
/*迭代*/
g_打印(“运行…\n”);
g_主循环运行(循环);
/*离开主回路,好好清理*/
g_print(“返回,停止播放”);
gst\元素\集合\状态(管道,gst\状态\空);
g_print(“删除管道”);
gst_对象_unref(gst_对象(管道));
返回0;
}

您需要capsfilter的原因是什么?仅约束所需的属性。例如,您设置了帧速率,但在capsfilter之前没有videorate元素。如果您不关心帧速率(例如,只想强制一个大小),请从capsfilter上设置的上限中删除帧速率。

回答可能会晚些,但您可能忘记了在某些元素之间进行动态pad链接,并且您从未调用添加的
功能。我也有同样的问题

从那以后你有没有尝试过添加它?例如,此行用于动态链接两个元素,而不是
gst\u element\u link

g_signal_connect (decoder, "pad-added", G_CALLBACK (on_pad_added), ffcs);
g_signal_connect (decoder, "pad-added", G_CALLBACK (on_pad_added), ffcs);