【问题标题】:how to call gstreamer functions in NPAPI如何在 NPAPI 中调用 gstreamer 函数
【发布时间】: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


【解决方案1】:

其实这是一个链接问题,在 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 32 位中没有遇到这个错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 2016-10-10
    • 1970-01-01
    相关资源
    最近更新 更多