Flutter中如何播放URL音频?已尝试代码但未能运行
在Flutter中播放URL音频的问题排查与解决方案
嘿,我看到你尝试用AudioPlayer播放网络音频但没成功,咱们一步步来排查问题并搞定它。
首先要提醒你:现在官方维护的音频包是audioplayers(不是旧版的audio_player),新版本API有不少变化,这很可能是你代码失效的核心原因之一。下面是具体的修复步骤:
1. 确保依赖配置正确
先检查你的pubspec.yaml,添加最新稳定版的依赖:
dependencies: flutter: sdk: flutter audioplayers: ^4.0.0 # 建议去pub.dev查看最新稳定版本号
然后运行flutter pub get更新依赖。
2. 处理Android/iOS的HTTP网络限制
你的音频URL是HTTP协议,而Android 9+和iOS默认会阻止明文HTTP请求,这会直接导致音频无法加载:
Android端配置
- 在
android/app/src/main/res/xml目录下创建network_security_config.xml(如果xml目录不存在就新建),内容如下:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <!-- 只允许目标域名的明文请求,比全局允许更安全 --> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">thedemos.in</domain> </domain-config> </network-security-config>
- 打开
android/app/src/main/AndroidManifest.xml,在<application>标签里添加配置:
android:networkSecurityConfig="@xml/network_security_config"
同时别忘了添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
iOS端配置
打开ios/Runner/Info.plist,添加以下内容允许指定域名的HTTP请求:
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>thedemos.in</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> </dict> </dict> </dict>
3. 修复播放代码(适配新版API)
新版本的audioplayers需要用UrlSource包装网络URL,而且建议添加错误捕获,方便排查问题:
import 'package:audioplayers/audioplayers.dart'; import 'package:flutter/material.dart'; // 假设这是你的StatefulWidget的State类内代码 AudioPlayer _audioPlayer = AudioPlayer(); bool isPlaying = false; void play() async { try { // 先停止之前的播放,避免冲突 await _audioPlayer.stop(); // 设置播放完成后的资源释放模式 await _audioPlayer.setReleaseMode(ReleaseMode.stop); // 用UrlSource包装音频URL(新版API要求) final playState = await _audioPlayer.play( UrlSource('http://thedemos.in/mind/uploads/audio/WjYYX_Namaste2.mp3'), ); if (playState == PlayerState.playing) { // 新版用枚举替代数字返回码 setState(() { isPlaying = true; }); print('播放成功!'); } else { print('播放失败,当前状态: $playState'); } } catch (e) { print('播放时出现异常: $e'); } }
注意:新版本已经不再用数字1表示成功,而是返回PlayerState.playing枚举值,这也是旧代码失效的关键原因。
4. 先验证音频URL的可用性
在浏览器里直接打开你的音频URL,确认它能正常播放。如果浏览器都无法加载,那就是服务器或URL本身的问题,和Flutter代码无关。
额外排查点
如果还是不行,可以检查这些细节:
- 模拟器/真机的网络是否正常?
- 有没有给App添加网络权限?
- Flutter版本是不是稳定版?
audioplayers的版本是不是太旧?
内容的提问来源于stack exchange,提问作者Kiranpaul Issac
相关产品推荐
相关产品推荐

