2015-01-20 3 views
1

Sailfish OS 용 오디오 플레이어를 개발 중이며 gstreamer를 통해 파일을 재생하려하지만 문제가 있습니다. 소리가 들리지 않습니다.Sailfish OS에서 Gstreamer 출력 소리 없음

나는 콘솔을 통해 gstream을 확인 :

GST-출시 - 0.10 filesrc 위치 =/경로 /로가/file.ogg을! 디코드 빈! autoaudiosink

잘 작동합니다!

int 
main (int argc, 
     char *argv[]) 
{ 
     GstElement *pipeline; 
     GstBus *bus; 
     GstMessage *msg; 

     gst_init (&argc, &argv); 

     pipeline = gst_parse_launch ("filesrc location=/home/nemo/Music/Ringtones/Myfile.mp3 ! decodebin ! audioconvert ! vorbisenc ! oggmux ! filesink location=test.ogg", NULL); 

     gst_element_set_state (pipeline, GST_STATE_PLAYING); 

     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); 

     return 0; 
} 

을 그리고 그것은 잘 작동 :

나는 오디오 파일을 오디오 파일을 변환 테스트!

는 GST :

pipeline = gst_parse_launch ("filesrc location=/home/nemo/Music/Ringtones/Myfile.mp3 ! decodebin ! audioconvert ! autoaudiosink", NULL); 

있는 GStreamer 버전 : 자원이 사용되기 전에 획득 필요가 있기 때문에 0.10

답변

1

문제였다 내가 그것을 재생하려고 할 때

하지만, 소리가 없다 실행은 정적으로 자원 정책 구성에서 "플레이어"로 설정되므로 추가 작업없이 실행할 수 있습니다.

그러나 자신의 응용 프로그램을 만들 때 직접 오디오 재생 자원을 확보해야합니다.

C 전용 응용 프로그램을 개발 중이라면 https://github.com/nemomobile/libaudioresource을, Qt 응용 프로그램을 사용하려면 https://github.com/nemomobile/libaudioresource-qt을 확인하십시오.

예 : 답변 Juho Hämäläinen에

#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; 
} 

감사합니다!