0

When I set up two Google Nest Audio as a stereo pair of wifi speakers, no matter how I connect to them, either through Chromecast or Bluetooth they have a delay of about 1 second, so videos are not lipsync and almost impossible to watch. Is there something that can be done?


I'm writing this Q&A after trying the speakers for weeks since release with different technologies as well as contacting Avantree and Google Support. Avantree said the Nest Audio only supports Bluetooth SBC codec, no Aptx Low Latency or Faststream. Google Support just confirmed that this is true and that they only recommend to use other Google Home devices. However they also said that it's a nice idea and worth a feature request, depending on regions some features may not be available though. I said that I had a working workaround, they said they found some entries in forums too but none seemed to work… se this is how this is how I came to write this Q&A and hope that good content can be found easily. :-)

LiveWireBT
  • 28,763

1 Answers1

0

A Workaround in PulseAudio

If you connect to your Nest Audio pair directly via Bluetooth you can set a delay in PulseAudio on the command line with set-port-latency-offset for the particular card in microseconds. 1sec = 1000000usec. Don't be confused, yes PulseAudio handles a connected Bluetooth speaker like another sound card and it will only apply this new setting only to this device. So when you use your headphone—wired or not—no delay will be applied by default or you will have to configure a delay for this connection too. There is probably a GUI option, but I prefer text and commands in my bash_history.

pactl set-port-latency-offset bluez_card.xx_xx_xx_xx_xx_xx unknown-output 1000000

Speaking of Bash, PulseAudio has bash completion or command completion. Just use the tab key to save typing and see which options are available and if what you entered is correct.

You need to replace xx_xx_xx_xx_xx_xx with the address of your Bluetooth speaker. Don't worry, if it is already connected command completion will show it to you. If not: try this.

Do you have a USB transmitter that looks like a sound card to your computer but sends Bluetooth audio to your speakers? Then use this:

pactl set-port-latency-offset alsa_card.usb-0a12_Avantree_DG80-00 analog-output 1000000

usb-0a12_Avantree_DG80-00 is my transmitter, an Avantree DG80. If yours is a different one—which should work well too—you need to replace it. Again command completion is you friend!

Implications of the workaround, how it works and what not

I'm not a PulseAudio developer or regular on the developer mailing list, so I will try to explain it simple… and inaccurate.

PulseAudio will try to play audio so that it matches video playback in applications like video players and your web browser. Sounds from other applications or your desktop will have the same delay as before and anything that requires low latency and real time communication will still be difficult to use, but the glaring issue of non-lipsync video is compensated. When you think about what PulseAudio and other applications have to handle here on a lower level it is not an easy task and makes your head spin.

I can watch videos in mpv and on Youtube with Firefox quite well. But I notice awkward behavior during ads in a Youtube video.

From time to time the connection will drop out or have a greater delay. It does not happen often, but when it does it helps to reconnect the speakers, even they seem to be connected properly and in some cases power the speakers off and on again (I have smart sockets for that). Rebooting you Wifi AP or Router may also help.

For Bluetooth connections I'm using a modified version of pylover's script which I have not published yet due to lack of time to get more familiar with Python. But I can enter and tab a few letters on the command line (thanks to aliases and parameterizing of my version) and watch my devices connect almost automatically without spending much time in menus.

Good luck.

LiveWireBT
  • 28,763