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

如何在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平台额外配置

  1. 添加网络权限
    打开windows/runner/Package.appxmanifest,在<Capabilities>节点下添加网络访问权限(播放网络m3u8必需):
<Capability Name="internetClient" />
  1. 配置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:36:21