HTTP字节范围产生了损坏的音频文件?

时间:2018-07-04 13:10:32

标签: file google-chrome http curl audio

当我使用chrome打开.m4a或.mp3文件时(或在VLC中“打开新流”),并跳至某个时间标记,它将在该时间标记开始流式传输音频,这意味着它将下载一个从该位置开始的音频文件中的块。

当我在音频播放器中的某个位置单击并复制cURL请求后,在chrome开发工具下检查网络时,它包含一个范围http标头,例如:

-H "Range: bytes=26500000-30000000"

当我在终端中运行该cURL命令时,输出为损坏的音频文件。如果我尝试使用ffmpeg进行转换,则会记录:

[mov,mp4,m4a,3gp,3g2,mj2 @ 00000164d5a3ab40] moov atom not found

唯一的例外是当我请求从0开始(并以300000+结尾)的字节范围时,在这种情况下输出文件可以播放。

据我了解,当字节范围位于文件中间或结尾的某个位置时,不会下载音频文件的标题。

我尝试指定两个范围,如下所示

-H "Range: bytes=0-300000,2000000-4000000"

但是输出文件仍然损坏。

chrome / vlc如何处理这种情况,我该如何复制它?从大型音频文件下载音频块的正确方法是什么?我猜想我将不得不连续发出http请求才能构建正确的,未损坏的文件,看来这正是chrome所做的。

UPDATE

我发现对您可能发现有用的问题的一个“临时修复”是通过带有隐藏界面的命令使用启动VLC,加载音频流(在这种情况下为音频文件url)并将音频转码到本地文件,同时指定开始时间和停止时间。一个带有随机播客的示例:

vlc -Idummy --play-and-exit --sout "#transcode{acodec=s16l,channels=2,samplerate=44100}:std{access=file,mux=wav,dst=C:\audio\output.wav}" --start-time=600 --stop-time=630  "http://traffic.libsyn.com/preview/worldofhardwarestartups/World_of_Hardware_Startups_Podcast_EP01_-_AIR_Ready.mp3"

但是,原始问题仍未解决。

0 个答案:

没有答案