On 20.01.2015 10:13, Александр Крылков wrote:
Hello everyone! I am stuck with one issue, I am developing an audio
player and trying to play an audio via gstreamer, but there is no sound:

I checked gstreamer via console:

gst-launch-0.10 filesrc location=/home/nemo/Music/Myfile.mp3 ! decodebin
! autoaudiosink

And it is working fine!

gst-launch is statically set as "player" in resource policy configuration, so it can be run without any extra work.

However when you are creating your own application, you will need to acquire audio playback resources yourself. Check https://github.com/nemomobile/libaudioresource if you are developing C-only application or https://github.com/nemomobile/libaudioresource-qt for Qt application. Attached also simple example extended from your code.


--
juho
#include <gst/gst.h>
#include <audioresource.h>
#include <glib.h>
#include <unistd.h>
#include <stdio.h>

/*
 * Dependencies glib2-devel, libaudioresource-devel, gstreamer-devel.
 * Compile with:
 * gcc `pkg-config --cflags --libs gstreamer-0.10` `pkg-config --cflags --libs audioresource` `pkg-config --cflags --libs glib-2.0` gst-example.c -o gst-example
 *
 * Check https://github.com/nemomobile/libaudioresource
 */

static GstElement *pipeline;
static int got_reply = 0;

static void on_acquired(audioresource_t *audio_resource, bool acquired, void *user_data)
{
    got_reply = 1;
    printf("on_acquired: %s\n", acquired ? "true" : "false");
    if (acquired) {
        // start playback here
        printf("start playback\n");
        gst_element_set_state (pipeline, GST_STATE_PLAYING);
    } else {
        // stop playback here
    }
}

static void naive_wait()
{
    got_reply = 0;
    while (!got_reply) {
        g_main_context_iteration(NULL, false);
        usleep(1000);
    }
}

int main(int   argc, char *argv[])
{
    audioresource_t *resource;
    void *user_data = NULL;
    char tmp[1024];
    GstBus *bus;
    GstMessage *msg;

    if (argc < 2) {
        printf("audio file argument needed.\n");
        return 1;
    }

    gst_init (&argc, &argv);

    printf("initialize audioresource for media player\n");
    resource = audioresource_init(AUDIO_RESOURCE_MEDIA, on_acquired, user_data);

    snprintf(tmp, 1024, "filesrc location=%s ! decodebin ! audiocovert ! autoaudiosink", argv[1]);
    printf("create pipeline: %s\n", tmp);
    pipeline = gst_parse_launch (tmp, NULL);

    printf("acquire audioresource..\n");
    // When you want to start playback
    audioresource_acquire(resource);

    // Wait for the reply for acquire..
    naive_wait();

    bus = gst_element_get_bus (pipeline);
    msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, (GstMessageType)(GST_MESSAGE_ERROR | GST_MESSAGE_EOS));

    if (msg != NULL)
        gst_message_unref (msg);
    gst_object_unref (bus);
    gst_element_set_state (pipeline, GST_STATE_NULL);
    gst_object_unref (pipeline);

    printf("release audioresource..\n");
    audioresource_release(resource);

    // Wait for release..
    naive_wait();

    // When you close your application
    audioresource_free(resource);

    return 0;
}
_______________________________________________
SailfishOS.org Devel mailing list
To unsubscribe, please send a mail to devel-unsubscr...@lists.sailfishos.org

Reply via email to