Tag: gstreamer

使用gstreramer播放歌曲的顺序是什么?

我正在建立一个基于gstreamer-0.10的音乐播放器。 我能够成功地玩,但是当我改变管道的状态时我遇到了问题。 我已经发布了代码来初始化并启动以下管道: void start_gstreamer() { gst_init(0,NULL);//call to initialise gstreamer time_val=0;//set to default value volume = 1.0;//set volume to default value player = gst_element_factory_make (“playbin2”, “player”);//get pipeline equalizer = gst_element_factory_make (“equalizer-10bands”, “equalizer”);//get the 10band equalizer convert = gst_element_factory_make (“audioconvert”, “convert”); sink = gst_element_factory_make (“autoaudiosink”, “audio_sink”);//get the audio-sink if (!equalizer || !convert || !sink)//check is all […]

gst_bus_add_watch()和g_signal_connect()之间的区别

我正在阅读GStreamer应用程序开发人员手册,该手册在消息处理/事件处理的上下文中讨论管道总线,他们讨论了两个函数:gst_bus_add_watch()和g_signal_connect()。 看来这两个function是可以互换的。 应用手册说: 请注意,如果您使用的是默认的GLib主循环集成,则可以连接到总线上的“消息”信号,而不是连接手表。 在第27页。这两个函数之间有什么区别,它们在哪些上下文中有用? 谁使用我们在这些函数中注册的回调? 元素本身是否会调用回调?

如何在video上添加SRT文件中的字幕,并在交流程序中使用Gstreamer播放

我想使用Gstreamer播放带有C程序的video,并添加SRT文件中的字幕。 我是gstreamer的新手,我以某种方式想出了在命令行中使用它的人: gst-launch filesrc location=video.srt ! subparse ! \ overlay. filesrc location=video.ogv ! oggdemux name=demux \ demux. ! queue ! vorbisdec ! audioconvert ! autoaudiosink \ demux. ! queue ! theoradec ! ffmpegcolorspace ! subtitleoverlay name=overlay ! autovideosink; 问题是我可以从C程序播放video,但我不明白如何添加字幕。 int main (int argc, char *argv[]) { GMainLoop *loop; GstElement *pipeline, *source, *demuxer, *audioDecoder, *videoDecoder, *audioConv, […]

GStreamer插件搜索路径?

我能以某种方式告诉GStreamer在指定目录中查找插件吗?

如何使用GStreamer和XOverlay在GTK +应用程序窗口中嵌入video?

我正在尝试使用GTK +和GStreamer编写一个小型媒体播放器,目前使用XOverlay接口将video嵌入主窗口的GtkDrawing区域。 该程序是使用以下命令编译的: g++ /home/phongcao/cacao.cc -o /home/phongcao/cacao `pkg-config –cflags –libs gtk+-2.0 gstreamer-0.10 gstreamer-plugins-base-0.10 gstreamer-interfaces-0.10` 问题是video显示在SEPARATED窗口中(而不是在主窗口的工具栏下): 这是该程序的源代码: #include #include #include #include GstElement *play; GtkAdjustment *progress; GtkWidget *mainwindow, *drawingarea; class TopWin { public: TopWin(); ~TopWin(); int Initialize(int argc, char *argv[]); int Execute(); static void FileChooser(GtkButton *button, GtkWindow *mainwindow); static int Play(gchar *addr); static gboolean print_position(GstElement *element); private: […]

GStreamer gst_element_factory_make失败

我正在尝试使用GStreamer测试应用程序,但在运行时,以下行失败: demuxer = gst_element_factory_make (“oggdemux”, “ogg-demuxer”); // returns NULL 我正在使用MacOSX并通过MacPorts安装了GStreamer,libogg和vorbis-tools。 所以我不明白它失败的原因。 有关如何使其工作的任何建议? 编辑:解决了! 问题是我需要从gst-plugins-good软件包安装autodetect插件。 以下是使其有效的操作列表: 删除MacPorts安装: sudo port uninstall gstreamer 将以下行添加到〜/ .profile export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig 下载gstreamer,gstreamer-plugins-base和gstreamer-plugins-很好的资源。 构建并安装gstreamer(./configure,make,make install) 构建并安装gstreamer-plugins-base(./configure,make,make install) 对于gstreamer-plugins-good我只构建了自动检测包,因为构建所有这些都导致了一些我现在不需要或不关心的插件的错误。 我是这样做的: ./configure cd gst/autodetect/ make sudo make install 现在该程序构建并运行。 我似乎没有得到任何音频输出:(但这是另一个问题。

将opencv处理添加到gstreamer应用程序

我正在尝试执行以下操作:使用gstreamer接收video流并使用opencv进行处理。 我找到了一些解决方案,其中一个是将video写入(来自gstreamer)fifo,然后使用opencv读取它。 (OPTION3这里是MJPEG流媒体和解码 )。 问题是我无法打开管道。 cvCreateFileCapture永远不会返回。 这是我写的部分代码: if(mkfifo(“fifo.avi”, S_IRUSR| S_IWUSR) == -1) { cout<<"Cant create fifo"<<endl; cout<<errno<<endl; } loop = g_main_loop_new(NULL, false); fsink = gst_element_factory_make("filesink", "fsink"); g_object_set(G_OBJECT(fsink), "location", "fifo.avi", NULL); playbin = gst_element_factory_make("playbin2", "play"); g_object_set(G_OBJECT(playbin), "uri", uri.c_str(), NULL); g_object_set(G_OBJECT(playbin), "video-sink", fsink, NULL); bus = gst_pipeline_get_bus(GST_PIPELINE(playbin)); gst_bus_add_signal_watch(bus); g_signal_connect(bus, "message::buffering", G_CALLBACK(&set_playbin_state), playbin); gst_object_unref(bus); cvNamedWindow("output", CV_WINDOW_AUTOSIZE); capture = […]

gstreamer appsrc测试应用程序

我正在尝试学习gstreamer appsrc插件,从我写的传输流解复用器播放AV(我知道插件已经可用,我想自己动手去学习)。 我从MPEG传输流中提取了音频和video基本流; 现在我必须将它推送到appsrc插件并使用gst管道播放(这部分我还不清楚:关于使用哪些插件 – 任何提示都将受到高度赞赏)。 我找到了一个使用appsrc的示例代码 ,但是当我运行它时,没有输出。 我确认确实调用了start_feed和read_data函数。 在read_data函数中,有一个计时器检查来决定是否推送数据: ms = g_timer_elapsed(app->timer, NULL); printf(“ms %f\n”, ms); if (ms > 1.0/20.0) { 我不知道这个计时器的用途,但ms的值总是在0.035左右,数据永远不会被推送到appsrc。 所以我将if条件更改为if(ms > 0.03)但后来出现了内部数据流错误: ms 0.033747 ms 0.000010 ERROR from element mysource: Internal data flow error. Debugging info: gstbasesrc.c(2582): gst_base_src_loop (): /GstPipeline:pipeline0/GstAppSrc:mysource: streaming task paused, reason not-negotiated (-4) 有人可以告诉我如何调整这个以观看video吗? 链接网站的代码如下。 #include #include #include […]

在OpenCV中使用自定义相机(通过GStreamer)

我正在使用Nitrogen6x板和ov5640相机(mipi)。 相机没有使用标准v4l / v4l,但我们可以使用GStreamer为其驱动程序(mfw_v4l)流式传输video: gst-launch mfw_v4lsrc ! autovideosink 我想通过GStreamer(OpenCV内部的GStreamer)调用OpenCV中的相机。 我在这里问了一个关于在OpenCV中调用GStreamer的问题,这是后续的。 如果我启用GStreamer支持,则会在源代码中检查它,但OpenCV会尝试使用标准V4L / V4L2作为GStreamer,我想要更改它。 有关调用GStreamer的部分位于cap_gstreamer.cpp中 : CvCapture* cvCreateCapture_GStreamer(int type, const char* filename ) { CvCapture_GStreamer* capture = new CvCapture_GStreamer; if( capture->open( type, filename )) return capture; delete capture; return 0; } 我想这是我应该以某种方式指向相机驱动程序的部分。 (“type”这里可能是一个与驱动程序相关的数字(在precomp.hpp中定义),但是什么是“文件名”?) 有关如何通过GStreamer访问相机的任何建议都会有所帮助和赞赏。 谢谢!