其他分享
首页 > 其他分享> > janus webrtc新增插件--编译

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