将音频流保存到磁盘的推荐方法

Posted

技术标签:

【中文标题】将音频流保存到磁盘的推荐方法【英文标题】:Recommended way to save audio stream to disk 【发布时间】:2021-12-15 23:50:57 【问题描述】:

audio_service 包管理来自 URL 的流式音频。有没有办法同时将音频写入磁盘?

注意:在python中,一个can do this通过在调用requests方法时设置stream=True。我正在寻找一种通过颤振包来做到这一点的方法。

【问题讨论】:

我建议使用颤振声音包。 pub.dev/packages/flutter_sound @KuKu 谢谢!能否请您指出允许在flutter_sound 中将流保存到磁盘的文档? 【参考方案1】:

audio_service 包管理来自 URL 的流式音频。

audio_service 不管理流式音频,它管理您的媒体通知。它的工作方式是:假设您已经编写了一个使用某些插件 XYZ 播放音频的应用程序,但您现在只想添加一个媒体通知,以便可以从后台控制您的应用程序。然后你使用 audio_service 来包装你的“现有”音频代码。

所以您的问题实际上是关于如何处理 audio_service 包装的现有音频代码。

如果你按照audio_service官方的例子,它演示了使用just_audio插件从一个URL流式传输音频,所以让我们回答这个问题。您可以使用just_audio的LockCachingAudiosource轻松修改官方示例。

因此,例如,每当您在该示例中看到 AudioSource.uri,只需将该代码替换为 LockCachingAudioSource,它就会执行您想要的操作。就是这样。

但是为了更详细地展示LockCachingAudioSource 的一些功能,这里有一个简短的演示它的工作方式:

final source = LockCachingAudioSource(Uri.parse(url));
await player.setAudioSource(source);
await player.play();

缓存文件的位置是插件默认选择的,但是你可以在这里获取:

final cacheFile = await source.cacheFile;

你可以清除缓存:

await source.clearCache();

如果要选择缓存文件的位置,可以在构建源码的时候这样做:

final source = LockCachingAudioSource(
  Uri.parse(url),
  cacheFile: File('/your/preferred/path.mp3'),
);

【讨论】:

我正在使用 audio_service 和 just_audio 播放器。我正在使用播放列表。

以上是关于将音频流保存到磁盘的推荐方法的主要内容,如果未能解决你的问题,请参考以下文章

pygame混音器将音频保存到磁盘?

Objective C/IOS - 将音频流保存到文件

将音频流保存到 mp3 文件 (iOS)

ffmpeg仅将传入的RTP音频流保存到文件中

保存wave音频流的方法

如何将 MJPEG 流保存到磁盘(C# .NET)?