uni-app 无法直接播放 AMR 文件,因 innerAudioContext 在所有平台均不支持 AMR 解码;推荐服务端用 ffmpeg 转为 MP3/AAC 后播放,或 App 端通过 renderjs 调用原生模块解码。
uni-app 无法直接播放 amr 文件 —— uni.createinneraudiocontext() 在所有平台(包括微信小程序、h5、app)均不支持 amr 格式解码。这不是配置问题,是底层 web audio / native audio api 的硬性限制。
为什么 innerAudioContext 播放 AMR 会静音或报错
AMR 是窄带语音编码格式,浏览器和多数 WebView(如 Android 系统 WebView、iOS WKWebView)原生不提供 AMR 解码器。即使 src 赋值成功,调用 play() 后:
• 微信小程序:触发 onError,errMsg 类似 "invalid file type" 或静默失败
• H5:多数浏览器直接忽略,onCanPlay 不触发,duration 为 NaN
• App(Android/iOS):行为不一致,但基本无法解码,尤其 iOS 完全不支持
可行的替代方案:服务端转码 + 前端播放 MP3/AAC
这是最稳定、兼容性最好的路径,适用于所有 uni-app 发布目标(小程序/H5/App):
• 上传 AMR 文件到后端(如用户录音后调用 uni.uploadFile)
• 后端使用 ffmpeg 转成 MP3(推荐)或 AAC(iOS 更友好)
• 返回转码后的 URL,前端用 uni.createInnerAudioContext() 播放该 URL
• 注意:MP3 需确保采样率 ≤44.1kHz、单声道/双声道、CBR/VBR 均可,无兼容问题
客户端临时方案(仅限 App 端,需 renderjs + 原生能力)
如果必须在 App 端“本地”播放 AMR(比如离线场景),不能依赖网络转码,需绕过 innerAudioContext:
• 使用 renderjs 调用原生模块(Android 用 MediaPlayer,iOS 用 AVAudioPlayer)
• 对于 AMR,Android 可通过 MediaCodec 解码后喂给 AudioTrack;iOS 则需先用第三方库(如 opencore-amr)解码为 PCM,再播放
• 这意味着你要自己封装一个原生插件,或集成已有的 AMR 播放插件(如 DCloud 插件市场中极少数支持 AMR 的付费插件)
• ⚠️ 此方案无法用于微信小程序和 H5,且开发/维护成本高,容易因系统升级失效
真正卡住的地方不是「怎么写播放代码」,而是 AMR 本身不在 Web 标准音频解码器列表里。别在 src 上反复试错,优先推动后端接入 ffmpeg 转码流程 —— 这才是能上线、能维护、能跨端的解法。


















