美文网首页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