【问题标题】:Is there a way to fast forward using just_audio?有没有办法使用 just_audio 快进?
【发布时间】:2020-05-15 08:36:06
【问题描述】:

我正在使用just_audio,效果很好。

但似乎找不到快进或快退的方法。

更新:原来 just_audio 是 audio_service 包的一部分,使用 audio_service 为我解决了这个问题。

【问题讨论】:

  • 我也在使用相同的包,但我找不到音频流位置和完整的音频持续时间......你能帮忙吗?
  • 我认为你需要使用audio_service

标签: android flutter audio mobile just-audio


【解决方案1】:

player.seek(Duration(seconds: player.position.inSeconds - 15)); 倒带 15 秒 player.seek(Duration(seconds: player.position.inSeconds + 15)); 前进 15 秒'

 IconButton(
      icon: Icon(
        Icons.replay_10,
        color: Colors.white,
      ),
      iconSize: 25,
      onPressed: () async {
        await player.seek(Duration(seconds: player.position.inSeconds - 15));
      },
    )`

player 来自AudioPlayer player

【讨论】:

  • 不适合我。
【解决方案2】:

没有内置的快进或快退功能,但您可以编写一个循环,寻找currentPosition + Duration(seconds: 10),然后反复休眠 1 秒。这是在 audio_service 示例中的实现方式,使用类似于以下的帮助器类:

class Seeker {
  /// A reference to your just_audio player
  final AudioPlayer player;
  final Duration positionInterval;
  final Duration stepInterval;
  final Duration fileDuration;
  bool _running = false;

  Seeker(
    this.player,
    this.positionInterval,
    this.stepInterval,
    this.fileDuration,
  );

  start() async {
    _running = true;
    while (_running) {
      Duration newPosition = player.position + positionInterval;
      if (newPosition < Duration.zero) newPosition = Duration.zero;
      if (newPosition > fileDuration) newPosition = fileDuration;
      player.seek(newPosition);
      await Future.delayed(stepInterval);
    }
  }

  stop() {
    _running = false;
  }
}

要通过每 1 秒以 10 秒间隔向前跳跃来开始快进,请使用:

      seeker = Seeker(player, Duration(seconds: 10),
          Duration(seconds: 1), mediaItem)
        ..start();

然后停止快进:

seeker.stop();

要倒带,只需传递负 10 秒即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 2023-03-18
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多