美文网首页Webrtc
webrtc gateway janus系列(三)新插件如何编写

webrtc gateway janus系列(三)新插件如何编写

作者: 刘长福 | 来源:发表于2020-12-18 10:23 被阅读0次

    janus新编写插件最重要的结构体为janus_plugin, 要实现里面的所有接口。

    static janus_plugin janus_videocall_p2p_plugin =

    JANUS_PLUGIN_INIT (

    .init = janus_videocall_p2p_init,

    .destroy = janus_videocall_p2p_destroy,

    .get_api_compatibility = janus_videocall_p2p_get_api_compatibility,

    .get_version = janus_videocall_p2p_get_version,

    .get_version_string = janus_videocall_p2p_get_version_string,

    .get_description = janus_videocall_p2p_get_description,

    .get_name = janus_videocall_p2p_get_name,

    .get_author = janus_videocall_p2p_get_author,

    .get_package = janus_videocall_p2p_get_package,

    .create_session = janus_videocall_p2p_create_session,

    .handle_message = janus_videocall_p2p_handle_message,

    .setup_media = janus_videocall_p2p_setup_media,

    .incoming_rtp = janus_videocall_p2p_incoming_rtp,

    .incoming_rtcp = janus_videocall_p2p_incoming_rtcp,

    .incoming_data = janus_videocall_p2p_incoming_data,

    .data_ready = janus_videocall_p2p_data_ready,

    .slow_link = janus_videocall_p2p_slow_link,

    .hangup_media = janus_videocall_p2p_hangup_media,

    .destroy_session = janus_videocall_p2p_destroy_session,

    .query_session = janus_videocall_p2p_query_session,

    );

    因为在程序启动的时候程序会对接口进行检查

    if(!janus_plugin->init || !janus_plugin->destroy ||

    !janus_plugin->get_api_compatibility ||

    !janus_plugin->get_version ||

    !janus_plugin->get_version_string ||

    !janus_plugin->get_description ||

    !janus_plugin->get_package ||

    !janus_plugin->get_name ||

    !janus_plugin->create_session ||

    !janus_plugin->query_session ||

    !janus_plugin->destroy_session ||

    !janus_plugin->handle_message ||

    !janus_plugin->setup_media ||

    !janus_plugin->hangup_media) {

    JANUS_LOG(LOG_ERR, "\tMissing some mandatory methods/callbacks, skipping this plugin...\n");

    continue;

    }

    但是如果是新建c文件进行编写后,还是不会进行编译, 形成不了相应的插件so库。

    在网上搜了一遍, 没有相应的文章进行说明。我就尝试进行修改, 现进行说明。

    在configure.ac文件中

    AC_ARG_ENABLE([all-plugins],

    里增加

    AS_IF([test "x$enable_plugin_videocall_p2p" != "xyes"],

                    [enable_plugin_videocall_p2p=no])

    在AC_ARG_ENABLE(...)块里:增加

    AC_ARG_ENABLE([plugin-videocall-p2p],

                  [AS_HELP_STRING([--disable-plugin-videocall-p2p],

                                  [Disable p2p videocall plugin])],

                  [AS_IF([test "x$enable_plugin_videocall_p2p" != "xyes"],

                        [enable_plugin_videocall_p2p=no])],

                  [enable_plugin_videocall_p2p=yes])

    函数解释

    AC_ARG_ENABLE 在configure里来定义一个命令行选项。这个宏接受三个参数

    1.flag_base

    2.该选项的帮助说明

    3.当configure带该选项运行时所执行的代码,代码中的命令行变量enableval被设为此选项的值

    其实应该还有一个就是缺省值。

    在AM_CONDITIONAL(...)块里:增加

    AM_CONDITIONAL([ENABLE_PLUGIN_VIDEOCALL_P2P], [test "x$enable_plugin_videocall_p2p" = "xyes"])

    AM_CONDITIONAL (name, condition)

    在使用条件语句之前,必须在configure.ac的此宏中定义。

    该宏的作用就是执行condition,将真假结果返回给name。

    name必须由字母开头且只能由字母、数字和下划线组成,并且不能是Automake的保留字。

    当configure运行的时候shell脚本condition会被执行。

    注意每次运行configure的时候每个AM_CONDITIONAL都必须被调用,否则会混淆automake。此宏中定义的判断语句可在Makefile.am中被调用。

    在AM_COND_IF(...)块里:增加

    AM_COND_IF([ENABLE_PLUGIN_VIDEOCALL_P2P],

    [echo "    p2p Video Call:            yes"],

    [echo "    p2p Video Call:            no"])

    这个是最重要的, 该ENABLE_PLUGIN_VIDEOCALL_P2P 会影响makefile里的编译

    说明:

    AM_COND_IF (conditional, [if-true], [if-false])

    如果任一分支包含AC_CONFIG_FILES,会导致automake仅针对相应的条件输出相应文件的规则

    在Makefile.am文件中

    增加

    if ENABLE_PLUGIN_VIDEOCALL_P2P

    plugin_LTLIBRARIES += plugins/libjanus_videocall_p2p.la

    plugins_libjanus_videocall_p2p_la_SOURCES = plugins/janus_videocall_p2p.c

    plugins_libjanus_videocall_p2p_la_CFLAGS = $(plugins_cflags)

    plugins_libjanus_videocall_p2p_la_LDFLAGS = $(plugins_ldflags)

    plugins_libjanus_videocall_p2p_la_LIBADD = $(plugins_libadd)

    conf_DATA += conf/janus.plugin.videocall.p2p.jcfg.sample

    EXTRA_DIST += conf/janus.plugin.videocall.p2p.jcfg.sample

    endif

    说明

    这里的if ENABLE_PLUGIN_VIDEOCALL_P2P的宏对应的就是configure.ac里的AM_COND_IF([ENABLE_PLUGIN_VIDEOCALL_P2P],里的宏。

    若新编的插件需要conf文件, 则添加红色的字的语句, 否则不添加该语句。

    该conf文件名要与编译插件文件里的宏JANUS_VIDEOCALL_P2P_PACKAGE相对应。

    至此相应的so库就编译出来了

    相关文章

      网友评论

        本文标题:webrtc gateway janus系列(三)新插件如何编写

        本文链接:https://www.haomeiwen.com/subject/pldxnktx.html