Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <gst/gst.h>
- #include <glib.h>
- static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data)
- {
- GMainLoop *loop = (GMainLoop *) data;
- switch (GST_MESSAGE_TYPE (msg)) {
- case GST_MESSAGE_EOS:
- g_print ("End of stream\n");
- g_main_loop_quit (loop);
- break;
- case GST_MESSAGE_ERROR: {
- gchar *debug;
- GError *error;
- gst_message_parse_error (msg, &error, &debug);
- g_free (debug);
- g_printerr ("Error: %s\n", error->message);
- g_error_free (error);
- g_main_loop_quit (loop);
- break;
- }
- default:
- break;
- }
- return TRUE;
- }
- int main (int argc, char *argv[])
- {
- GMainLoop *loop;
- GstElement *pipeline, *videosrc, *colorspace, *videoenc,
- *videoq, *audiosrc, *conv, *audioenc, *audioq, *muxer,
- *sink;
- GstBus *bus;
- /* Initialisation */
- gst_init (NULL, NULL);
- loop = g_main_loop_new (NULL, FALSE);
- /* Create gstreamer elements */
- pipeline = gst_pipeline_new ("audio-player");
- videosrc = gst_element_factory_make ("filesrc", "videosrc");
- muxer = gst_element_factory_make ("qtdemux", "mux");
- videoenc = gst_element_factory_make ("decodebin", "videoenc"); //avdec_mpeg4
- sink = gst_element_factory_make ("autovideosink", "sink"); //autovideosink
- if (!pipeline || !videosrc || !videoenc || !muxer
- || !sink) {
- g_printerr ("One element could not be created. Exiting.\n");
- return -1;
- }
- /* Set up the pipeline */
- g_print ("Elements are created\n");
- /* set the properties of other elements */
- printf("location = %s \n", argv[1]);
- g_object_set (G_OBJECT (videosrc), "location", argv[1], NULL);
- /* we add a message handler */
- bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
- gst_bus_add_watch (bus, bus_call, loop);
- gst_object_unref (bus);
- /* we add all elements into the pipeline */
- gst_bin_add_many (GST_BIN (pipeline),
- videosrc, muxer, videoenc, sink, NULL);
- g_print ("Added all the Elements into the pipeline\n");
- /* we link the elements together */
- int reslinkmany = gst_element_link_many (videosrc, muxer,
- videoenc, sink, NULL);
- printf("reslinkmany = %d \n", reslinkmany);
- g_print ("Linked all the Elements together\n");
- /* Set the pipeline to "playing" state*/
- g_print ("Playing the video\n");
- gst_element_set_state (pipeline, GST_STATE_PLAYING);
- /* Iterate */
- g_print ("Running...\n");
- g_main_loop_run (loop);
- /* Out of the main loop, clean up nicely */
- g_print ("Returned, stopping playback\n");
- gst_element_set_state (pipeline, GST_STATE_NULL);
- g_print ("Deleting pipeline\n");
- gst_object_unref (GST_OBJECT (pipeline));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement