音频

对于Android 11或更高版本的设备,支持音频转发,默认启用:

  • 对于Android 12或更新版本,它可以直接工作。
  • 对于Android 11,在启动scrcpy时需要确保设备屏幕已解锁。一个假弹窗会短暂出现,以使系统认为shell应用在前台。没有这个步骤,音频捕获将会失败。
  • 对于Android 10或更低版本,无法捕获音频,并且会自动禁用。

如果音频捕获失败,则只会进行视频镜像(因为音频默认启用,如果不适用,scrcpy失败是不可接受的),除非设置了--require-audio

无音频

要禁用音频:

scrcpy --no-audio

要仅禁用音频播放,请查看无播放

仅音频

要仅播放音频,禁用视频和控制:

scrcpy --no-video --no-control

要在没有窗口的情况下播放音频:

# --no-video和--no-control由--no-window暗示
scrcpy --no-window
# 使用Ctrl+C打断

没有视频时,音频延迟通常不是关键,所以可能有趣的是添加缓冲以最小化卡顿:

scrcpy --no-video --audio-buffer=200

默认情况下,设备音频输出会被转发。

也可以捕获设备的麦克风:

scrcpy --audio-source=mic

例如,将设备作为口述录音机,在计算机上直接录制捕获:

scrcpy --audio-source=mic --no-video --no-playback --record=file.opus

复制

另一种设备音频捕获方法是可用的(仅适用于Android 13及以上版本):

scrcpy --audio-source=playback

这个音频源支持在镜像时保持设备上的音频播放,并使用--audio-dup

scrcpy --audio-source=playback --audio-dup
# 或者简单地说:
scrcpy --audio-dup  # --audio-source=playback是隐含的

然而,这需要Android 13,而且Android应用程序可以选择退出(因此不会被捕获)。

请参见#4380

编解码器

可以选择音频编解码器。可能的值有opus(默认)、aacflacraw(未压缩的PCM 16位LE):

scrcpy --audio-codec=opus  # 默认
scrcpy --audio-codec=aac
scrcpy --audio-codec=flac
scrcpy --audio-codec=raw

特别是,如果你收到以下错误:

初始化音频/opus失败,错误0xfffffffe

那么你的设备没有Opus编码器:尝试scrcpy --audio-codec=aac

对于高级用法,要将任意参数传递给[MediaFormat],请检查manpage中的--audio-codec-options或在scrcpy --help中查看。

例如,要更改FLAC压缩级别

scrcpy --audio-codec=flac --audio-codec-options=flac-compression-level=8

编码器

设备上可能有多个编解码器。可以通过以下命令列出它们:

scrcpy --list-encoders

要选择特定的编解码器:

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

比特率

默认的音频比特率是128Kbps。要更改它:

scrcpy --audio-bit-rate=64K
scrcpy --audio-bit-rate=64000  # 等效

这个参数不适用于RAW音频编解码器(--audio-codec=raw)。

缓冲

音频缓冲是不可避免的。必须保持足够小以便可接受延迟,但也要足够大以最小化缓冲欠载(导致音频卡顿)。

默认缓冲区大小设置为50毫秒。可以调整:

scrcpy --audio-buffer=40   # 小于默认
scrcpy --audio-buffer=100  # 大于默认

请注意,此选项更改了_目标_缓冲。可能这个目标缓冲可能无法达到(通常经常发生缓冲欠载)。

如果你不与设备互动(例如观看视频),更高的延迟(对于视频和音频)可能更可取,以避免卡顿并平滑播放:

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

还可以配置另一个音频缓冲区(音频输出缓冲区),默认设置为5毫秒。不要更改它,除非你得到一些机械和卡顿声音

# 仅在绝对必要时
scrcpy --audio-output-buffer=10