在 audio_service 和 just_audio 中更改音频源 (Flutter)

Changing Audio Source In audio_service and just_audio (Flutter)

我正在开发我的第一个实现基本流功能的 Flutter 应用程序。启动后,应用程序从源 A 加载流。应用程序包含导航菜单,允许用户播放来自其他源 B、C、D 等的流。来自源 A 的初始流完全按预期运行,但我无法弄清楚如何将流源从 A 更改为 B、C、D。明确地说,我了解我需要在 UI 内做什么,但我不确定如何更改音频源在 audio_service 和 just_audio 内。通过文档,我发现 AudioHandler 在 audio_service.dart 包 (playMediaItem()) 中提供了一个很好的候选函数,但是,创建一个新的 MediaItem 并将其传递给此函数没有任何效果:

我已经根据 audio_service 文档设置了我的 AudioPlayerHander class:

class AudioPlayerHandler extends BaseAudioHandler {
  // Declare MediaItem used for streaming
  static const _stream = MediaItem(
    id: 'some URL',
    title: 'Stream A',
  );

  // Instantiate a just_audio AudioPlayer
  final _player = AudioPlayer();

  //Initialize audio handler
  AudioPlayerHandler() {
    _player.playbackEventStream.map(_transformEvent).pipe(playbackState);
    mediaItem.add(_stream);
    _player.setAudioSource(AudioSource.uri(Uri.parse(_stream.id)));
  }

  @override
  Future<void> play() => _player.play();

  @override
  Future<void> pause() => _player.pause();

  @override
  Future<void> stop() => _player.stop();

用户可以导航到他们单击按钮播放源 B 的路线:

var stream_b = MediaItem(
id: 'some URL', // 
title: 'Stream B',
);

audioHandler.playMediaItem(stream_b); //no apparent effect
audioHandler.play(); // If stream A was paused or stopped, it will now resume 

在上面显示的 class AudioPlayerHandler 中,我需要添加一个方法:

  Future<void> playMediaItem(MediaItem mediaItem) => _player.setUrl(mediaItem.id);