Error: “此流的格式错误。”
最近在移植 miniSIPPhone 到 Linux 系统时,遇到一个奇怪的错误:播放 wav 语音文件时提示“此流的格式错误”,无论是采用 QSound 还是 QMediaPlayer 播放 wav 文件都出现了这个错误。按照我们一贯以来的要求,miniSIPServer 和 miniSIPPhone 的语音文件都采用了同样的格式:
CCITT A-Law, 8KHZ, 8Bit, 7KB/sec, 单通道
换用 VLC 播放没有任何问题,在 Windows 系统上播放也没有任何问题。考虑到 Qt 在 Linux 系统上实际是调用 GStreamer 的 plugins 来解码和播放各种语音格式,而我们的录制格式是如此的普通和平平无奇,实在想不通为什么会出现格式错误。
遍历了各种可能原因后忽然想到,或许 GStreamer 默认不支持 A-Law?这个格式在通信领域用得比较多,而一般语音播放、音乐等软件可能不太会关注这种格式。将语音文件格式转换成以下格式:
CCITT PCM, 8KHZ, 8Bit, 7KB/sec, 单通道
然后果然成功了,miniSIPPhone 在 Linux 平台也可以正常播放各种提示音。