Commit Graph

31 Commits

Author SHA1 Message Date
ea2e2e4dbc conference: improve conference protocol for multi stream
The current design got some limitations. It's not possible to
control informations per shared media. This means that we can't
got several active sinks for example.
The goal of this patch here is to update the conferences orders
to be able to control the state of each sink individually and for
the client to be able to handle conferences with accounts connected
via several devices with several medias per devices.
So each orders is sent with a different level (account/device/media)

For example, we will be able to send a moderator order for an account,
to hangup a device or to set a media active.

To support those orders, both sides MUST be patched. Else, the old
protocol will be used. The version of the protocol supported is sent
in the conferences informations to notify the peer what version to use.

Finally, this patch changes some APIs to support multisteam:
+ Some APIs now takes the deviceId or the sinkId when necessary

https://git.jami.net/savoirfairelinux/jami-project/-/issues/1429
Doc: https://git.jami.net/savoirfairelinux/jami-project/-/wikis/technical/6.1.-Conference-Protocol
Change-Id: Ieedd6055fd43b2a09b2cc8b253dcd6a3bf260a39
2022-06-17 10:07:43 -04:00
4af0279fa2 video API: unify SinkTarget and AVSinkTarget
Change-Id: I6cbbdc1ec6953c1c9ec47a57acf8ac4d8995468d
2022-03-21 16:56:54 -04:00
f6bf52ea15 re-invite: bump Daemon version to 11.0.2
Bump Daemon version to 11.0.2 to enable re-invite without ICE
renegotiation.

Gitlab: #671

Change-Id: I287a034b0fb6b6fde77c091ac3543978e533c56a
2022-02-24 13:56:11 -05:00
70a2a65086 SIP call: re-invite without ice re-negotiation
When muting/un-muting the video, a re-invite is performed
leading to a full media renegotiation and restart,  including
ICE session if used.
With these changes, the mute/unmute video will still require
a re-invite (a new SDP to indicate the new media directions), but
the ICE session is re-used and only the video is stopped/started
accordingly.
The behavior improves the UX by avoiding unnecessary audio disruptions
and is more compliant with SIP/ICE specs (see RFC-5245 section 9.1.1.1
for example)

Gitlab: #671

Change-Id: I13caf9a965af1d76e922fe5f6b86d5332b3296d6
2022-01-25 10:09:13 -05:00
754ae6bfdb build: Rename PROGSHAREDIR to JAMI_DATADIR.
This name matches a common naming convention in build systems.

* compat/msvc/config.h (PROGSHAREDIR): Rename to...
(JAMI_DATADIR) ... this.
* globals.mk (-DJAMI_DATADIR): Likewise.
* meson.build (conf): Likewise.
* src/account.cpp: Likewise.
* src/manager.cpp (Manager::playRingtone): Likewise.

Change-Id: I123251f3e420948bc7359ce0a3ac54bddd12977a
2022-01-20 13:31:58 -05:00
256743d590 meson: update tests
Change-Id: I834b8f24f94e639ab65272a2ff7e5ac4ea84c725
2022-01-05 12:15:55 -05:00
21c8feb731 meson: link the library with '-Wl,-Bsymbolic'
Change-Id: I2496bc42192ad65135c781476f6f5d4bcc795d19
2021-12-20 15:42:45 +03:00
01cb294c44 callmanager: add accountId to identify calls, conferences
This starts the work to move calls and conference per account,
cleaning up the API and start future re-factorization.

Change-Id: I2a3a2c77e9ba78b1a280bdf8dca7eeaabb72f3fd
2021-11-16 15:59:41 -05:00
7d1c3d662a meson: declare using of objective-c++ compiler on osx and ios
Change-Id: Iec6822356d65d1df2fd057920fc30ae56581d76e
2021-11-14 11:53:24 -05:00
6bb307bda4 meson: update the list of sources and dependencies
Change-Id: I6b419ff3e1bc4f8dd8958974e4ae4bc98d30cf06
2021-11-13 16:11:02 -05:00
6ba2ce016a build: disable SHM if DBUS is not used
As libwrap is used by default, HAVE_SHM should only be true
if directrenderer is not used to avoid useless work

