Administrator
|
do you have to link the elements a certain way? can i just take each of the elements and connect them accordingly or no? I have converted command line to code before but this one I wondered if it works differently. gst-launch-1.0 -e concat name=c ! h264parse ! mp4mux name=mux ! filesink location=testing.mp4 concat name=c2 ! aacparse ! mux.audio_1 filesrc location=[1] ! qtdemux name=dem1 ! queue ! c. dem1.audio_0 ! queue ! c2. filesrc location=[2] ! qtdemux name=dem2 ! queue ! c. dem2.audio_0 ! queue ! c2. filesrc location=[3] ! qtdemux name=dem3 ! queue ! c. dem3.audio_0 ! queue ! c2. filesrc location=[4] ! qtdemux name=dem4 ! queue ! c. dem4.audio_0 ! queue ! c2.
------------------------------
Gstreamer 1.14.4 ------------------------------ Windows Sent from the GStreamer-devel mailing list archive at Nabble.com. _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
------------------------------
Gstreamer 1.16.2 ------------------------------ Windows |
Le mercredi 31 octobre 2018 à 12:30 -0500, killerrats a écrit :
> do you have to link the elements a certain way? can i just take each > of the elements and connect them accordingly or no? I have converted > command line to code before but this one I wondered if it works > differently. > gst-launch-1.0 -e concat name=c ! h264parse ! mp4mux name=mux ! filesink location=testing.mp4 \ > concat name=c2 ! aacparse ! mux.audio_1 \ > filesrc location=[1] ! qtdemux name=dem1 ! queue ! c. \ > dem1.audio_0 ! queue ! c2. \ > filesrc location=[2] ! qtdemux name=dem2 ! queue ! c. \ > dem2.audio_0 ! queue ! c2. \ > filesrc location=[3] ! qtdemux name=dem3 ! queue ! c. \ > dem3.audio_0 ! queue ! c2. \ > filesrc location=[4] ! qtdemux name=dem4 ! queue ! c. \ > dem4.audio_0 ! queue ! c2. concatenated. I don't know if you can trust the parser here. If you mix up the linking, this pipeline will also stall. Another note, this pipeline can only work if both audio/video tracks in each source files are exactly the same duration (they are often not). Nicolas _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel signature.asc (201 bytes) Download Attachment |
Administrator
|
In reply to this post by killerrats
Success on building the pipeline to code. Just have to put each filesrc
elements in a list and pass to the pad-added function from demux and works. Have to also connect the queue to the concat elements audio and video side. There is a limit on storage because it seems to halt at a certain time. have to figure that out. seems to be at different amounts of storage. it could do 10 files with 10 megabytes each. Different time I could only combine 3 of 50 megabyte files. So don't know what the difference is. Any one know? class filesrcElements { public: GstElement* filesrc ,* qtdemux ,* queue1 ,* queue2; std::string queue1Name, queue2Name, qtdemuxName, filesrcName,filesrcLocation; }; bool VideoPipeline::SetupFilesrcElements() { if (this->aFiles.size() == 0) return false; GstPad* srcPad, *sinkPad; GstElement* concat = gst_bin_get_by_name(GST_BIN(this->srcPipeline), "concat1") ,* concat2 = gst_bin_get_by_name(GST_BIN(this->srcPipeline),"concat2"); std::string filesrcPipe; std::list<std::string>::iterator it = this->aFiles.begin(); unsigned int index = 0; for (; it != this->aFiles.end(); it++) { AddToConsoleOutputList("File: " + *it); ++index; filesrcElements file; ++this->concatPadNumber; ++this->queueCount; std::string demuxName = "dem" + std::to_string(index); std::string filesrcName = "filesrc" + std::to_string(index); std::string queue1Name = "queue" + std::to_string(queueCount); ++queueCount; std::string queue2Name = "queue" + std::to_string(queueCount); file.filesrcName = filesrcName; file.qtdemuxName = demuxName; file.queue1Name = queue1Name; file.queue2Name = queue2Name; file.queue1 = this->AssignElement("queue", queue1Name); file.queue2 = this->AssignElement("queue", queue2Name); file.filesrc = this->AssignElement("filesrc", filesrcName); file.qtdemux = this->AssignElement("qtdemux", demuxName); g_object_set(G_OBJECT(file.filesrc), "location", (*it).c_str(), NULL); gst_bin_add_many(GST_BIN(this->srcPipeline), file.filesrc, file.qtdemux,file.queue1,file.queue2, NULL); gst_element_link(file.filesrc, file.qtdemux); sinkPad = gst_element_get_request_pad(concat, ("sink_"+std::to_string(concatPadNumber)).c_str()); srcPad = gst_element_get_static_pad(file.queue1, "src"); gst_pad_link(srcPad, sinkPad); gst_object_unref(srcPad); gst_object_unref(sinkPad); sinkPad = gst_element_get_request_pad(concat2, ("sink_" + std::to_string(concatPadNumber)).c_str()); srcPad = gst_element_get_static_pad(file.queue2, "src"); gst_pad_link(srcPad, sinkPad); gst_object_unref(srcPad); gst_object_unref(sinkPad); //list so gstreamer has reference to this->filesSources.push_back(file); // signal from demux and pass the file that was just added to be connected to queues g_signal_connect(file.qtdemux, "pad-added", G_CALLBACK(qtdemux_pad_added_cb), &this->filesSources.back()); } return true; } void VideoPipeline::qtdemux_pad_added_cb(GstElement* element, GstPad* pad, gpointer user_data) { gchar *name; GstCaps * p_caps; GstElement* nextElement = NULL; filesrcElements* file = static_cast<filesrcElements*>(user_data); name = gst_pad_get_name(pad); //g_print("A new pad %s was created\n", name); p_caps = gst_pad_get_pad_template_caps(pad); if (strstr(name, "video") != NULL) { std::cout << "\n------------------------ Video -------------------------------\n"; if (!gst_element_link_pads_filtered(element, name,file->queue1 , "sink",p_caps)) { std::cout << "\nFailed to link video element to src to sink\n"; } } else if (strstr(name, "audio") != NULL) { std::cout << "\n------------------------ Audio -------------------------------\n"; if (!gst_element_link_pads_filtered(element, name, file->queue2, "sink", p_caps)) { std::cout << "\nFailed to link video element to src to sink\n"; } } g_free(name); gst_caps_unref(p_caps); } ----- ------------------------------ Gstreamer 1.14.4 ------------------------------ Windows -- Sent from: http://gstreamer-devel.966125.n4.nabble.com/ _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
------------------------------
Gstreamer 1.16.2 ------------------------------ Windows |
Free forum by Nabble | Edit this page |