获取track.stream_url返回垃圾

时间:2014-03-20 21:43:41

标签: soundcloud

我正在尝试使用Ruby on Rails应用程序中的JPlayer来传输SoundCloud歌曲。我尝试使用这个获取流URL服务器端:

@stream_url = client.get(@track.stream_url, :allow_redirects => true)

然后我尝试使用JPlayer加载此URL,如下所示:

<script type="text/javascript">
  $("#jquery_jplayer_1").jPlayer({
    ready: function() { 
      $(this).jPlayer("setMedia", {
        mp3: "<%= @stream_url %>"
      });
    },
    swfPath: "/js",
    supplied: "mp3"
  });
</script>

但是当我加载页面时,浏览器会阻塞URL字符串。返回的标记和脚本如下所示:

$(this).jPlayer("setMedia", {
    mp3: "���DInfo+4F��!$&amp;)+.0368;=@..."

这个字符串比我在这里发布的时间要长得多。

我最好的猜测是这是一个编码问题,但我无法弄明白。我已经尝试在rails控制台中进行调试,但这让我无处可去。

任何想法都将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

您似乎遇到了一些编码问题。

当我手动发送HTTP请求并在C#中获取端点URL时,我不会遇到同样的问题,并且音频的端点URL完全没问题。

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

        }

不知道它是如何适用于Ruby on Rails但你明白了。 您可以尝试使用类似的技巧,而不是使用client.get方法。