【问题标题】:Converting A List of MediaItem to ConcatenatingAudioSource Error: Instance of 'ConcatenatingAudioSource'将 MediaItem 列表转换为 ConcatenatingAudioSource 错误:“ConcatenatingAudioSource”实例
【发布时间】:2021-03-28 14:39:17
【问题描述】:

我正在尝试将MediaItem 的列表解析/转换为ConcatenatingAudioSource,但我的单元测试不断给我一个错误,即转换后的ConcatenatingAudioSource 与目标源不匹配。我的测试是

List<MediaItem> audioSource = <MediaItem>[
      MediaItem(
        // This can be any unique id, but we use the audio URL for convenience.
        id: "https://s3.amazonaws.com/scifri-episodes/scifri20181123-episode.mp3",
        album: "Science Friday",
        title: "A Salute To Head-Scratching Science",
        artist: "Science Friday and WNYC Studios",
        duration: Duration(milliseconds: 5739820),
        artUri: Uri.parse(
            "https://media.wnyc.org/i/1400/1400/l/80/1/ScienceFriday_WNYCStudios_1400.jpg"),
      ),
      MediaItem(
        id: "https://s3.amazonaws.com/scifri-segments/scifri201711241.mp3",
        album: "Science Friday",
        title: "From Cat Rheology To Operatic Incompetence",
        artist: "Science Friday and WNYC Studios",
        duration: Duration(milliseconds: 2856950),
        artUri: Uri.parse(
            "https://media.wnyc.org/i/1400/1400/l/80/1/ScienceFriday_WNYCStudios_1400.jpg"),
      ),
];

test('mediaItem2ConcatenatingAudioSource test', () {
      expect(
        // Here's where the conversion happens
        ConcatenatingAudioSource(
          children: audioSource
              .map((item) => AudioSource.uri(Uri.parse(item.id)))
              .toList(),
        ),
        ConcatenatingAudioSource(children: [
          AudioSource.uri(Uri.parse(
              'https://s3.amazonaws.com/scifri-episodes/scifri20181123-episode.mp3')),
          AudioSource.uri(Uri.parse(
              "https://s3.amazonaws.com/scifri-segments/scifri201711241.mp3")),
        ]),
      );
});

我得到的错误如下。我相信是说这两个ConcatenatingAudioSource不一样,应该在哪里。

Expected: <Instance of 'ConcatenatingAudioSource'>
  Actual: <Instance of 'ConcatenatingAudioSource'>

我从 audio_service 示例(第 362 行)中复制了转换部分,所以我真的很困惑这里出了什么问题。 (当我的实际应用程序运行时,此转换代码也不起作用。我将测试的actual 部分放入setSource() 方法然后play(),但没有任何反应。)

任何帮助将不胜感激!谢谢!

【问题讨论】:

    标签: flutter dart just-audio


    【解决方案1】:

    just_audio 不认为两个音频源是相等的,即使它们包含相同的元数据。这是因为每个副本都有自己的内部缓冲区和不同的内部状态。

    您所能做的就是检查音频源中元数据的相等性。例如比较播放列表ab

    ConcatenatingAudioSource a = ...;
    ConcatenatingAudioSource b = ...;
    
    expect(
      a.children.map((s) => (s as UriAudioSource).uri).toList(),
      b.children.map((s) => (s as UriAudioSource).uri).toList(),
    );
    

    【讨论】:

    • 非常感谢,伙计!正要删除那个单元测试(开个玩笑)。
    猜你喜欢
    • 2021-11-30
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多