如何从 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(用户体验)准则。
因此,再一次,如果有人有任何提示或有关如何在查询字符串中而不是使用标头中实现整个身份验证的信息,我将不胜感激!