4

如何从 SoundCloud URL 播放曲目,例如,我从查询的 xml 响应中获得

<stream-url>https://api.soundcloud.com/tracks/31164607/stream</stream-url>

我应该认为它会很容易:

https://api.soundcloud.com/tracks/31164607/stream&client_id=my_client_id

但我得到

<error>401 - Unauthorized</error>

我要做的就是在 Silverlight MediaElement 中使用它,所以我只需要为 MediaElement 的 Source 属性设置一些 url。

我检查了我大约 2 年前写的一个应用程序,然后,对于公共音轨,访问流 url 就像这样简单:

http://api.soundcloud.com/tracks/18163056/stream&consumer_key=MY_CONSUMER_KEY

但是,这似乎不再起作用。

例如,我在 C# 中所要做的就是:

MediaElement me = new MediaElement();
me.Source= new Url("http://api.soundcloud.com/tracks/18163056/stream&consumer_key=MY_CONSUMER_KEY");
me.Play();

任何提示将不胜感激。

我在 Microsoft 论坛上有一个回复,似乎暗示 SoundCloud 可能无法在播放开始前不消耗整个流的情况下流式传输到 Windows 8 Metro 设备 - 这非常令人担忧,似乎意味着要使身份验证成为可能,它必须完全在使用标头的 url 查询字符串中完成:

(以下回复是对以下问题的回答:'我可以使用 MediaElement 通过 http 访问音频流,但是我需要通过 https 访问它,其中我需要将 oAuth 信息添加到初始的标头请求。使用 MediaElement 时如何完成,如果无法完成,在 Metro 8 中使用需要标头身份验证才能流式传输的音频提要的解决方法是什么?')

“MediaElement 目前不允许直接访问底层网络流。因此,目前无法修改 HTTP 请求的标头以包含任何其他身份验证信息。也就是说,您确实可以控制 URL。理论上,您可以设置一个 HTTP 代理服务,将 HTTP GET 请求参数转换为必要的 oAuth 凭据。请记住,这只是一种理论上的解决方法。在实践中您可能会发现不同的行为。另一个理论上的解决方法是自己处理 oAuth通过原始流套接字并通过“设置源”和“随机访问流”将重新调整的媒体数据传递给 MediaElement。请记住,此方法有很大的限制。为了使用“随机访问流”对于 ME,您需要确保所有数据都可用,然后再将其传递给 ME。”

对于仅免费分发的应用程序,代理服务不可扩展,因为每个流都需要通过代理来。而原始流套接字,虽然绕过了这个问题,但意味着在整个文件下载之前无法开始播放 - 这违反了所有当前的 UX(用户体验)准则。

因此,再一次,如果有人有任何提示或有关如何在查询字符串中而不是使用标头中实现整个身份验证的信息,我将不胜感激!

4

4 回答 4

10

我有点困惑你是指公共轨道还是私人轨道?如果它是公共轨道,那么您不需要发送任何身份验证信息,只需发送您的客户端 ID。

当我请求时https://api.soundcloud.com/tracks/31164607/stream?client_id=YOUR_CLIENT_ID,我得到一个 302 重定向到正确的 mp3 流。

于 2012-08-05T12:17:52.650 回答
3

请记住,向 URL 添加参数必须以?not开头&。这可能(很可能)是您获得 401 的原因(SC 没有获取 client_id)。

于 2012-08-22T14:34:35.767 回答
2

认证后的链接是这样的

http://api.soundcloud.com/tracks/ 103229681 /stream?consumer_key= d61f17a08f86bfb1dea28539908bc9bf

工作正常。我正在使用动作脚本。

于 2013-08-19T06:44:51.223 回答
0

我正在跟进 Tom 的回复,因为他提请注意 url 字符的特殊性。今天我的 HTTP 请求随机开始失败,我在 client_Id 前面加上?. 一旦我将单曲更改?&,它就开始工作了。所以就我而言,SC 没有选择我的 client_Id,因为我使用了错误的字符。我认为根据我们具体讨论的请求中的哪个位置,值得注意的是,两者之间?&差异确实会产生影响。

于 2016-01-08T00:00:11.340 回答