0

リモート mp3 再生用のパイプラインの作成に問題があります。次のようにパイプラインを構築すると:

data->pipeline = gst_parse_launch("souphttpsrc location=https://xxxx ! mad ! autoaudiosink", &error);

うまく再生されます。ただし、動的な場所が必要なので、ソース パッドへの参照を保持する必要があります。これは私が持っているものです

data->source = gst_element_factory_make("souphttpsrc", "source"); 
decoder = gst_element_factory_make ("mad","decoder");
sink = gst_element_factory_make ("autoaudiosink", "sink");

data->pipeline = gst_pipeline_new ("mp3-player");
if (!data->pipeline || !data->source || !decoder || !sink) {
    g_printerr ("Not all elements could be created.\n");
    return NULL;
}

gst_bin_add_many (GST_BIN (data->pipeline), data->source, decoder, sink, NULL);
if (!gst_element_link_many (data->source, decoder, sink, NULL)) {
    gchar *message = g_strdup_printf("Unable to build pipeline: %s", error->message);
    g_clear_error (&error);
    set_ui_message(message, data);
    g_free (message);
    return NULL;
}

次に、場所を設定します

g_object_set(data->source, "location", char_uri, NULL);

しかし、何も再生されません。次の出力も表示されます。

エラー/GStreamer+opensles_sink (17065): 0:00:00.401251335 0x6f43f520 openslessink.c:152:_opensles_query_capabilities: engine.GetInterface (IODeviceCapabilities) に失敗しました (0x0000000c)

以前にこれを経験した人はいますか?私が考えることができる唯一の解決策は、ソースの場所を変更するたびにパイプラインを再構築することですが、それはやり過ぎのようです。

4

1 に答える 1