Change-Id: I9f819a7c06c667ccf08066f70104dcd3667f8546
2021-11-09 12:34:34 -05:00
17f31b5941 meson: update the list of sources and dependencies
Change-Id: I19bc2fe4edef3c8dc7992473235f6ffd002c6e0b
2021-10-10 17:21:32 -04:00
ba3a411ca3 daemon: Rename dring occurrences in code and file names to jamid.
Automated using the following commands:

  $ mv src/{dring,jami}
  $ git grep -l src/dring | xargs sed -i 's,src/dring,src/jami,g'
  $ git grep -l '#include "dring/' | \
    xargs sed -i 's,#include "dring/,#include "jami/,g'
  $ git grep -l 'dring.h' | xargs sed -i 's,dring.h,jami.h,g'

And finally,

  $ git grep -l 'dring' | xargs sed -i 's,dring,jami,g'

  $ files=$(find -name '*dring*' | sort)
  $ for f in $files; do mkdir -p "$(dirname "$f")"; \
      mv "$f" "$(echo $f | sed 's/dring/jami/g')"; done

To resolve a bad renaming favorably:

  $ git grep -l -i AlsaCarjami | \
    xargs sed -i -E 's/([Aa])lsaCarjami/\1lsaCardRingtone/g'

The above renaming command is not perfect, so some hand-tuning was
required to complete it.

* src/manager.cpp (Manager::ManagerPimpl::retrieveConfigPath):
Preserve the dring.yml configuration file name, until we add something
to migrate (rename) it to jami.yml.
* man/dring.pod: Delete.
* bin/dbus/jamid.pod: Move to ...
* man/jamid.pod: here.
* bin/dbus/meson.build (jamid_targets): Normalize man section to the
pre-existing 1 and adjust accordingly.
* src/jami/def.h (dring_EXPORTS): Rename to ...
(jami_EXPORTS): ... this.

change-Id: I9828be6da9c711ab2f22c4d1b9539fea89d7b6fb
2021-07-15 10:57:26 -04:00
f0fb8148ba daemon: Use the PROGSHAREDIR macro to refer to the custom datadir.
The sources previously hard-coded the location of the default Jami
ringtone as "/usr/share/ring/ringtones/default.opus".  It should
instead be computed from the already existing PROGSHAREDIR macro,
which is built from Autoconf's configurable datadir.

* globals.mk (-DPROGSHAREDIR): Rename the 'ring' subdirectory to
'jami'.
* meson.build (conf): Likewise.
* ringtones/Makefile.am (dist_jamiringtones_DATA): s/ring/jami/g
* ringtones/meson.build: Likewise.
* src/account.cpp (DEFAULT_RINGTONE_PATH): Define in terms of
PROGSHAREDIR.
* bin/dbus/Makefile.am (libclient_dbus_la_CXXFLAGS): Remove extraneous
flags, already propagated via AM_CPPFLAGS.  Honor AM_CXXFLAGS.
* src/client/Makefile.am (libclient_la_CXXFLAGS): Remove.
* src/plugin/Makefile.am (libplugin_la_CXXFLAGS): Likewise.

Change-Id: Icaa0a92e896f86b0bb07f82e4079570db08fafbd
2021-06-28 10:52:29 -04:00
612f7f6b41 data-transfer: re-ask for transfer
add API to ask for a failed transfer. This can be used when the
client detects a transfer they doesn't have yet. It will ask all
members of the conversation to send the transfer back.

GitLab: #136
Change-Id: I1484298c4fa0eabb614132e22d8032612e14b949
2021-06-11 15:26:00 -04:00
53d0ae39d1 multi-stream: check peer's Daemon version
Check peer's Daemon version and ignore media change request
action from the client if the the peer does not support the
feature.
Also bump Daemon version to 10.0.2

Gitlab: #551

