You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native(Expo) iOS播放uri来源音频报AVFoundation -11850错误

错误根源

AVFoundationErrorDomain 错误码-11850的核心触发原因是本地后端服务未支持HTTP字节范围请求(Range Request)。iOS系统的AVPlayer加载音视频资源时强制要求服务端支持分段请求,该规则与音视频格式无关,安卓、桌面端无此强制限制因此不会触发报错。

验证方法

执行以下curl命令测试后端是否支持Range请求:
curl -I --header "Range: bytes=0-100" http://127.0.0.1:8000/media/audios/2021/08/08/27/21/filename.mp4

  • 返回状态码206 Partial Content:支持Range请求
  • 返回状态码200 OK:不支持Range请求,需要修改后端配置

修复方案

  • 若使用Nginx托管静态资源:在对应静态资源的location配置块中添加mp4;、range on;配置即可,默认Nginx已开启Range支持,若自定义配置关闭了相关规则打开即可。
  • 若使用Django/Flask等后端框架直接托管静态资源:开发环境下框架默认的静态服务大多不支持Range请求,生产环境建议直接将静态资源交给Nginx托管;若需要在开发环境保留框架托管的方式,Django可安装django-ranged-response中间件扩展Range支持,Flask可在返回静态资源的逻辑中添加分段响应的相关处理。
  • 额外检查:iOS默认开启ATS(应用传输安全)限制,禁止HTTP请求,需要在项目Info.plist中将127.0.0.1添加到ATS例外列表,允许本地HTTP请求。

代码优化建议

当前代码未捕获loadAsync方法抛出的Promise异常,可补充catch逻辑避免出现未处理的Promise拒绝报错:

const player = new Audio.Sound();
player.loadAsync({ uri: url }, initialStatus)
.then(() => {
    return player.playAsync()
})
.then((playbackStatus) => {
    if (playbackStatus.error) {
      handlePlaybackError(playbackStatus.error);
    }
})
.catch(err => {
    // 统一处理加载、播放阶段的所有报错
    console.log('音频播放异常:', err)
})

内容的提问来源于stack exchange,提问作者Alisha Lawani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:48:01