janus webrtc新增插件--编译
作者:互联网
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库就编译出来了
标签:插件,ENABLE,plugin,--,get,janus,p2p,videocall 来源: https://blog.csdn.net/u012618915/article/details/111029807