iOS端react-native-video无法播放服务器视频的问题求助
iOS端react-native-video播放服务器视频报错-11850解决方案
问题说明
使用react-native-video在iOS端播放服务器视频URL时触发如下错误:
{"error": {"code": -11850, "domain": "AVFoundationErrorDomain", "localizedDescription": "Operation Stopped", "localizedFailureReason": "The server is not correctly configured.", "localizedRecoverySuggestion": ""}, "target": 7225}
已知其他网站静态MP4视频可正常播放,Android端无此问题,已尝试以下方案但未解决:
- 在Info.plist中添加
NSAllowsArbitraryLoads - 为视频源添加range请求头(存在语法错误):
source={{ uri: videoFile.uri, type: 'mp4', headers: { 'range': bytes=0-' } }}
解决方案
1. 修复Range请求头格式
你之前的请求头存在语法错误,且iOS对请求头大小写有严格要求,修正后代码如下:
source={{ uri: videoFile.uri, type: 'mp4', headers: { 'Range': 'bytes=0-' // 首字母大写,值无多余单引号 } }}
2. 验证服务器的Range请求支持
AVPlayer(react-native-video iOS底层依赖)依赖分段请求,-11850报错核心原因是服务器未正确响应Range请求。用curl命令测试:
curl -H "Range: bytes=0-" -I 你的视频URL
需确保响应头包含Accept-Ranges: bytes和Content-Range字段,且返回状态码为206 Partial Content。若返回200 OK,说明服务器未开启Range支持,需配置服务器(比如Nginx启用mp4模块、允许Range请求)。
3. 检查视频编码兼容性
确认服务器上的MP4符合iOS兼容标准:
- 视频编码:H.264(Baseline/Main/High Profile)
- 音频编码:AAC-LC
用ffmpeg工具检查视频信息:
ffmpeg -i 你的视频URL
若编码不兼容,需重新转码视频。
4. 配置精准的ATS规则(替代全局NSAllowsArbitraryLoads)
全局开启NSAllowsArbitraryLoads不安全且可能无效,建议在Info.plist中针对服务器域名配置ATS例外:
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>你的服务器域名</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> </dict> </dict> </dict>
5. 临时禁用HTTP缓存排查冲突
若服务器缓存策略与iOS缓存机制冲突,可尝试添加缓存禁用头:
source={{ uri: videoFile.uri, type: 'mp4', headers: { 'Range': 'bytes=0-', 'Cache-Control': 'no-cache' } }}
内容的提问来源于stack exchange,提问作者Paramdeep tpss
相关产品推荐
相关产品推荐