Change-Id: Ifd105d2fe2706b4667f5bafabcb3d91e771e7299
2021-06-11 12:33:51 -04:00
ffa12c740b multiplexed_socket: add ping/pong logic
Detecting that a socket is down via a keep alive can take time, moreover
if a relay is used, because the keep alive can continue to work even if the
connection is half closed.
In this patch, we add a mechanism where a beacon is sent over the multiplexed
socket to know if the peer can answer. This message can be used to detect
if a socket is usable and is sent whenever the user starts a call or that
a connectivityChanged() occurs.
Moreover, the multiplexedsocket can now sends a version to enable features
and if a bad packet on the control socket comes, the socket is not stopped.

GitLab: #542
Change-Id: Ia66d8d7f9b66bba02927f4ea41c21ef27089bceb
2021-05-13 18:11:02 -04:00
e7537f3ac4 meson: rename the option from 'webrtc-audio-processing' to 'aec'
Change-Id: I69cc9da36dfbb1258f8f84e9351a6c1c29c2a722
2021-03-24 09:25:36 -04:00
a699262e72 build: fix meson for webrtc support
Change-Id: Iedcfe91af40893004c8f640c8a718966db8d7468
2021-03-19 13:09:49 -04:00
a04ed04264 plugins: add ChatHandler API
- add internal preference for always turn on plugin

GitLab: jami-plugins#4
GitLab: #394
Change-Id: Ic37fb486531cf436df4346246ec74f6480e4c0fd
2021-02-01 11:21:16 -05:00
69f559976e plugins: add callId to API
Change-Id: I2b59205b9ad2f75c6c8602a5a273a7d8115e5db6
2020-11-12 10:56:07 -05:00
69d60a4940 Revert "plugin: add editable preference"
This reverts commit 7f21500866.

Reason for revert: API design issue

Change-Id: I89b4bd9f59b95637acb7fd2199a4ccc43b1bda64
2020-09-01 13:20:26 -04:00
7f21500866 plugin: add editable preference
Change-Id: I61c074464e21344b2d7a1d64023f23bd96139c3b
2020-08-31 17:20:53 -04:00
365a1169fb conference: add informations about rendered video and share with all peers
These informations contains the participants in a conference and their
position in the rendered frame. The description of the conference is
sent via a SIP message with "application/confInfo+json" for mimetype.

Gitlab: #241
Change-Id: I5a3ad81d1d1b8ba9c9ce84e57745a59a747b8e6c
2020-07-31 16:52:53 -04:00
8d40c627e3 video_mixer: support multiple video layouts in conference
This patch aims to improve the conference management for the host.
Now, the host is able to switch between 3 conferences layout:
1. The grid view (actual one) where all participants are shown
at the same height/width
2. The One big/Other in small which show one participant bigger than
the others
3. One participant in big

The daemon's API got two new methods:
+ setConferenceLayout() to switch between these layouts
+ setActiveParticipant() used in the 2 last layouts.

Change-Id: I3c16569e24d1b63331ffe9d79e35790a6ac47a0c
2020-07-14 11:27:04 -04:00
6b0311f38c build: use C++17
Change-Id: I94c88a504ae2a98043be8fd201f95227002d99c4
2020-07-13 07:42:49 -04:00
b87c7d6d21 meson: link with libdl
Change-Id: I010069c97af03b8128c22765eb5814b2fb0a59c2
Gitlab: #254
2020-07-02 17:03:57 -04:00
b99f1a0bd6 build: fix some issues for building without video
Change-Id: I9d1d1a53070228b93728655021cdf1764b5eb6b2
Gitlab: #238
2020-06-28 10:08:31 -04:00
4ad81caf3d meson: add support for plugins
Change-Id: I767d7baa288edeeb93ceb16d6f2bbfff2b48d5c9
Reviewed-by: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
2020-06-25 10:02:05 -04:00
2e1fa4ff49 meson: add libarchive
Change-Id: Id45fe5976a1eb957e5b19777c724bac06d2dd92a
2020-05-31 19:51:43 +03:00
387f6988cd build: add support for meson
Change-Id: I331522a09257d4ae787893ff72c270886c1aa210
Reviewed-by: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
2020-05-21 11:50:30 -04:00