Я использую библиотеку Flutter Media_Kit 1.2.0 в своем проекте, и задача состоит в том, чтобы поместить треки в плейлист и играть в график один за другим. Каждое видео имеет собственный индекс, поэтому по планированию блока пропускает индекс для воспроизведения, и видео под этим индексом начинает воспроизводить. Я попытался установить некоторые задержки после ожидания _player.pause (); или использовать остановку вместо паузы, но это не помогло.
Не могли бы вы посоветовать? < /p>
Future addTracksToPlaylist(List files) async {
try {
final medias = files.map((file) => Media(file.path)).toList();
for (final media in medias) {
print('Adding track: ${media.uri}');
}
await _player.open(
Playlist(medias),
play: false,
);
await Future.delayed(Duration(milliseconds: 100));
notifyListeners();
} catch (e) {
print('Error adding tracks to playlist: $e');
}
}
Future play(File file, Duration? seekPosition) async {
if (_isChangingTrack) return;
_isChangingTrack = true;
try {
final playlist = _player.state.playlist;
if (playlist.medias.isEmpty) return;
final index = _findTrackIndex(playlist, file);
if (index == -1) return;
_currentTrack = file;
await _player.pause();
await _player.jump(index);
await _waitForPlayerReady(index);
await _player.play();
if (seekPosition != null && seekPosition > Duration.zero) {
await _player.seek(seekPosition);
}
notifyListeners();
} catch (e) {
print('Error playing track: $e');
} finally {
_isChangingTrack = false;
}
}
int _findTrackIndex(Playlist playlist, File file) {
return playlist.medias.indexWhere((media) {
final mediaName = media.uri.split('/').last;
final fileName = file.path.split('/').last;
return mediaName == fileName;
});
}
Future _waitForPlayerReady(int expectedIndex) async {
int attempts = 0;
while ((_player.state.buffering ||
_player.state.duration == Duration.zero ||
_player.state.playlist.index != expectedIndex) &&
attempts < 20) {
await Future.delayed(const Duration(milliseconds: 100));
attempts++;
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... rect-track