当我使用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"
但是,原始问题仍未解决。