Неправильное видео/аудио кратко играет на Flutter Media_kit Player, прежде чем правильный трек запускается в плейлистеAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Неправильное видео/аудио кратко играет на Flutter Media_kit Player, прежде чем правильный трек запускается в плейлисте

Сообщение Anonymous »

Я использую библиотеку 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»