无法使用gstreamer api播放.wav文件 [英] Unable to play .wav file using gstreamer apis

查看:157
本文介绍了无法使用gstreamer api播放.wav文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

编写了以下代码来播放.wav文件,但它似乎不起作用. 我想知道我是否缺少其中的东西.

Following code is written to play a .wav file but it doesn't seem to work. I would like to know if i am missing something in it.

代码:

#include <gst/gst.h>
#include <glib.h>

int main(int argc , char *argv[])
{
GMainLoop *loop;
GstElement *source,*audioparser,*sink,*pipeline;
GstBus *bus;

gst_init(&argc,&argv);

// create a pipeline
loop = g_main_loop_new (NULL, FALSE);
pipeline = gst_pipeline_new ("wav-player");
source = gst_element_factory_make("filesrc","file-source");
audioparser = gst_element_factory_make("wavparse","wav-parser");
sink = gst_element_factory_make("alsasink","sink1");
g_object_set (G_OBJECT (source), "location", argv[1], NULL);
gst_element_set_state (pipeline, GST_STATE_NULL);
// set location to current sourceg_object_set(G_OBJECT(source),"location",argv[1],NULL);

// add elements to bin
gst_bin_add_many(GST_BIN(pipeline),source,audioparser,sink,NULL);

gst_element_link_many(source,audioparser,sink,NULL);

// create bus
bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
gst_bus_add_watch (bus, bus_call, loop);
gst_object_unref (bus);
gst_element_set_state(pipeline, GST_STATE_PLAYING);
g_main_loop_run (loop);
return 1;
}

请使用以下命令进行编译:

Please compile this using following command:

 gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) wav.c -o wavparser

预先感谢

推荐答案

只使用playbin2而不是手工制作的管道

Just use playbin2 instead of a hand-crafted pipeline

也就是说,将"pipeline = gst_pipeline_new()"到"gst_element_link_many"的所有内容替换为:

that is, replace everything from "pipeline = gst_pipeline_new()" to "gst_element_link_many" by:

pipeline = gst_element_factory_make("playbin2", NULL);
g_object_set(pipeline, "uri", "file:///the/file/I/want.wav", NULL);

这篇关于无法使用gstreamer api播放.wav文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