GstElement* encoder = gst_element_factory_make("mpph265enc", nullptr);
GstElement* parser = gst_element_factory_make("h265parse", nullptr);
GstElement* rtspSink = gst_element_factory_make("rtspclientsink", nullptr);
GstElement* queue2 = gst_element_factory_make("queue", NULL);
GstElement* queue3 = gst_element_factory_make("queue", NULL);
g_object_set(queue2, "max-size-buffers", 5,"leaky", 2, nullptr);
g_object_set(queue3, "max-size-buffers", 5,"leaky", 2, nullptr);
// 创建 rgaconvert 和 capsfilter
GstElement* videorate = gst_element_factory_make("videorate", NULL);
GstElement* capsFilter = gst_element_factory_make("capsfilter", NULL);
// 设置目标 caps 为 NV12
GstCaps* outCaps = gst_caps_new_simple("video/x-raw",
// "format", G_TYPE_STRING, "NV12",
// "width", G_TYPE_INT, 1920,
//"height", G_TYPE_INT, 1080,
"framerate", GST_TYPE_FRACTION, 30, 1,
NULL);
g_object_set(G_OBJECT(capsFilter), "caps", outCaps, NULL);
gst_caps_unref(outCaps); // 不再需要该对象
g_object_set(encoder,
"rc-mode", 1,
"bps", 600000,
"bps-max", 8000000,
"bps-min", 2000000,
// "iframe-interval", 30,
// "qp", 20,
// "level", 40,
// "profile", 1,
NULL);
g_object_set(rtspSink, "location", parameters.at("rtsp_url").c_str(), NULL);
// 添加所有元素到 pipeline
gst_bin_add_many(GST_BIN(m_pipeline),
branchTee, queue3, videorate, capsFilter, encoder, queue2, parser, rtspSink,
NULL);
if(! gst_element_link_many(branchTee, queue3, videorate, capsFilter,encoder, queue2,parser, rtspSink, nullptr)){
return;
}
开启推流时,会导致其他已经存在的分支出现问题,过一段时间才恢复正常