如何访问SoundCloud公共流?

时间:2012-08-03 18:43:49

标签: url soundcloud

如何从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年前写过的应用程序,然后,访问流式网址对于公共轨道来说就像这样简单:

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();

任何提示都将不胜感激。

我在微软论坛上得到了回复,似乎暗示SoundCloud可能无法在播放开始之前不使用整个流而流式传输到Windows 8 Metro设备 - 这非常令人担忧,似乎暗示要进行身份验证可能,它必须完全在url querystring insterad使用标题:

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

  

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

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

再一次,如果有人有任何提示,或者有关如何在查询字符串中实现整个身份验证事件而不是使用标题的信息,我会很感激!

4 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:3)

请注意,向网址添加参数必须以?而不是&开头。这可能(很可能)是你获得401的原因(SC没有拿起client_id)。

答案 2 :(得分:2)

认证后,像这样的链接

http://api.soundcloud.com/tracks/ 103229681 /流?CONSUMER_KEY = <强> d61f17a08f86bfb1dea28539908bc9bf

工作正常。我正在使用Action Script。

答案 3 :(得分:0)

我跟进了汤姆的回复,因为他提请注意网址字符的特殊性。我的HTTP请求今天随机启动失败,我在我的client_Id前面添加?。我将该单?更改为&后,就开始工作了。所以在我的情况下,SC并没有拿起我的client_Id,因为我使用了错误的字符。我认为,根据我们在具体谈论的请求中的位置,值得注意的是?&之间的差异确实会产生影响。