如何访问SoundCloud公共流?

Red*_*rel 4 url soundcloud

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

<stream-url>https://api.soundcloud.com/tracks/31164607/stream</stream-url>
Run Code Online (Sandbox Code Playgroud)

我应该认为它会像以下一样简单:

https://api.soundcloud.com/tracks/31164607/stream&client_id=my_client_id
Run Code Online (Sandbox Code Playgroud)

但我明白了

<error>401 - Unauthorized</error>
Run Code Online (Sandbox Code Playgroud)

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

我检查了大约两年前写的应用程序,然后,访问流网址对于公共轨道来说就像这样简单:

http://api.soundcloud.com/tracks/18163056/stream&consumer_key=MY_CONSUMER_KEY
Run Code Online (Sandbox Code Playgroud)

然而,这似乎不再起作用.

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

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

任何提示将不胜感激.

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

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

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

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

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

nic*_*ckf 10

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

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