You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
scrcpy/doc/audio.md

2.4 KiB

Audio

Audio forwarding is supported for devices with Android 11 or higher, and it is enabled by default:

  • For Android 12 or newer, it works out-of-the-box.
  • For Android 11, you'll need to ensure that the device screen is unlocked when starting scrcpy. A fake popup will briefly appear to make the system think that the shell app is in the foreground. Without this, audio capture will fail.
  • For Android 10 or earlier, audio cannot be captured and is automatically disabled.

If audio capture fails, then mirroring continues with video only (since audio is enabled by default, it is not acceptable to make scrcpy fail if it is not available), unless --require-audio is set.

No audio

To disable audio:

scrcpy --no-audio

Codec

The audio codec can be selected. The possible values are opus (default), aac and raw (uncompressed PCM 16-bit LE):

scrcpy --audio-codec=opus  # default
scrcpy --audio-codec=aac
scrcpy --audio-codec=raw

Several encoders may be available on the device. They can be listed by:

scrcpy --list-encoders

To select a specific encoder:

scrcpy --audio-codec=opus --audio-encoder='c2.android.opus.encoder'

For advanced usage, to pass arbitrary parameters to the MediaFormat, check --audio-codec-options in the manpage or in scrcpy --help.

Bit rate

The default video bit-rate is 128Kbps. To change it:

scrcpy --audio-bit-rate=64K
scrcpy --audio-bit-rate=64000  # equivalent

This parameter does not apply to RAW audio codec (--audio-codec=raw).

Buffering

Audio buffering is unavoidable. It must be kept small enough so that the latency is acceptable, but large enough to minimize buffer underrun (causing audio glitches).

The default buffer size is set to 50ms. It can be adjusted:

scrcpy --audio-buffer=40   # smaller than default
scrcpy --audio-buffer=100  # higher than default

Note that this option changes the target buffering. It is possible that this target buffering might not be reached (on frequent buffer underflow typically).

If you don't interact with the device (to watch a video for example), a higher latency (for both video and audio) might be preferable to avoid glitches and smooth the playback:

scrcpy --display-buffer=200 --audio-buffer=200