element-hq / riot-android

A glossy Matrix collaboration client for Android
Apache License 2.0
1.4k stars 394 forks source link

Microphone/Outgoing audio not working during voice and video calls (Android 10, 6) #3455

Closed calvinrw closed 4 years ago

calvinrw commented 4 years ago

Firstly, Riot developers, thank you for your continued hard work in this project.

While exploring the voice/video calling features of Riot and Matrix, I have encountered a possible bug in the current Riot client for Android.

Environment

Server (self-hosted) matrix-synapse 1.12.3 on Debian 9.12 coturn 4.5.1.1-1.1 on Debian 10.3

Client 1 (Mine) Motorola Moto Z3 Play Android 10 (LineageOS 17.0) Riot.im 0.9.10 (G-6f8ee3c4f) via Google Play

Client 2 (Mine) Motorola Moto X (2013; 1st generation) Android 6.0.1 (LineageOS 13.0) Riot.im 0.9.10 (G-6f8ee3c4f) via Google Play

Clients 3 and 4 Motorola Moto X (2014; 2nd generation) Android 5.1 (Stock ROM) Riot.im 0.9.10 (G-6f8ee3c4f) via Google Play

Expected behavior

When placing a voice or video call between users in Riot, both parties will be able to hear each other after the call connects.

Actual behavior

When a user places a voice or video call using Client 1 or Client 2, the call appears to connect successfully (call timer begins and video streams are shown if applicable), but the recipient of the call (Client 3 or Client 4) is unable to hear them; there is only one-way audio. Two-way video functionality works as expected.

Steps to reproduce

  1. User of Client 1 places a call with user of Client 3
  2. Other user picks up call and attempts conversation
  3. User of Client 3 reports that they cannot hear user of Client 1

Or

  1. User of Client 3 places call with user of Client 1
  2. Other user picks up call and attempt conversation
  3. User of Client 3 reports that they cannot hear user of Client 1

In these instances, Clients 1 and 2 are interchangeable, as are Clients 3 and 4.

Details

Calls between Client 1 and Client 2 result in no audio whatsoever. In this case, some faint crackling/static can be heard on Client 1.

The above is consistently reproducible, and occurs when both clients are on the same LAN (via WiFi), and across the internet (with Client 1 switched over to 4G/LTE).

Riot.im has been fully uninstalled and reinstalled on Clients 1 and 2 to no effect. Enabling speaker phone mode or using a Bluetooth headset makes no difference. Both server VMs have been fully updated and rebooted during the course of testing as well. I have gone as far as editing build.prop in Client 1 to play with Fluence noice cancelling settings, which may or may not even be applicable to these model phones.

Calls between Client 3 and Client 4 work as expected; according to the owners of these devices, two-way audio and video works without any issues.

Other comments

My most interesting observation is that voice calls between Clients 1 and 2 have worked perfectly exactly twice, on different days. Once with both devices on the same LAN, and once with Client 1 on 4G. I have been unable to reproduce the conditions that made this possible.

To summarize, these are the audio paths that I've confirmed work:

Android 5.1   <=> Android 5.1
Android 10    <=  Android 5.1
Android 6.0.1 <=  Android 5.1
calvinrw commented 4 years ago

This is most likely a LineageOS-specific issue, as I recently discovered that the microphone doesn't work as expected in other apps as well. Mixer and audio path-related problems are very common in LineageOS, so this is most likely the root cause.