just_audio包播放长音频列表10分钟后自动停止,已加载音频无法播放的问题求助
just_audio包播放长音频列表10分钟后自动停止,已加载音频无法播放的问题求助
大家好,我遇到了一个用just_audio播放音频列表的棘手问题,想请各位帮忙分析下原因:
我有一个很长的音频列表,设置了音频之间的延迟,逐个播放。初始时加载列表的第一个音频,当前一个音频播放结束进入延迟阶段时,我会创建新的AudioPlayer对象,并用setAsset方法加载下一个音频。
刚开始播放一切正常,但运行10分钟后,就算音频已经加载完成,也会停止播放。就算中途跳转到列表里的新音频,播放10分钟后同样会出现这个问题——明明音频已经加载了,就是播不出来。
以下是我的代码:
import 'dart:async'; import 'package:flutter/material.dart'; import 'package:just_audio/just_audio.dart'; import 'package:pavamana/globla.dart'; class AudioPLayer extends StatefulWidget { const AudioPLayer({super.key, required this.audioList, required this.audio}); final Map<String, dynamic> audioList; final AudioPlayer audio; @override State<AudioPLayer> createState() => _AudioPlayerState(); } class _AudioPlayerState extends State<AudioPLayer> { int audioCount = 0; double gap = 1.5; Timer gapTimer = Timer( Duration.zero, () {}, ); String firstLine = ""; String secondLine = ""; AudioPlayer? currentPlayingAudio; Future changeAudio() async { await currentPlayingAudio! .setAsset(widget.audioList[audioCount.toString()]["asset"]) .onError( (error, stackTrace) { currentPlayingAudio = widget.audio; return Duration(); }, ); } Future<void> playAudio() async { if (currentPlayingAudio == null) { await widget.audio.play(); } else { await currentPlayingAudio!.play(); } finishedAudio(); } void finishedAudio() async { if (audioCount >= widget.audioList.length - 1) { return; } await widget.audio.pause(); final startTime = DateTime.now(); audioCount++; currentPlayingAudio = AudioPlayer(); changeAudio(); final endTime = DateTime.now(); final finalTime =endTime.millisecondsSinceEpoch - startTime.millisecondsSinceEpoch; gapTimer = Timer( Duration(milliseconds: (gap * 1000).toInt() - finalTime), () { setState(() {}); }, ); } @override void dispose() { super.dispose(); widget.audio.pause(); widget.audio.stop(); widget.audio.dispose(); if (currentPlayingAudio != null) { currentPlayingAudio!.pause(); currentPlayingAudio!.stop(); } } @override Widget build(BuildContext context) { firstLine = widget.audioList[audioCount.toString()]["first"]; secondLine = widget.audioList[audioCount.toString()]["second"]; Future(() { playAudio(); }); return Scaffold( body: Column( children: [ Text(firstLine,), Text(secondLine,), ], ),); } }
我也尝试过在开始播放前一次性加载所有音频播放器,而不是每次播放完前一个音频才创建新的播放器,但问题依然存在。
内容来源于stack exchange
相关产品推荐
相关产品推荐

