javascript - 将 soundcloud 页面 url 转换为声音文件的直接 url

标签 javascript html audio soundcloud

我正在寻找一种从 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/

相关文章:

html - 正则表达式 "does not contain attribute"在 html 中

javascript - jQuery .prependTo() 创建的表导致浏览器出现 "lag"

flash - ActionScript 3.0加载和播放多种声音

php - 通过 javascript ajax 将多个值发布到 php

javascript - 如何在组件类中使用调度(react-redux)

javascript - JqueryMobile 页面的结构?

javascript - 如何在react.js项目中将glyphicon放置在引导导航栏中

html - 结合 bootstrap 的 MarkItUp 渲染问题

python - 无法让子进程结束/退出

objective-c - 用于音频处理/声音文件分割的 Mac 库