【发布时间】:2013-08-06 06:42:56
【问题描述】:
我打算在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;
}
【问题讨论】:
-
您确定可以从非主线程调用
gst_init()吗?如果失败,控制台或日志中是否有任何错误?请注意,还有一个gst_init_check()表示优雅的失败,您可能不想在每次调用play()时调用gst_init()。 -
我曾尝试在主线程、另一个线程和子进程(通过 fork())中调用 gst_init(),但都失败了。不,我不想在每次调用 play() 时都调用 gst_init(),这里只是测试一下它是否可以成功。
-
我只是在 Chrome 和 Firefox 的发布版本中测试了这个插件,我只能捕获除浏览器日志之外的插件日志。
-
如果您从终端运行浏览器,我希望您在 gst_init() 中止之前得到错误输出。或者尝试 gst_init_check() 的输出错误参数。
-
我得到了浏览器日志 符号查找错误:/home/darkwind/testplugin/libplayerplugin.so: undefined symbol: gst_init 你有什么想法吗? :)
标签: npapi browser-plugin gstreamer