flutter - 将 MediaItem 列表转换为 ConcatenatingAudioSource 错误:“ConcatenatingAudioSource”实例
问题描述
我正在尝试将列表解析/转换MediaItem
为 a 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()
方法 thenplay()
中,但没有任何反应。)
任何帮助,将不胜感激!谢谢!
解决方案
just_audio 不认为两个音频源是相等的,即使它们包含相同的元数据。这是因为每个副本都有自己的内部缓冲区和不同的内部状态。
您所能做的就是检查音频源中元数据的相等性。例如比较播放列表a
和b
:
ConcatenatingAudioSource a = ...;
ConcatenatingAudioSource b = ...;
expect(
a.children.map((s) => (s as UriAudioSource).uri).toList(),
b.children.map((s) => (s as UriAudioSource).uri).toList(),
);
推荐阅读
- python - 图像在画布上保持可见,尽管被切换为隐藏
- python-asyncio - asyncio.create_connection 在每次调用时实例化一个 ThreadPoolExecuter
- python - 从菜单调用的 tkinter 命令和键绑定冲突
- c++ - 关于类继承的 C++ 编译问题
- url - 如果我输入 IP 地址而不是 URL,是否会跳过 DNS?
- vb.net - 如何将元素添加到数组列表中?这是针对 vba
- mysql - MySQL 奇怪的日期错误(不正确的日期时间值)
- typescript - 递归类型不适用于具有未知字段的嵌套对象
- r - 列表列表,在 R 中转换为数据框
- c# - 无法在 Monogame 应用程序 C# 中访问 System.Console