1. 音频框架简单介绍
linux 的音频管理是比较繁杂,我们的音频框架上层应用是的 js 服务, 中间层 ffmpeg + pulseaudio,底层的 alsa。 整个链路比较长,如何快速的定位播放问题是个问题,我对常见的问题做了总结
2. 常见问题的定位
2.1 设备无声
a. 确认各播放相关的进程是否正常,在内存珍贵的开发板上发送内存不足,进程被 OOM 一点也不奇怪,查看 pulseaudio 等播放相关进程被 kill
b. ffplay 确认中间层 ffmpeg 的基本功能
c. paplay 播放 wav 文件确认 paulseaudio 是否播放正常
d. pactl list 确认设备是不是被静音
e. pactl list sinks 检查 sink 流有木有被切到蓝牙设备上
f. aplay 播放 wav 文件确认 alsa 是否播放正常
g. 查看设备节点 ls dev/snd/
h. 检查喇叭是否连接好
备注:
- pulseaudio 可以直接管理一些流之外,它可以自主的切换输出流,比如切到 蓝牙设备上,耳机,蓝牙耳机很快切换 sink
- 可以使用 pactl 查看和设置当前 pulseaudio 的状态和每个sink、sink-input、source、source-output 的状态。
pactl -h
pactl [options] stat
pactl [options] info
pactl [options] list [short] [TYPE]
pactl [options] exit
pactl [options] upload-sample FILENAME [NAME]
pactl [options] play-sample NAME [SINK]
pactl [options] remove-sample NAME
pactl [options] load-module NAME [ARGS ...]
pactl [options] unload-module NAME|#N
pactl [options] move-(sink-input|source-output) #N SINK|SOURCE
pactl [options] suspend-(sink|source) NAME|#N 1|0
pactl [options] set-card-profile CARD PROFILE
pactl [options] set-default-(sink|source) NAME
pactl [options] set-(sink|source)-port NAME|#N PORT
pactl [options] set-(sink|source)-volume NAME|#N VOLUME [VOLUME ...]
pactl [options] set-(sink-input|source-output)-v