如何从服务器下载一部分mp3?
How to download a part of mp3 from server?
用例
我的用例大致等于,将 15 秒的 mp3 文件添加到约 1 分钟的视频中。所有转码合并部分将由 FFmpeg-android 完成,所以现在这不是问题。
流程如下
- 用户可以 select 任何 15 秒(ExoPlayer 流式传输)的 mp3(考虑 192Kbps/44.1KHz 3 分钟 = 最多 7MB)
- 然后仅下载第 15 部分并将其添加到视频的音频流中。 (使用 FFmpeg)
- 使用获得的输出
尝试过的解决方案
RANGE_REQUEST - 我使用提供的确切示例文件在 Kotlin 中复制了完全相同的 algorithm/formula。但是输出不准确(± 1.5 secs * c) where c is proportional to startTime
How to crop a mp3 from x to x+n using ffmpeg?
FFMPEG_SS - 这可以完美地使用远程 URL 作为输入,但有两个缺点,
- 随着
startTime
的增加,下载的字节大小更接近mp3的实际大小。
ffmpeg-android
不支持网络请求模块(至少我们遵守的方式)
所以以上两种解决方案都没有取得成果,目前,我正在下载整个文件并在本地进行修整,这绝对是一个糟糕的用户体验。
我想知道 Instagram 的音乐添加到故事功能是如何工作的,因为这接近我想要实现的。
这不是您想要的方式。 mp3 文件没有时间戳。如果你只是跳到 mp3 的中间,(并寻找帧开始标记),然后开始解码,你不知道这个帧是在什么时间,因为帧是可变大小的。唯一知道的方法是计算当前位置之前的帧数。这意味着您需要整个文件。
用例
我的用例大致等于,将 15 秒的 mp3 文件添加到约 1 分钟的视频中。所有转码合并部分将由 FFmpeg-android 完成,所以现在这不是问题。
流程如下
- 用户可以 select 任何 15 秒(ExoPlayer 流式传输)的 mp3(考虑 192Kbps/44.1KHz 3 分钟 = 最多 7MB)
- 然后仅下载第 15 部分并将其添加到视频的音频流中。 (使用 FFmpeg)
- 使用获得的输出
尝试过的解决方案
RANGE_REQUEST - 我使用提供的确切示例文件在 Kotlin 中复制了完全相同的 algorithm/formula。但是输出不准确
(± 1.5 secs * c) where c is proportional to startTime
How to crop a mp3 from x to x+n using ffmpeg?
FFMPEG_SS - 这可以完美地使用远程 URL 作为输入,但有两个缺点,
- 随着
startTime
的增加,下载的字节大小更接近mp3的实际大小。 ffmpeg-android
不支持网络请求模块(至少我们遵守的方式)
- 随着
所以以上两种解决方案都没有取得成果,目前,我正在下载整个文件并在本地进行修整,这绝对是一个糟糕的用户体验。 我想知道 Instagram 的音乐添加到故事功能是如何工作的,因为这接近我想要实现的。
这不是您想要的方式。 mp3 文件没有时间戳。如果你只是跳到 mp3 的中间,(并寻找帧开始标记),然后开始解码,你不知道这个帧是在什么时间,因为帧是可变大小的。唯一知道的方法是计算当前位置之前的帧数。这意味着您需要整个文件。