React Native Track Player安卓端网络连接失败报错求助
问题详情
使用react-native-track-player播放音频时,Android端触发如下错误:
{"error": {"code": "android-io-network-connection-failed", "message": "Source error"}, "state": "error"}
已完成的排查动作:
- 模拟器/真机网络正常,浏览器可访问任意内容
AndroidManifest.xml已添加必要网络权限- MP3链接为HTTPS协议
- 真机测试问题依旧,iOS端运行完全正常
环境版本:
- React Native 0.72
- react-native-track-player ^4.0.1
相关运行日志:
Event.PlaybackState {"state": "stopped"} LOG Event.PlaybackState {"state": "stopped"} LOG Event.PlaybackPlayWhenReadyChanged {"playWhenReady": false} LOG Event.PlaybackPlayWhenReadyChanged {"playWhenReady": false} LOG Event.PlaybackActiveTrackChanged {"index": 0, "lastIndex": 0, "lastPosition": 0, "lastTrack": {"artist": "artist", "artwork": "local image", "duration": "217574", "id": "CD-NEW13-6", "title": "title", "url": "https link to the mp3 player"}, "track": {"artist": "artist", "artwork": "local image", "duration": "217574", "id": "CD-NEW13-6", "title": "title", "url": "https link to the mp3 player"}} LOG Event.PlaybackActiveTrackChanged {"index": 0, "lastIndex": 0, "lastPosition": 0, "lastTrack": {"artist": "artist", "artwork": "local image", "duration": "217574", "id": "CD-NEW13-6", "title": "title", "url": "https link to the mp3 player"},, "track": {"artist": "artist", "artwork": "local image", "duration": "217574", "id": "CD-NEW13-6", "title": "title", "url": "https link to the mp3 player"},} LOG Event.PlaybackActiveTrackChanged {"index": 0, "lastIndex": 0, "lastPosition": 0, "lastTrack": {"artist": "artist", "artwork": "local image", "duration": "217574", "id": "CD-NEW13-6", "title": "title", "url": "https link to the mp3 player"},, "track": {"artist": "artist", "artwork": "local image", "duration": "217574", "id": "CD-NEW13-6", "title": "title", "url": "https link to the mp3 player"},} LOG Event.PlaybackActiveTrackChanged {"index": 0, "lastIndex": 0, "lastPosition": 0, "lastTrack": {"artist": "artist", "artwork": "local image", "duration": "217574", "id": "CD-NEW13-6", "title": "title", "url": "https link to the mp3 player"}, "track": {"artist": "artist", "artwork": "local image", "duration": "217574", "id": "CD-NEW13-6", "title": "title", "url": "https link to the mp3 player"},} LOG Event.PlaybackState {"state": "loading"} LOG Event.PlaybackState {"state": "loading"} LOG Event.PlaybackPlayWhenReadyChanged {"playWhenReady": true} LOG Event.PlaybackPlayWhenReadyChanged {"playWhenReady": true} LOG Event.PlaybackState {"state": "buffering"} LOG Event.PlaybackState {"state": "buffering"} LOG Event.PlaybackState {"error": {"code": "android-io-network-connection-failed", "message": "Source error"}, "state": "error"}
排查方案
1. 配置Android网络安全规则
Android 9+对HTTPS链接的证书验证严格,若服务器证书未被系统信任,会导致连接失败。在res/xml目录创建network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </base-config> </network-security-config>
在AndroidManifest.xml的application标签中添加引用:
android:networkSecurityConfig="@xml/network_security_config"
若MP3链接使用自定义证书,可添加domain-config单独信任该域名。
2. 验证链接的Android端兼容性
部分服务器会限制请求UA,Android媒体播放器的UA与浏览器不同。可直接用Android原生MediaPlayer测试链接是否能播放,或在链接后添加随机参数(如?t=1699999999)规避缓存问题。同时检查服务器响应头是否包含Content-Type: audio/mpeg,缺失该头可能导致ExoPlayer无法识别音频格式。
3. 调整react-native-track-player版本
v4.0.1与RN0.72可能存在兼容性问题,尝试降级到3.2.0或升级至最新稳定版,升级后需按照官方文档重新配置Android端的settings.gradle、build.gradle依赖。
4. 确认前台服务权限与配置
Android 10+后台网络访问受限制,音频播放需启动前台服务。确保AndroidManifest.xml添加权限:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
同时在播放器初始化时配置前台服务选项,确保播放时触发前台通知。
5. 检查ExoPlayer兼容性
react-native-track-player底层依赖ExoPlayer,若ExoPlayer无法播放该链接,需排查音频编码是否为Android支持的格式(如MP3、AAC),或服务器是否采用了ExoPlayer不支持的流媒体协议。
内容的提问来源于stack exchange,提问作者smitha

