g_main_loop_run()冻结窗口

时间:2015-12-19 03:22:57

标签: c# c pinvoke gstreamer

我正在尝试使用Pinvoke从GStreamer库导入的函数在C#中创建一个视频播放器。它到目前为止看起来不错,但如果我添加gmaincontext我的C#应用​​程序冻结,我就无法点击任何按钮或移动我的窗口。

我认为问题可能涉及GstElement *pipeline; void seek_to_pos(double position) { gint64 len; gst_element_query_duration(pipeline, GST_FORMAT_TIME, &len); gst_element_seek_simple(pipeline, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, len*position); } void play_file(char* path_to_file, void* hwnd_ptr_of_window){ gst_init(NULL, NULL); HWND hwnd = (HWND)hwnd_ptr_of_window; GMainLoop *loop = g_main_loop_new(NULL, FALSE); pipeline = gst_element_factory_make("playbin", "player"); g_object_set (G_OBJECT (pipeline), "uri", path_to_file, NULL); gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(pipeline), (guintptr)hwnd); gst_element_set_state(pipeline, GST_STATE_PLAYING); g_main_loop_run(loop);//problem } ,但我并不确切地知道问题是什么或如何解决问题。

这是我库中的C ++代码:

g_main_loop_run(loop);

没有GMainLoop字符串,一切正常,但我当然需要它来做其他事情。

另外,我已经知道我需要在a中运行{{1}} 不同的线程,不阻止我的C#应用​​程序的事件循环,但我不知道我该怎么做。

所以我需要一个代码示例或链接来描述我如何正确地做到这一点。谢谢!

0 个答案:

没有答案
相关问题