音频
对于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
(默认)、aac
、flac
和raw
(未压缩的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