我正在寻找一种从 soundcloud 获取 url 的方法,例如:
https://soundcloud.com/cameron-mitchell-28/ancient-greek
并将其转换为指向音频文件的直接链接,用作 html 音频标签的源。
最佳答案
您从他们的 API 中检索到的流 Url 不能直接在您自己的音频播放器中使用。
因为实际上,流 URL 不是您期望播放的音频的终点 URL。当您向流 url 发送 http 请求时,轨道的实际音频(mp3 格式)正在“按需”创建。 (没有实际音频随时等待您进行流式传输这样的事情 - 它们作为二进制文件存储在 AWS blob 存储中)
在请求带有唯一流 URL 的“音频”后,您将被重定向到带有音频的实际端点 - 这是物理路径,您可以直接在音频播放器中播放它。此生成的音频 URL 的过期时间为 15-20 分钟。
要实现我在这里所说的,您将不得不做一些类似于此的技巧: (代码在 C# 中,但你会明白的)
public void Run()
{
if (!string.IsNullOrEmpty(TrackUrl))
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(TrackUrl + ".json?client_id=YOUR_CLIENT_ID");
request.Method = "HEAD";
request.AllowReadStreamBuffering = true;
request.AllowAutoRedirect = true;
request.BeginGetResponse(new AsyncCallback(ReadWebRequestCallback), request);
}
}
private void ReadWebRequestCallback(IAsyncResult callbackResult)
{
HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState;
HttpWebResponse myResponse = (HttpWebResponse)myRequest.EndGetResponse(callbackResult);
using (StreamReader httpwebStreamReader = new StreamReader(myResponse.GetResponseStream()))
{
this.AudioStreamEndPointUrl = myResponse.ResponseUri.AbsoluteUri;
this.SearchCompleted(this);
}
myResponse.Close();
}
AudioStreamEndPointUrl
是您的 mp3 音频将在接下来的 15-20 分钟内驻留的实际 URL。请注意,每次您想播放歌曲时,您都必须通过第一个播放网址重新请求歌曲。
因此,实际上 SoundCloud 人员并不希望您在自定义音频播放器中播放轨道,而是与音频数据的存储意义有关。将此类数据保存为 blob 而不是实际的 mp3 文件对他们来说可能更便宜。
请注意,通过这样做,您应该公平竞争并将 SoundCloud 归功于您应用程序中的某处。
关于javascript - 将 soundcloud 页面 url 转换为声音文件的直接 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22803136/