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

时间:2014-04-02 06:26:52

标签: javascript html audio soundcloud

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

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

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

2 个答案:

答案 0 :(得分:9)

重点是,您不能直接将streamUrl传递/使用到您通过其API检索的自己的audioPlayer。

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

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

        }

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

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

请注意,通过这样做,您应该公平地实际上将SoundCloud归功于应用程序中的某个位置。如果您不信任,我不会认为存在违反使用法律/条款的行为,但这只会是不公平的。

答案 1 :(得分:1)

Soundcloud不会轻易使用HTML5音频标签。这个问题在其他地方被问到SO,而且我找不到任何可行的答案。播放soundcloud链接的最佳方式是使用他们的API。

您可以查看解析调用以将URL更改为轨道对象。 http://developers.soundcloud.com/docs/api/reference#resolve

track对象具有stream_url属性,您可以将其传递给soundcloud API中的play功能。 http://developers.soundcloud.com/docs/api/reference#tracks

    <script src="http://connect.soundcloud.com/sdk.js"></script>
    <script>
    SC.get('/resolve?url=' + 'https://soundcloud.com/cameron-mitchell-28/ancient-greek', function(track){
        SC.stream(track.stream_url, function(sound){
            sound.play();
        });
    });
    </script>