如何在Flutter中播放m3u8音频文件?需支持Windows平台
Flutter播放m3u8音频(支持Windows平台)解决方案
一、依赖选择与配置
选用支持HLS(m3u8)格式且兼容Windows平台的音频库,推荐just_audio配合其Windows扩展包,同时添加音频会话管理库保证播放行为符合系统规范。
将以下依赖添加到pubspec.yaml:
dependencies: flutter: sdk: flutter just_audio: ^0.9.34 just_audio_windows: ^0.2.0 audio_session: ^0.1.16
执行flutter pub get完成依赖安装。
二、Windows平台额外配置
- 添加网络权限
打开windows/runner/Package.appxmanifest,在<Capabilities>节点下添加网络访问权限(播放网络m3u8必需):
<Capability Name="internetClient" />
- 配置CMake链接库
打开windows/runner/CMakeLists.txt,确保存在以下配置(无则添加):
target_link_libraries(${BINARY_NAME} PRIVATE windowsapp.lib)
三、核心播放代码示例
以下是完整的播放实现,包含初始化、加载m3u8链接、播放控制及资源释放:
import 'package:flutter/material.dart'; import 'package:just_audio/just_audio.dart'; import 'package:audio_session/audio_session.dart'; class M3u8AudioPlayer extends StatefulWidget { const M3u8AudioPlayer({super.key}); @override State<M3u8AudioPlayer> createState() => _M3u8AudioPlayerState(); } class _M3u8AudioPlayerState extends State<M3u8AudioPlayer> { final AudioPlayer _player = AudioPlayer(); bool _isPlaying = false; // 替换为你的m3u8音频链接 final String _m3u8Url = "https://example.com/audio/stream.m3u8"; @override void initState() { super.initState(); _setupAudioSession(); _loadStream(); } Future<void> _setupAudioSession() async { final session = await AudioSession.instance; // 若为音乐类音频,可改为AudioSessionConfiguration.music() await session.configure(const AudioSessionConfiguration.speech()); } Future<void> _loadStream() async { try { await _player.setAudioSource(AudioSource.uri(Uri.parse(_m3u8Url))); } catch (e) { debugPrint("加载m3u8失败: $e"); } } void _togglePlayback() async { _isPlaying ? await _player.pause() : await _player.play(); setState(() => _isPlaying = !_isPlaying); } @override void dispose() { _player.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text("M3u8音频播放")), body: Center( child: ElevatedButton( onPressed: _togglePlayback, child: Text(_isPlaying ? "暂停" : "播放"), ), ), ); } }
四、常见问题排查
- 加载失败:检查m3u8链接是否可正常访问,跨域资源需确保服务端允许CORS;本地测试可使用代理工具绕过限制。
- 无声音输出:检查系统音量设置,确认音频会话配置与音频类型匹配(如音乐用
AudioSessionConfiguration.music())。 - 版本兼容问题:确保
just_audio与just_audio_windows版本匹配,可参考pub.dev上的版本兼容说明。
内容的提问来源于stack exchange,提问作者Slupy
相关产品推荐
相关产品推荐

