jami-daemon issueshttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues2022-01-04T16:03:10Zhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/621Provide parameters for pulseaudio's echo-cancel-module2022-01-04T16:03:10ZAmin BandaliProvide parameters for pulseaudio's echo-cancel-moduleWe currently don't set any additional arguments for pulseaudio's echo canceller module:
https://git.jami.net/savoirfairelinux/ring-daemon/-/blob/504e54608267a257e14acc84daea236b1fd4f85a/src/media/audio/pulseaudio/audiostream.cpp#L59
V...We currently don't set any additional arguments for pulseaudio's echo canceller module:
https://git.jami.net/savoirfairelinux/ring-daemon/-/blob/504e54608267a257e14acc84daea236b1fd4f85a/src/media/audio/pulseaudio/audiostream.cpp#L59
Various GNU/Linux distributions such as Debian and its derivatives don't load the echo canceller module in `/etc/pulseaudio/default.pa` at all or with any additional parameters, so we can't rely on that.
We should look into providing additional arguments -- like the ones below -- ourselves when creating the pulseaudio stream.
For reference: example of loading the echo canceller module with additional arguments in a pulseaudio config file (thanks @atraczyk):
```
load-module module-echo-cancel use_volume_sharing=1 use_master_format=1 aec_method=webrtc aec_args="digital_gain_control=1 experimental_agc=1 analog_gain_control=0 noise_suppression=1 voice_detection=1 extended_filter=1" source_name=echoCancel_source sink_name=echoCancel_sink
```https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/620MediaDemuxer: can lock on disconnect2023-04-17T14:09:50ZSébastien BlinMediaDemuxer: can lock on disconnect# Scenario
+ Plug a camera
+ Show it in media settings
+ Unplug
# Expected scenario
+ The UI should not freeze
# Current result
sometimes, the UI is freezing, blocking on destroying the video input.
# Backtrace
```
Thread 1 (Threa...# Scenario
+ Plug a camera
+ Show it in media settings
+ Unplug
# Expected scenario
+ The UI should not freeze
# Current result
sometimes, the UI is freezing, blocking on destroying the video input.
# Backtrace
```
Thread 1 (Thread 0x7fffe2a99d40 (LWP 2929030) "jami-qt"):
#0 0x00007fffeda179d7 in __pthread_clockjoin_ex () at /lib64/libpthread.so.0
#1 0x00007fffedffd687 in std::thread::join() () at /lib64/libstdc++.so.6
#2 0x00007fffec773cbb in jami::video::VideoInput::~VideoInput() () at /home/amarok/Projects/jami/daemon/src/.libs/libring.so.0
#3 0x00007fffec4cae2a in DRing::stopCamera() () at /home/amarok/Projects/jami/daemon/src/.libs/libring.so.0
#4 0x00007ffff7d17752 in VideoManagerInterface::stopCamera() (this=<optimized out>) at /home/amarok/Projects/jami/lrc/src/qtwrapper/videomanager_wrap.h:184
#5 0x00007ffff7d1cad0 in lrc::api::AVModel::setDeviceSettings(lrc::api::video::Settings&) (this=0x1496890, settings=...) at /home/amarok/Projects/jami/lrc/src/avmodel.cpp:293
#6 0x000000000049d42d in SettingsAdapter::set_Video_Settings_Rate_And_Resolution(QString const&, double, QString const&) (this=0xffb380, deviceId=..., rate=30, resolution=...) at /home/amarok/Projects/jami/client-qt/src/settingsadapter.cpp:193
#7 0x0000000000434c41 in SettingsAdapter::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=_o@entry=0xffb380, _c=_c@entry=QMetaObject::InvokeMetaMethod, _id=_id@entry=17, _a=_a@entry=0x7fffffff2710) at /home/amarok/Projects/jami/client-qt/build-local/jami-qt_autogen/UVLADIE3JM/moc_settingsadapter.cpp:708
#8 0x00000000004385ee in SettingsAdapter::qt_metacall(QMetaObject::Call, int, void**) (this=0xffb380, _c=QMetaObject::InvokeMetaMethod, _id=17, _a=0x7fffffff2710) at /home/amarok/Projects/jami/client-qt/build-local/jami-qt_autogen/UVLADIE3JM/moc_settingsadapter.cpp:969
#9 0x00007fffeeb08cf5 in QQmlObjectOrGadget::metacall(QMetaObject::Call, int, void**) const () at /lib64/libQt5Qml.so.5
#10 0x00007fffeea11149 in CallPrecise(QQmlObjectOrGadget const&, QQmlPropertyData const&, QV4::ExecutionEngine*, QV4::CallData*, QMetaObject::Call) () at /lib64/libQt5Qml.so.5
#11 0x00007fffeea123f7 in QV4::QObjectMethod::callInternal(QV4::Value const*, QV4::Value const*, int) const () at /lib64/libQt5Qml.so.5
#12 0x00007fffeea38cce in QV4::Runtime::CallPropertyLookup::call(QV4::ExecutionEngine*, QV4::Value const&, unsigned int, QV4::Value*, int) () at /lib64/libQt5Qml.so.5
#13 0x00007fff4014bb4e in ()
#14 0x00007fffffff2d40 in ()
#15 0x0000000000000010 in ()
#16 0x00007fff4014b000 in ()
#17 0x00007fff4014bb8b in ()
#18 0x000000000088d800 in ()
#19 0x00007fffeea2ceba in QV4::Moth::VME::exec(QV4::CppStackFrame*, QV4::ExecutionEngine*) [clone .part.0] () at /lib64/libQt5Qml.so.5
#20 0x00007fffee9d7d48 in QV4::ArrowFunction::virtualCall(QV4::FunctionObject const*, QV4::Value const*, QV4::Value const*, int) () at /lib64/libQt5Qml.so.5
#21 0x00007fffeea3cc46 in QV4::Runtime::CallQmlContextPropertyLookup::call(QV4::ExecutionEngine*, unsigned int, QV4::Value*, int) () at /lib64/libQt5Qml.so.5
#22 0x00007fff40148084 in ()
#23 0x00007fffffff3010 in ()
#24 0x0000000000000000 in ()
Thread 224 (Thread 0x7ffcceffd640 (LWP 2929321) "jami-qt"):
#0 0x00007fffedcf35db in ioctl () at /lib64/libc.so.6
#1 0x00007fffec9c4759 in mmap_read_frame (pkt=0x7ffc6401f2c0, ctx=0x7ffc64002200) at libavdevice/v4l2.c:505
#2 v4l2_read_packet (ctx=0x7ffc64002200, pkt=0x7ffc6401f2c0) at libavdevice/v4l2.c:992
#3 0x00007fffeca222c2 in ff_read_packet (s=s@entry=0x7ffc64002200, pkt=pkt@entry=0x7ffc6401f2c0) at libavformat/utils.c:843
#4 0x00007fffeca22c3b in read_frame_internal (s=s@entry=0x7ffc64002200, pkt=0x7ffc6401f2c0) at libavformat/utils.c:1546
#5 0x00007fffeca23938 in av_read_frame (s=0x7ffc64002200, pkt=0x7ffc6401f2c0) at libavformat/utils.c:1750
#6 0x00007fffec413fa7 in jami::MediaDemuxer::decode() () at /home/amarok/Projects/jami/daemon/src/.libs/libring.so.0
#7 0x00007fffec76f6a9 in jami::video::VideoInput::captureFrame() () at /home/amarok/Projects/jami/daemon/src/.libs/libring.so.0
#8 0x00007fffec774bcb in jami::video::VideoInput::process() () at /home/amarok/Projects/jami/daemon/src/.libs/libring.so.0
#9 0x00007fffec32602d in jami::ThreadLoop::mainloop(std::thread::id&, std::function<bool ()>, std::function<void ()>, std::function<void ()>) () at /home/amarok/Projects/jami/daemon/src/.libs/libring.so.0
#10 0x00007fffec326758 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (jami::ThreadLoop::*)(std::thread::id&, std::function<bool ()>, std::function<void ()>, std::function<void ()>), jami::ThreadLoop*, std::reference_wrapper<std::thread::id>, std::function<bool ()>, std::function<void ()>, std::function<void ()> > > >::_M_run() () at /home/amarok/Projects/jami/daemon/src/.libs/libring.so.0
#11 0x00007fffedffd444 in execute_native_thread_routine () at /lib64/libstdc++.so.6
#12 0x00007fffeda163f9 in start_thread () at /lib64/libpthread.so.0
#13 0x00007fffedcfcb53 in clone () at /lib64/libc.so.6
```
av_read_frame can block forever, causing the VideoInput to wait.Sébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/619SIPCall/ICE - Share unique ICE instance bettween subcalls2021-10-04T18:07:23ZMohamed ChibaniSIPCall/ICE - Share unique ICE instance bettween subcallsCurrently, when making an outgoing call to a Jami account with multiple registered devices, a new ice media instance is created for each subcall. This is not necessary, because all ice instances will be similar until the peer answers (an...Currently, when making an outgoing call to a Jami account with multiple registered devices, a new ice media instance is created for each subcall. This is not necessary, because all ice instances will be similar until the peer answers (and provide its candidates). But when the answer is received from the peer, all ice instances are destroyed except the instance of the successful subcall, which will be used to negotiate the media path.
Instead, only one instance should be created for the parent call, and shared amongst the attached subcalls.Mohamed ChibaniMohamed Chibanihttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/618ICE/PJNATH - assertion failure in start_nominated_check()2023-02-06T20:56:58ZMohamed ChibaniICE/PJNATH - assertion failure in start_nominated_check()Assertion failure in start_nominated_check() method:
```
2890 pj_assert(c->err_code == PJ_SUCCESS);
```
err_code is PJ_EPENDING instead of PJ_SUCCESS. \
Seen with TCP connections.Assertion failure in start_nominated_check() method:
```
2890 pj_assert(c->err_code == PJ_SUCCESS);
```
err_code is PJ_EPENDING instead of PJ_SUCCESS. \
Seen with TCP connections.https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/617ICE - resort the check list after adding prflx candidates2021-09-30T21:08:46ZMohamed ChibaniICE - resort the check list after adding prflx candidatesThe check list is not sorted after adding new prflx candidates, which can cause the nomination of candidates pairs with less priority. \
See https://github.com/pjsip/pjproject/pull/2806
[EDIT]
The patch was reverted until issue https://...The check list is not sorted after adding new prflx candidates, which can cause the nomination of candidates pairs with less priority. \
See https://github.com/pjsip/pjproject/pull/2806
[EDIT]
The patch was reverted until issue https://git.jami.net/savoirfairelinux/ring-daemon/-/issues/627 is resolvedMohamed ChibaniMohamed Chibanihttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/615UPNP - IGD search must restarted if a connectivity check is received and ther...2021-09-02T15:00:10ZMohamed ChibaniUPNP - IGD search must restarted if a connectivity check is received and there is no valid IGDMohamed ChibaniMohamed Chibanihttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/614video configuration issue causes crashes2022-07-05T18:05:27ZFuchtelJockelvideo configuration issue causes crashesFor some reason the dring.yml gets set to:
```yml
video:
decodingAccelerated: true
encodingAccelerated: false
```
Jami will crash if set so when using the webcam.
setting it to:
```yml
video:
decodingAccelerated: true
encodingAc...For some reason the dring.yml gets set to:
```yml
video:
decodingAccelerated: true
encodingAccelerated: false
```
Jami will crash if set so when using the webcam.
setting it to:
```yml
video:
decodingAccelerated: true
encodingAccelerated: true
```
will prevent the crashhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/613pjnath: Leak of STUN TCP socket2021-08-25T13:48:27ZOlivier Dionpjnath: Leak of STUN TCP socketFound by agents:
- [alice.scm](/uploads/45a2005456b023cdd47fff56787fafb5/passive-agent.scm)
- [bob.scm](/uploads/220e091417951aebfa9b3ac52253e013/desc.scm)
Progression of TCP leak (Alice side):
- [lsof.log](/uploads/c1f1d55f0f2b2...Found by agents:
- [alice.scm](/uploads/45a2005456b023cdd47fff56787fafb5/passive-agent.scm)
- [bob.scm](/uploads/220e091417951aebfa9b3ac52253e013/desc.scm)
Progression of TCP leak (Alice side):
- [lsof.log](/uploads/c1f1d55f0f2b2f2e1fb666888216d864/lsof.log)
Trace of `socket(*, SOCK_STREAM, *)` (Alice side):
- [tcp-trace.txt](/uploads/2a14a06a7cb876d8fca99065f06c6f06/tcp-trace.txt)
Matching progression against the trace, leaks seem to follow this pattern:
```
pj_sock_socket at /daemon/contrib/native/pjproject/pjlib/build/../src/pj/sock_bsd.c:583
pj_stun_sock_connect at /daemon/contrib/native/pjproject/pjnath/build/../src/pjnath/stun_sock.c:1315
pj_stun_sock_connect_active at /daemon/contrib/native/pjproject/pjnath/build/../src/pjnath/stun_sock.c:1436
ice_wait_tcp_connection at /daemon/contrib/native/pjproject/pjnath/build/../src/pjnath/ice_strans.c:2741
perform_check at /daemon/contrib/native/pjproject/pjnath/build/../src/pjnath/ice_session.c:2662
start_periodic_check at /daemon/contrib/native/pjproject/pjnath/build/../src/pjnath/ice_session.c:2814
periodic_timer at /daemon/contrib/native/pjproject/pjnath/build/../src/pjnath/ice_session.c:2921
pj_timer_heap_poll at /daemon/contrib/native/pjproject/pjlib/build/../src/pj/timer.c:915
jami::IceTransport::Impl::handleEvents(unsigned int) at /daemon/src/ice_transport.cpp:544
[...]
```Olivier DionOlivier Dionhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/612sipcall: Invalid address IP family of account's ICE option2021-08-25T17:44:14ZOlivier Dionsipcall: Invalid address IP family of account's ICE optionSee [gdb.txt](/uploads/80bea4f9be460450799a35d7c7d4de17/gdb.txt) Thread 35.See [gdb.txt](/uploads/80bea4f9be460450799a35d7c7d4de17/gdb.txt) Thread 35.https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/611Reorder video tiles via drag and drop2021-08-18T19:43:04ZovariReorder video tiles via drag and dropReorder video tiles via drag and drop.
https://jitsi-hacks.cketti.eu/hacks/reorder/
![image](/uploads/90539430a84e1b31e755b4b68f3d3e0a/image.png)
# Installation
Drag the following link into your browser’s bookmark bar: [Reorder video...Reorder video tiles via drag and drop.
https://jitsi-hacks.cketti.eu/hacks/reorder/
![image](/uploads/90539430a84e1b31e755b4b68f3d3e0a/image.png)
# Installation
Drag the following link into your browser’s bookmark bar: [Reorder video tiles](javascript:(function()%7Bfunction%20callback()%7B%7Dvar%20s%3Ddocument.createElement(%22script%22)%3Bs.src%3D%22https%3A%2F%2Fjitsi-hacks.cketti.eu%2Freorder.js%22%3Bif(s.addEventListener)%7Bs.addEventListener(%22load%22%2Ccallback%2Cfalse)%7Delse%20if(s.readyState)%7Bs.onreadystatechange%3Dcallback%7Ddocument.body.appendChild(s)%3B%7D)())
If the link doesn't work, here is the code:<br>
`javascript:(function()%7Bfunction%20callback()%7B%7Dvar%20s%3Ddocument.createElement(%22script%22)%3Bs.src%3D%22https%3A%2F%2Fjitsi-hacks.cketti.eu%2Freorder.js%22%3Bif(s.addEventListener)%7Bs.addEventListener(%22load%22%2Ccallback%2Cfalse)%7Delse%20if(s.readyState)%7Bs.onreadystatechange%3Dcallback%7Ddocument.body.appendChild(s)%3B%7D)()`
To inject the script click the link in the bookmark bar while the Jitsi Meet tab is active. The effects only last until the next page reload.
# Usage
Once the hack is loaded you can reorder videos in tile view via drag and drop.
How does it work?
The script utilizes the [Dragula](https://bevacqua.github.io/dragula/) library to allow reordering video tiles via drag and drop.
# Source Code
Find [reorder.js](https://github.com/cketti/jitsi-hacks/blob/main/docs/reorder.js) on GitHub.https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/610ICE/SIPCall - possible race condition in ICE initialization2021-09-15T14:23:37ZMohamed ChibaniICE/SIPCall - possible race condition in ICE initializationPossible race condition between JamiAccount::SIPStartCall() and SIPCall::initIceMediaTransport(). SIPCall::addLocalIceAttributes() is called by SIPStartCall() before the ice session is fully setup.
```
[1628703709.408|52540|ice_transpor...Possible race condition between JamiAccount::SIPStartCall() and SIPCall::initIceMediaTransport(). SIPCall::addLocalIceAttributes() is called by SIPStartCall() before the ice session is fully setup.
```
[1628703709.408|52540|ice_transport.cpp :791 ] [ice:0x7fff99480f00] added host stun config for UDP transport
[1628703709.422|52540|ice_transport.cpp :566 ] [ice:0x7fff99480f00] UDP initialization success
[1628703709.422|52540|ice_transport.cpp :630 ] [ice:0x7fff99480f00] as master
[1628703709.426|52540|ice_transport.cpp :766 ] [ice:0x7fff99480f00] (local) ufrag=132de820, pwd=057ba91211155276119d9083
[1628703709.430|52686|sipcall.cpp :1642 ] [call:438314284593258] no media ICE transport, SDP not changed
[1628703709.432|52686|sipcall.cpp :686 ] [call:438314284593258] Set new invite session [0x7fff94133328]
[1628703709.436|52540|sipcall.cpp :2935 ] [call:438314284593258] Successfully created media ICE transport
```Mohamed ChibaniSébastien BlinMohamed Chibanihttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/609Device info isCurrent issue2022-01-24T16:44:22ZMing Rui ZhangDevice info isCurrent issueWhen an account is created initially, the device info from the only device (current device) has the isCurrent set to false.When an account is created initially, the device info from the only device (current device) has the isCurrent set to false.https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/608ICE - add generic srflx candidates only if UPNP candidates are not available2021-08-17T20:05:30ZMohamed ChibaniICE - add generic srflx candidates only if UPNP candidates are not availableCurrently, (generic) srflx candidates generated using the account public address are always added regardless if UPNP candidates are available or not. Having duplicate srflx candidates is not useful, and even worse, it may reduce the chan...Currently, (generic) srflx candidates generated using the account public address are always added regardless if UPNP candidates are available or not. Having duplicate srflx candidates is not useful, and even worse, it may reduce the chance of UPNP candidates to succeed.Mohamed ChibaniMohamed Chibanihttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/607ICE - missing srflx candidates in answer2021-08-17T20:05:31ZMohamed ChibaniICE - missing srflx candidates in answerServer reflexive candidates are not added in call answer if UPNP is disabled. This can cause ICE media negotiation failure if the peer is behind a NAT with TURN enabled, and UPNP disabled/unavailable.
Setup:
Endpoint A
TURN enabled
UPNP...Server reflexive candidates are not added in call answer if UPNP is disabled. This can cause ICE media negotiation failure if the peer is behind a NAT with TURN enabled, and UPNP disabled/unavailable.
Setup:
Endpoint A
TURN enabled
UPNP disabled
Endpoint B
TURN disabled
UPNP disabled
A calls B.
Results: failed (notice the absence of srflx cand in B's SDP answer)
Expected: success (connection pair A:relay <-> B:prflx
ICE fails because the TURN server does not authorize connection from prflx candidates because they are unknown to it (they be authorized if the B add the address as a srflx canddiate).
Note that the call is successful if B calls A (because the srflx are included in the offer).Mohamed ChibaniMohamed Chibanihttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/605ICE/PJNATH - use different Ta timer for TCP candidates2021-09-08T14:05:59ZMohamed ChibaniICE/PJNATH - use different Ta timer for TCP candidatesThe current Ta timer (interval between two connectivity checks, see RFC-5245 for details) is set to 20ms and used for UDP and TCP candidates alike. RFC-5245 (section recommends using a less a higher value for non-real-time application (T...The current Ta timer (interval between two connectivity checks, see RFC-5245 for details) is set to 20ms and used for UDP and TCP candidates alike. RFC-5245 (section recommends using a less a higher value for non-real-time application (TCP/TLS connections in our case). Furthermore, newer ICE spec (RFC-8445), recommends a min value of 50ms for real-time applications.
The advantage of using a low Ta value (20ms) is to start the connectivity checks, but the drawback is a abrupt increase in bandwidth (as described in RFC-5245 and RFC-8445). The peak in bandwidth usage may be significant if the candidate list is large. The goal is to find a better trade-off between connection speed and bandwidth usage.Mohamed ChibaniMohamed Chibanihttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/604Video conf: bad mute status2021-08-05T19:41:06ZSébastien BlinVideo conf: bad mute status+ Alice is a rendez-vous
+ Bob joins
+ Carla joins
+ Bob is muted by a moderator
+ Bob leaves
+ Bob joins
# Expected result
+ Bob should not be shown as muted because it's not anymore
# Current
Bob is shown as muted+ Alice is a rendez-vous
+ Bob joins
+ Carla joins
+ Bob is muted by a moderator
+ Bob leaves
+ Bob joins
# Expected result
+ Bob should not be shown as muted because it's not anymore
# Current
Bob is shown as mutedAline Gondim SantosAline Gondim Santoshttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/603Extract conversation's code from jamiaccount2021-09-13T17:03:00ZSébastien BlinExtract conversation's code from jamiaccountJamiAccount is too big. Split this classJamiAccount is too big. Split this classSébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/602Deadlock with sendBeacon2021-08-17T20:19:30ZSébastien BlinDeadlock with sendBeacon[gdb.txt](/uploads/e9900d59f519af011c3af4eec22deb0c/gdb.txt)[gdb.txt](/uploads/e9900d59f519af011c3af4eec22deb0c/gdb.txt)Sébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/601ICE - disable aggressive nomination2021-09-02T15:00:33ZMohamed ChibaniICE - disable aggressive nominationMohamed ChibaniMohamed Chibanihttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/599Account preferences: add preferences to send or not displayed status2021-08-09T13:30:43ZSébastien BlinAccount preferences: add preferences to send or not displayed statusFor now clients are doing their own logic. This should be moved into the daemon. This allow us to group code from differnt clients.For now clients are doing their own logic. This should be moved into the daemon. This allow us to group code from differnt clients.Sébastien BlinSébastien Blin