使用gstreamer api播放.wav文件时出错

路飞

我知道这个问题已经发布了好几次了。但是,没有一种解决方案对我有用。

我正在尝试使用gstreamer api播放.wav文件。下面的命令播放.wav文件(带有或不带有audioconvert):

gst-launch-1.0 filesrc location=sound.wav ! wavparse ! audioconvert ! alsasink

我为上述命令编写了一个简单的c ++代码,引用了GStreamer Hello world示例但是它以“内部数据流错误”结束。这是我的代码:

{
    gst_init(NULL, NULL);
    m_pipeline  = gst_pipeline_new("audio-player");
    m_fileSource = gst_element_factory_make("filesrc", "file-source");
    m_parser = gst_element_factory_make("wavparse", "wav-parser");
    m_sink = gst_element_factory_make("alsasink", "audio-output");
    if (!m_pipeline || !m_fileSource || !m_parser || !m_sink) {
        g_printerr ("One or more elements could not be created !! \n");
        return false;
    }
    /* Set up the pipeline */
    else {
        /* set the input filename to the source element */
        g_object_set (G_OBJECT (m_fileSource), "location", path.toLatin1().data(), NULL);

        /* set a message handler on a bus */
        GstBus *bus = gst_pipeline_get_bus (GST_PIPELINE (m_pipeline));
        gst_bus_add_watch(bus, bus_call, this);
        gst_object_unref(bus);

        /* add all elements into the pipeline */
        gst_bin_add_many (GST_BIN (m_pipeline), m_fileSource, m_parser, m_sink, NULL);

        /* link the elements together */
        gst_element_link (m_fileSource, m_parser);

        g_signal_connect(m_parser, "pad-added", G_CALLBACK(on_pad_added), m_sink);
    }
    gst_element_set_state(m_pipeline, GST_STATE_READY);
    gst_element_set_state(m_pipeline, GST_STATE_PAUSED);
}

on_pad_added(GstElement *src_element, GstPad *src_pad, gpointer data)
{
    GstElement *sink_element = (GstElement *)data;

    GstPad *sink_pad = gst_element_get_static_pad(sink_element, "sink");
gst_pad_link(src_pad, sink_pad);

    gst_object_unref(sink_pad);
    src_element = NULL;
}

我什至尝试了此链接中建议的解决方案如Glinker Hello World示例中所示,将“ oggdemux”替换为“ wavparse”,将“ vorbisdec”替换为“ identity”,如该链接中所建议我收到的错误:

    0:00:00.289443936  1624  0x1234e00 WARN                 basesrc gstbasesrc.c:3470:gst_base_src_start_complete:<file-source> pad not activated yet
0:00:00.290993573  1624  0x1740030 FIXME                default gstutils.c:3643:gst_pad_create_stream_id_internal:<wav-parser:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
0:00:00.291883886  1624  0x1740030 WARN                wavparse gstwavparse.c:1564:gst_wavparse_stream_headers:<wav-parser> Ignoring chunk bext
0:00:00.292198262  1624  0x1740030 WARN                wavparse gstwavparse.c:1564:gst_wavparse_stream_headers:<wav-parser> Ignoring chunk junk
0:00:00.305086920  1624  0x1234e00 WARN                 basesrc gstbasesrc.c:3470:gst_base_src_start_complete:<file-source> pad not activated yet
0:00:00.306444838  1624  0x17400c0 FIXME                default gstutils.c:3643:gst_pad_create_stream_id_internal:<wav-parser:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
0:00:00.307224214  1624  0x17400c0 WARN                wavparse gstwavparse.c:1564:gst_wavparse_stream_headers:<wav-parser> Ignoring chunk bext
0:00:00.307636819  1624  0x17400c0 WARN                wavparse gstwavparse.c:1564:gst_wavparse_stream_headers:<wav-parser> Ignoring chunk junk
0:00:00.526277506  1624  0x17400c0 WARN                wavparse gstwavparse.c:2186:gst_wavparse_loop:<wav-parser> error: Internal data flow error.
0:00:00.526495475  1624  0x17400c0 WARN                wavparse gstwavparse.c:2186:gst_wavparse_loop:<wav-parser> error: streaming task paused, reason not-linked (-1)
0:00:00.527296570  1624  0x1740030 WARN                wavparse gstwavparse.c:2186:gst_wavparse_loop:<wav-parser> error: Internal data flow error.
0:00:00.527439278  1624  0x1740030 WARN                wavparse gstwavparse.c:2186:gst_wavparse_loop:<wav-parser> error: streaming task paused, reason not-linked (-1)
ERROR: Internal data flow error.
ERROR: Internal data flow error.

我在代码中缺少什么?

蒂亚戈斯

您收到未链接的错误,某些元素未链接。

该元素是wavparse。您的代码正试图等待它添加一个填充板来链接它,但是wavparse有一个“总是”源填充板,这意味着自创建元素以来它就存在,因此您可以像直接使用它一样直接链接filesrc。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用C ++读取WAV文件时出错

来自分类Dev

使用C ++读取WAV文件时出错

来自分类Dev

使用Naudio或Win API同时播放多个.wav文件

来自分类Dev

使用typefind播放Gstreamer

来自分类Dev

使用Java播放WAV文件

来自分类Dev

如何在视频上的SRT文件中添加字幕并在ac程序中使用Gstreamer播放

来自分类Dev

使用gstreamer创建的MP4文件无法在Window Media Player上播放

来自分类Dev

如何使用Java播放WAV文件?

来自分类Dev

Android:如何使用MediaPlayer播放WAV文件

来自分类Dev

使用portaudio和sndfile播放WAV文件

来自分类Dev

如何使用python无限播放“.wav”文件

来自分类Dev

使用gstreamer在Android上播放RTMP流

来自分类Dev

使用gstreamer暂停后如何恢复播放?

来自分类Dev

使用GStreamer和wxPanel播放视频

来自分类Dev

在使用gstreamer播放之前检测rtsp流

来自分类Dev

如何使用 GStreamer 播放 PCM 数据数组

来自分类Dev

播放时如何绘制WAV文件

来自分类Dev

从Github资产API使用Meteor下载文件时出错

来自分类Dev

从Github资产API使用Meteor下载文件时出错

来自分类Dev

在MP4中使用gstreamer h264 + aac录制只能产生部分可播放的文件

来自分类Dev

在Linux Mint上使用播放时出错

来自分类Dev

单击Button时播放wav文件,并释放相同的按钮时暂停wav文件吗?

来自分类Dev

如何使用C#从Properties.Resources播放WAV文件

来自分类Dev

AVAudioPlayer无法播放使用ExtAudioFileWriteAsync写入的音频(.wav)文件

来自分类Dev

不使用库播放 MP3/WAV 文件?

来自分类Dev

按下按钮播放文件时出错

来自分类Dev

从数组播放Wav文件

来自分类Dev

播放.wav文件

来自分类Dev

使用gstreamer在视频上叠加(或播放)视频作为背景

Related 相关文章

热门标签

归档