opentok / opentok-android-sdk-samples

Sample applications illustrating best practices using OpenTok Android SDK.
https://tokbox.com/developer/sdks/android/
MIT License
210 stars 170 forks source link

Cannot change AudioDevice for advanced CustomAudioDevice #493

Open fpetrovski opened 6 months ago

fpetrovski commented 6 months ago

Describe the bug Unable to change customAudioDevice (extended from BaseAudioDevice) between video calls. Once the customAudioDevice has been set, it can't be change at all, unless the app is stopped and restarted.

To Reproduce

  1. Create a customAudioDevice by extending BaseAudioDevice
  2. Set your audio device by calling AudioDeviceManager.setAudioDevice(audioDevice) and build VideoCall Session.
  3. Stop the call, finish and cleanup your videocall session .
  4. Modify the parameters of your custom audio device
  5. Before building the new VideoCall session, call AudioDeviceManager.setAudioDevice(audioDevice)
  6. AudioDeviceManager keeps reference to old state and throw new IllegalStateException("AudioDevice can only be changed before initialization.");

Expected behavior The AudioDevice should be cleared after a video call has been ended. We need the AudioDeviceManager to drop references to the previous AudioDevice and be ready to accept a new one.

Device (please compete the following information):

v-kpheng commented 3 months ago

@fpetrovski , apologies for the belated reply. Thank you so much for the detailed error report. That helps out a lot. I'll reach out to engineering now. Will keep you posted.

v-kpheng commented 3 months ago

@fpetrovski, heard back from Engineering.

The Audio Device does not have a direct reference from Session and will not be cleared after session disconnect/cleanup. To avoid the error, you can close the app and reopen it to do AudioDeviceManager.setAudioDevice(audioDevice) to set it to a different audio device.

Alternatively, check before setting the audio device, you can do the following to avoid the error.


if (AudioDeviceManager.getAudioDevice() == null) { 
  AudioDeviceManager.setAudioDevice(audioDevice);
}
fpetrovski commented 3 months ago

Hi, thanks for getting back to me. The suggestion that is provided does not apply in this case, or is a workaround at best for different usecases. As I have already stated, we are aware that the Audio Device will not be cleared after session disconnect/cleanup. That's why we are reporting this issue. We are also aware that closing and clearing the app resets things, but that should not be the default usecase. Additionally The SDK does not provide a way to clear and change the customAudioDevice (outside of reseting the app).

Would you be able to relay our request/suggestion to the engineering team: The AudioDevice should provide a way to be cleared and ready for a new set of parameters (new AudioDevice). Or at least be cleared by default after a video call has been ended.

Restarting the app is out of the question for our use case, and should be out of the question for any other use case. We cannot force the users to "restart".

v-kpheng commented 2 months ago

@fpetrovski, we'll look into this: https://jira.vonage.com/browse/VIDCS-2108.