将soundcloud页面网址转换为声音文件的直接网址

Cod*_*oad 2 html javascript audio soundcloud

我正在寻找一种从soundcloud中获取网址的方法,例如:

https://soundcloud.com/cameron-mitchell-28/ancient-greek

并将其转换为音频文件的直接链接,以用作html音频标记的源.

小智 9

关键是您不能直接将streamUrl传递/使用到您通过其API检索的自己的audioPlayer中.

因为实际上streamURL不是您期望播放的音频的终点URL.当您向流网址发送http请求时,正在按需创建音轨的实际音频(以mp3格式).(因为没有类似的东西,实际的音频正在等待你随时流式传输 - 它们被存储为AWS blob存储中的二进制文件)

在为每首歌曲要求使用唯一的streamURL(您再次通过SoundCloud API检索)的"音频"时,您将被重定向到作为物理路径的音频的端点URL,您可以使用此端点URL播放它您通过发送http请求检索.关键是,音频的这个端点URL的到期时间是sth.喜欢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();

        }
Run Code Online (Sandbox Code Playgroud)

AudioStreamEndPointUrl是您的mp3音频将在接下来的15-20分钟内驻留的实际URL.请注意,每次要流式传输歌曲时,都必须重新请求端点URL.

所以实际上并不是SoundCloud的人不希望你在自定义音频播放器中流式传输音轨,但它与音频数据的存储感相关.将这些数据保存为blob而不是实际的mp3文件远远便宜得多.

请注意,通过执行此操作,您应该公平地实际上将SoundCloud归功于应用程序中的某个位置.如果您不信任,我认为没有任何法律/使用条款违规,但这只是不公平.