AudioSource.uri 带头部信息在屏幕锁定后不播放。

问题的整个描述在此:https://stackoverflow.com/questions/72425614/audiosource-uri-with-headers-not-working-when-app-is-locked-for-some-amount-of-t

在这里你可以找到视频和重现此问题的确切步骤。

此问题仅发生在真实的 iOS 设备上(发布模式和配置文件模式)。在运行 iOS 模拟器时,问题不存在。

凭据是

请忽略丢失的图片,根 API URL 已设置为测试版本。音频文件存在,这才是最重要的。

以下是视频中捕获的步骤

视频 1

  1. 登录应用 lib/screens/login.dart
  2. 登录后,用户将被重定向到我的书籍屏幕 lib/screens/books/my_books.dart
  3. 选择有声读物后,用户将被重定向到书籍详情屏幕 lib/screens/books/book.dart
  4. 按播放按钮(浮动操作按钮),这会触发以下操作:
    • 清除播放列表 (lib/services/audio_player_state.dart:51)
    • 构建新的播放列表 (lib/services/audio_player_state.dart:67)
    • 重定向到播放器屏幕 (lib/screens/player.dart)
  5. 音频开始播放,因为在播放器屏幕的 initState() 方法中调用了 myAudioPlayerState.play() 方法(这会触发 lib/services/audio_player_state.dart:33
  6. 通过按搜索器下方的暂停按钮来暂停音频,这会触发:lib/services/audio_player_state.dart:35
  7. 锁定屏幕

RPReplay_Final1653914411.MP4

视频 2

  1. 锁定屏幕并保持锁定约 20 秒后,用户返回应用并按播放 - 音频开始播放(触发 lib/services/audio_player_state.dart:33
  2. 用户跳到下一章节 - 下一章节开始播放(触发 lib/services/audio_player_state.dart:41
  3. (这是问题所在) 当用户尝试跳到另一章节时
    • 没有音频在播放
    • 播放器索引快速遍历队列中的剩余项目
    • 播放器状态卡在加载状态。

RPReplay_Final1653914522.MP4

当我从 AudioSource.uri 构造函数 (lib/services/audio_handler.dart:114) 中删除头部信息时,问题就消失了。

GitHub

查看 Github