Итак, это работает:
gst-launch-1.0 filesrc location=Truck.H264 ! tsdemux ! h264parse ! avdec_h264 ! xvimagesink
И это работает:
GstElement* pipeline = gst_parse_launch_full(
"gst-launch-1.0 filesrc location=Truck.H264 ! tsdemux ! h264parse ! avdec_h264 ! xvimagesink",
NULL, GST_PARSE_FLAG_NONE, NULL );
Но это не работает:
GstElement* pipeline = gst_pipeline_new(nullptr);
GstElement* filesrc = gst_element_factory_make("filesrc", nullptr);
g_object_set( G_OBJECT(filesrc), "location", "Truck.H264", NULL);
GstElement* tsdemux = gst_element_factory_make("tsdemux", nullptr);
GstElement* h264parse = gst_element_factory_make("h264parse", nullptr);
GstElement* avdec_h264 = gst_element_factory_make("avdec_h264", nullptr);
GstElement* xvimagesink = gst_element_factory_make("xvimagesink", nullptr);
gst_bin_add_many(GST_BIN(pipeline), filesrc, tsdemux, queue, h264parse, avdec_h264, xvimagesink, nullptr);
gst_element_link_many(filesrc, tsdemux, h264parse, avdec_h264, xvimagesink, nullptr);
Теперь в моем неопытном умеони все одинаковы и должны работать одинаково.Я думаю, что нет.
Поэтому я разбил ссылку на отдельные этапы и обнаружил, что проблема здесь:
gst_element_link(tsdemux, h264parse);
Я подумал, что gst_element_link не такой умный в gst_parse_launch_full и не делаетЯ знаю, какие пэды подключать, поэтому я попытался:
gst_element_link_pads(tsdemux,"video_%01x_%05x", h264parse, "sink");
И:
GstCaps* caps=gst_caps_new_simple("video/x-h264",
"stream-format",G_TYPE_STRING,"byte-stream",
"alignment",G_TYPE_STRING,"nal",
nullptr);
gst_element_link_filtered(tsdemux, h264parse, caps);
Но это не сработало.
Я пытался вставить очередь между tsdemuxи h264parse, но затем ошибка переместилась на связывание tsdemux и очереди:
gst_element_link(tsdemux, queue);
Я думал, что могу связать что-нибудь с очередью.Наверное, нет.
Я попробовал некоторые другие глупости, которые, как я думал, не сработали, и они не сработали, и теперь у меня нет идей.
Возможно, мне не хватает того, что знает каждый программист gstreamer.Если вы один из них, не могли бы вы поделиться им со мной?