0

我正在开发我的第一个 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 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 
4

1 回答 1

0

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

  Future<void> playMediaItem(MediaItem mediaItem) => _player.setUrl(mediaItem.id); 
于 2021-12-30T17:14:59.623 回答