2013-08-06 73 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位不符合此錯誤。