0

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

例如 :

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;
}
4

1 回答 1

0

其实这是一个链接问题,在 Ubuntu 12.04 64bits 下,我们应该使用编译它

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

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

据我所知,在 Ubuntu 32bits 中没有遇到这个错误。

于 2013-08-14T09:09:35.267 回答