Hallo Leute,
ich versuche gerade eine GStreamer Kette zu bauen und auf ihren Bus zu hören. Allerdings startet die Kette nicht, beziehungsweise ich schaffe es nicht, ihre einzelnen Kettenglieder zu verlinken.
Das müsste in etwa in der Kette:
enden. Führe ich die Kette so auf der Kommandozeile aus, bekomme ich keine Probleme. Stelle ich sich im oben genannten Code zusammen bekomme, meckert er beim linken der einzelnen Glieder. Allerdings habe ich keine Ahnung wo da das Problem liegt, weil ich keine Fehlerausgaben oder Debugausgaben bekomme. Ich weiss, dass ich auf der Kommandozeile mit --gst-debug-level=2 mir Debugausgaben anzeigen lassen kann, allerdings weiss ich nicht, wie das oben im Code angegeben werden soll. Ich bin für jede Hilfe dankbar.
Gruß
Der Wolf
ich versuche gerade eine GStreamer Kette zu bauen und auf ihren Bus zu hören. Allerdings startet die Kette nicht, beziehungsweise ich schaffe es nicht, ihre einzelnen Kettenglieder zu verlinken.
Code:
#include <iostream>
#include <gst/gst.h>
int
main(int argc, char* argv[]) {
gst_init(&argc, &argv);
GMainLoop *loop = g_main_loop_new(NULL, FALSE);
GstElement *pipeline = gst_pipeline_new("analyse");
GstBus *bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
// g_object_set(G_OBJECT(pipeline), "gst-debug-level", "2", NULL);
GstElement *source = gst_element_factory_make("filesrc", "src");
g_object_set(G_OBJECT(source), "location", argv[1], NULL);
// GstElement *source = gst_element_factory_make("alsasrc", "src");
// g_object_set(G_OBJECT(source), "device", "plug:hw:1", NULL);
GstElement *decoder = gst_element_factory_make("decodebin", "decoder");
GstElement *spectrum = gst_element_factory_make("spectrum", "spectrum");
GstElement *queue = gst_element_factory_make("queue", "queue1");
GstElement *audioconvert = gst_element_factory_make("audioconvert", "convert");
GstElement *sink = gst_element_factory_make("alsasink", "sink");
gst_bin_add_many(GST_BIN(pipeline), source, decoder, audioconvert, queue, spectrum, sink, NULL);
if (!gst_element_link_many(source, decoder, sink, NULL)) {
std::cout << "Could not link all elements together." << std::endl;
GstMessage *msg = gst_bus_poll(bus, GST_MESSAGE_ERROR, 0);
if (msg) {
GError *err = NULL;
gst_message_parse_error (msg, &err, NULL);
g_print ("ERROR: %s\n", err->message);
g_error_free (err);
gst_message_unref (msg);
} else {
std::cout << "No error message available." << std::endl;
}
return -1;
} else {
std::cout << "All linked together." << std::endl;
}
GstStateChangeReturn ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
if (ret == GST_STATE_CHANGE_FAILURE) {
GstMessage *msg;
g_print ("Failed to start up pipeline!\n");
/* check if there is an error message with details on the bus */
msg = gst_bus_poll (bus, GST_MESSAGE_ERROR, 0);
if (msg) {
GError *err = NULL;
gst_message_parse_error (msg, &err, NULL);
g_print ("ERROR: %s\n", err->message);
g_error_free (err);
gst_message_unref (msg);
}
}
g_main_loop_run (loop);
/* clean up */
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (pipeline);
}
Das müsste in etwa in der Kette:
Code:
gst-launch-0.10 filesrc location=<filelocation> ! decodebin ! alsasink
enden. Führe ich die Kette so auf der Kommandozeile aus, bekomme ich keine Probleme. Stelle ich sich im oben genannten Code zusammen bekomme, meckert er beim linken der einzelnen Glieder. Allerdings habe ich keine Ahnung wo da das Problem liegt, weil ich keine Fehlerausgaben oder Debugausgaben bekomme. Ich weiss, dass ich auf der Kommandozeile mit --gst-debug-level=2 mir Debugausgaben anzeigen lassen kann, allerdings weiss ich nicht, wie das oben im Code angegeben werden soll. Ich bin für jede Hilfe dankbar.
Gruß
Der Wolf