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 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ビットはこのバグに対応していません。

于 2013-08-14T09:09:35.267 に答える