我的用例是我在后台播放了一个 mp3 文件,它在 flutter 中使用了 audio_service 和 just_audio 包。假设文件是“A”。
我的应用让“A”从 url 下载到本地文件,同时从 url 播放“A”(单独的后台任务)。
一系列步骤:
当我使用队列时,我使用 concatenatingAudioSource 来设置播放器的来源。
我尝试删除旧的 uri 并添加新的 uri 并在更改 uri 之前恢复状态。 (如下)
bool isPlaying = _player.playing;
Duration position = _player.position;
int index = params['index'];
bool isCurrentItem = _player.currentIndex == index;
await concatenatingAudioSource.removeAt(index);
await concatenatingAudioSource.insert(
index, AudioSource.uri(Uri.parse(params['uri'])));
updateUriInQueue();
// broadcast the queue
await AudioServiceBackground.setQueue(queue);
// Note: a small break might occur when changing the state
// return to it's original state after changing uri
if (!isCurrentItem) return;
await _player.seek(position, index: index);
if (isPlaying) _player.play();
顺便提一下,我不使用 mediaItem.id 作为 URI,而是将其存储在 mediaItem.extras 中。
从上面的代码可以清楚的看到,改变uri后播放器停止播放。我想知道是否有更流畅的方法来更改播放器 uri 而不会干扰输出。