2013-08-06 31 views
0

我打算在NPAPI插件中调用gstreamer函数,但是我发现当我在插件中调用方法“gst_init”时,它总是失败!不管我在新线程或子进程中调用它,它都无法通过。所以我想知道如何以正确的方式调用gst_init函数? :)如何调用NPAPI中的gstreamer函数

例如:

Javascript代码:obj.play();

obj是插件NPObject。

static void* play(void *) { 

    GMainLoop *loop; 
    GstElement *pipeline,*source,*decoder,*sink; 
    GstBus *bus; 


    gst_init(NULL, NULL); 
    ... 
} 

bool plugin_invoke(NPObject *obj, NPIdentifier methodName, const NPVariant *args, uint32_t argCount, NPVariant *result) { 
    NPUTF8 *name = sBrowserFuncs->utf8fromidentifier(methodName); 
    if (strcmp(name, plugin_method_name_gs) == 0) { 
     ... 

     pthread_t tid = 0; 
     int ret = 10000; 
     ret = pthread_create(&tid, NULL, play, NULL); 


     ... 
     return true; 
    } 

    sBrowserFuncs->memfree(name); 
    return false; 
} 
+1

您确定可以从非主线程调用'gst_init()'吗?如果失败,控制台或日志中是否有错误?请注意,还有一个'gst_init_check()'用于优雅的失败,并且您可能不想在每次调用play()时调用'gst_init()'。 –

+0

我曾尝试在主线程,另一个线程和子进程(通过fork())调用gst_init(),但都失败了。不,我不想在每个play()的calll上调用gst_init(),这里只是一个测试,看它是否可以成功。 – darkwind

+0

我只是在Chrome和Firefox中测试这个插件,它是发布版本,我只能捕获除浏览器日志以外的插件日志。 – darkwind

回答

0

其实,这是连接问题,在Ubuntu 12.04 64位,我们应该利用

gcc xxx.c `pkg-config --cflags --libs gstreamer-xxx` -o output_file 

(在src文件名必须遵循与命令GCC/G ++,有些人必须先编译),但是我将这段代码嵌入到一个Qt项目中,我通过qmake创建了makefile,它不能将src文件名自动放在gcc/g ++后面,所以当我使用ldd检查共享库时,它是不正确的。

正如我所知在Ubuntu 32位不符合此错误。