**NOTE: this page describes what is a Jami Plugin and how to install and use them.**
**NOTE: this page describes what is a Jami Plugin and how to install and use them.**
# Jami Plugins
# Jami Plugins
As from September of 2020, Jami team has added plugins as a call/chat feature for Linux and Android users.
As from September of 2020, Jami team has added plugins as a call feature for Linux and Android users.
This meaning that now they can personalize their call/chat experience by using one of our available plugins.
This meaning that now you can personalize your call experience by using one of our available plugins.
But that is not all, you can also transform your awesome ideas into a brand new plugin!
But that is not all, you can also transform your awesome ideas into a brand new plugin!
To properly setup a plugin you must follow the steps bellow.
To properly setup a plugin you must follow the steps bellow.
To build a plugin, please refer to [#How to build?]("") instructions.
To build a available plugin, please refer to [#How to build?]("") instructions.
To create your own plugin, please refer to [Create Plugin](create_plugin) instructions.
If you are interested in knowing how our Plugin system works, please refer to [#How it works?]("")
If you are interested in knowing how our Plugin system works, please refer to [#How it works?]("")
## How to use it?
## How to use it?
### Setup
### Setup
A Jami plugin is a file of the type `pluginname.jpl`, and it must be installed to your Jami.
A Jami plugin is a `pluginname.jpl` file, and it must be installed to your Jami.
Once installed, Jami will add your new plugin to the available plugins list but they will not be available for use yet. Plugins are libraries and must be loaded if you want to expose them.
Once installed, Jami will add your new plugin to the available plugins list but they will not be ready for use yet. Plugins are libraries and must be loaded if you want to expose them.
Besides install/uninstall and load/unload actions, it is possible to modify plugin's preferences.
Moreover, plugin may have preferences and besides install/uninstall and load/unload actions, it is possible to modify those preferences. For example, our Foreground Segmentation plugin allows the user to change the background image displayed.
For example, our Foreground Segmentation plugin allows the user to change the background image displayed.
#### Android
#### Android
To setup a plugin for Android you must go under Setting, enable plugins if it disabled, and select a plugin file from your phone.
To setup a plugin for Android you must go under Setting, enable plugins if they are disabled, and select a plugin file from your phone.
After installed it is automaticaly loaded.
After installed it is automaticaly loaded.
Optionally, the user can manually perform load/unload using the checkbox button on the plugin list.
Optionally, you can manually perform load/unload using the checkbox button on the plugin list.
@@ -187,7 +187,7 @@ The foregroundsegmentation.jpl file will be available under `<jami-plugins/build
...
@@ -187,7 +187,7 @@ The foregroundsegmentation.jpl file will be available under `<jami-plugins/build
Jami can be break down to three main components that interact together: Daemon, LRC and clients.
Jami can be break down to three main components that interact together: Daemon, LRC and clients.
Daemon is the core of Jami, and although it does not interact with users, it is involved in every
Daemon is the core of Jami, and although it does not interact with users, it is involved in every
command. Therefore it is only natural that Daemon is responsible for everything related to Plugin's management, and among other actions it perfoms install/uninstall, load/unload, edit preferences and control plugins' usage.
command. Therefore it is only natural that Daemon is responsible for everything related to Plugin's management, and among other actions it perfoms install/uninstall, load/unload, edit preferences and control plugins' usage.
Despite Daemon importance, what a plugin effectivelly does to a call video or a chat message is unknown to it the same way Daemon does not know what is effectivelly done by LRC or the clients interfaces.
Despite Daemon importance, what a plugin effectivelly does to a call video is unknown to it the same way Daemon does not know what is effectivelly done by LRC or the clients interfaces.
Plugins then can be seen as a forth interacting component in Jami.
Plugins then can be seen as a forth interacting component in Jami.
By it's time Plugins are composed by two main components: the media handler and the process. While the latter actually implements plugin's functionality and waits data to perform, the former is the interface between Daemon and the plugin.
By it's time Plugins are composed by two main components: the media handler and the process. While the latter actually implements plugin's functionality and waits data to perform, the former is the interface between Daemon and the plugin.
...
@@ -196,7 +196,7 @@ It is, the media handler is attached or detached to a media stream from Daemon a
...
@@ -196,7 +196,7 @@ It is, the media handler is attached or detached to a media stream from Daemon a
To use a plugin it is necessary that the Plugin Manager knows the available media stream and plugin's media handlers.
To use a plugin it is necessary that the Plugin Manager knows the available media stream and plugin's media handlers.
Plugin's media handlers are created once a plugin is loaded and they are shared with Daemon's Plugin Manager.
Plugin's media handlers are created once a plugin is loaded and they are shared with Daemon's Plugin Manager.
In the event of a new SIP call, the Plugin Manager creates and stores the corresponding media stream subjects.
In the event of a new SIP call, the Plugin Manager creates and stores the corresponding media stream subjects.
Once a user puts a plugin in action the Plugin Manager attaches this plugin's media handler and the available call media streams. When deactivated, our Plugin Manager dettaches these two instances.
Finally, once a user puts a plugin in action the Plugin Manager attaches this plugin's media handler and the available call media streams. When deactivated, our Plugin Manager dettaches these two instances.