我正在开发我的第一个Flutter应用程序,它实现了基本的流功能。启动后,该应用程序从源a加载流。该应用程序包含导航菜单,允许用户播放来自其他源B、C、D等的流。源a的初始流的功能与预期完全一样,但我不知道如何将流源从a更改为B、C和D。要明确的是,我理解我需要在UI中做什么,但我不知道如何在audio_service和just_audio中更改音频源。通过查看文档,我在audio_service.dart包(playMediaItem(((中发现了AudioHandler提供的一个很好的候选函数,然而,创建一个新的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
在上面显示的类AudioPlayerHandler中,我需要添加一个方法:
Future<void> playMediaItem(MediaItem mediaItem) => _player.setUrl(mediaItem.id);