Details
-
Bug
-
Resolution: Unresolved
-
P2: Important
-
None
-
6.9
-
-
Multimedia Next Next
Description
When testing audio Android, and switching devices, I have observed some strange behavior. This has been observed on the FFmpeg backend. This was observed on a basic QML test app running just a MediaPlayer and an AudioOutput object. I might push this test app to the Qt Multimedia manual tests in the future.
The USB headset that was tested is a Jabra Evolve 65. The Bluetooth headphones tested is Google Pixel Buds A-series.
The devices tested are the following:
Motorola Razr 40 Ultra Android version 15
Samsung Galaxy Tab A9, Android version 14
Observed on Motorola Razr 40 Ultra:
If you start the application with no external audio device attached, QMediaDevices will report two devices "Built in speakers" and "Built in earpiece". Testing shows that it's possible to switch device between "Built in speaker" and Bluetooth headphones, but any attempt to assign the device "Built in earpiece" has no effect on audio even though the property in AudioOutput is updated.
In other applications (such as Discord), the distinction seems to mostly apply to whether the audio should come out in a loud volume through the main loudspeaker on the phone, or if the audio should come in a lower volume from the smaller speaker next to the ear. Ideally we should be able to make such a distinction, our current approach is ambiguous and inconsistent. If we cannot solve it, we should not expose the "Built in earpiece" device.
Observed on Motorola Razr 40 Ultra:
If you connect Bluetooth headphones in the midst of audio playback when playing through speakers, there is a very noticable moment of silence where the audio will play for a brief second on the Bluetooth headphones before the audio returns to the speakers.
The fact that we don't switch audio devices is good, but ideally we should fix this issue to make it more seamless.
Observed on Motorola Razr 40 Ultra and Galaxy Tab A9:
During playbacking, when Bluetooth headphones are disconnected, the QAudioOutput automatically switches audio device to whatever is default, but NOT when the Bluetooth are connected.
I argue that we should avoid switching the device automatically in these cases. The behavior on macOS is that the AudioOutput still points to the disconnected device but no longer emits the audio.
Observed on Motorola Razr 40 Ultra and Galaxy Tab A9:
If you start MediaPlayer with Bluetooth headphones connected, the default audio device will be listed as the Bluetooth headphones in QMediaDevices. If you start a MediaPlayer with a default AudioOutput, the API will list "Built in speaker" as the current audio output device but the audio will actually come out of the Bluetooth headphones.
There seems to be a bug where we don't resolve AudioOutput's AudioDevice to the actual default audio-device when constructing the AudioOutput.
Observed on Motorola Razr 40 Ultra and Galaxy Tab A9:
If you start the application with a headset connected by USB, the headset will not be recognized by QMediaDevices as a distinct device. The AudioOutputs device will be listed as "built in earpiece". Another device "built in speakers" will be listed as the default audio output device. The audio will come out of the USB headset.
If this is intended behavior or something we can't do anything about, it is misleading to describe the audio device as built-in speaker if it is also acting as some kind of default audio router.
Attachments
Issue Links
- relates to
-
QTBUG-132951 Android: migrate audio classes to AAudio to align with pipewire/coreaudio
-
- Reported
-