1

我的用例是我有一个 mp3 文件在后台播放,它在颤动中使用 audio_service 和 just_audio 包。假设文件是​​“A”。

我的应用程序让“A”从 url 下载到本地文件,同时从 url 播放“A”(单独的后台任务)。

系列步骤:

  • just_audio 从 url 播放“A”(例如 https://something/A.mp3)
  • 'A' 从 url 下载到我的文件 (file:///something/A.mp3)
  • “A”仍在后台播放。
  • 下载“A”后,我想将播放器的音频源从 http uri 更改为文件 uri。

当我使用队列时,我使用 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 而不会干扰输出。

4

0 回答 0