2014-02-14 2 views
2

"Streamable"속성이 true로 설정된 경우에도 트랙을 스트리밍하는 동안 404 오류를 반환하는이 SoundCloud의 API 버그에 대해 읽었습니다.트랙을 스트리밍하는 동안 SoundCloud의 JavaScript API 404 오류를 처리하는 방법

주제에 대한 다른 질문이 있는데 ("Tracks for “The Hives” are not streaming via the api"또는 "Soundcloud API SC.stream (track not loading)"참조), 내가 알고 싶은 것은 오류를 감지하는 방법과 해결 방법입니다. 내가 어떤 try {} catch() {}와 함께했지만 그 문제를 감지 할 수없는 것 같습니다.

내가 재생 트랙의 목록이있는 JSON 배열을 반환하는 PHP가 : 여기

몇 가지 배경 정보입니다. 내 스크립트는 배열을 하나씩 읽은 다음 현재 배열을 재생하려고합니다. 모든 것이 잘 작동하지만 404 error이 반환되면 다음 트랙으로 점프하지 않고 스크립트가 끝납니다. 그것은 그 종류의 문제를 감지 할 수없는 것 같습니다.

playTrack = function() { 
     // console.log('playTrack'); 
     SC.get(
      "/tracks/" + playlist[ now_playing ].sndc_id, 
      function(track, error) { 
       if (error) { 
        sendErrorReport(playlist[ now_playing ].id); 
        loadNext(); 
       } else { 
        try { 
         SC.stream(
          "/tracks/" + playlist[ now_playing ].sndc_id, 
          function(sound, error) { 
           sound_object = sound; 
           if (error || !sound_object) { 
            sendErrorReport(playlist[ now_playing ].id); 
            loadNext(); 
           } else { 
            sound_object.play(
             { 
              'from': parseInt(current_position), 
              'onfinish': function() { 
               current_position = 0; 
               updateCounter(); 
               $('#radio-waveform-position').css({ 'opacity': '0', 'width' : '0%' }); 
               loadNext(); 
              }, 
              'onplay': function() { 
               $('#radio-like').removeClass('liked'); 
               playing = true; 
               updateInfo(); 
              }, 
              'whileplaying': function() { 
               current_position = this.position; 
               $('#radio-waveform-position').css({ 'opacity': '1', 'width' : (100 * current_position/this.duration).toFixed(3) + '%' }); 
              }, 
              'ondataerror': function() { 
               sendErrorReport(playlist[ now_playing ].id); 
               loadNext(); 
              } 
             } 
            ); 
            if ($('html').hasClass('touch') || !autoplay) $('#radio-play-pause').click(); 
           } 
          } 
         ); 
        } catch (err) { 
         sendErrorReport(playlist[ now_playing ].id); 
         loadNext(); 
        } 
       } 
      } 
     ); 
    } 

SC.getSC.stream "오류"반환 매개 변수를 모두 항상 "결함"트랙 이런 종류의 빈 것 같다 :

다음은 스트림을 관리하는 자바 스크립트 방법이다. 보시다시피, 나는 try() {} catch() {}에 모든 것을 싸려고했지만 성공하지는 못했습니다. 또한 sound_object.play()ondataerror 메서드는 완전히 무시됩니다.

스크립트

은 여기에 행동에서 볼 수있다 : 나는 누군가가 그에 대한 해결 방법을 찾았지만 아무런 설명이 없었다 읽었 http://foggetabout.it/

. 누구든지 그것을 해결하는 방법에 대한 아이디어가 있습니까?

+0

는 여전히를 반환합니까 404 JS API를 사용한다면? 'http : // connect.soundcloud.com/sdk-2.0.0.js' – Marco

+0

스크립트를 바꾸면 작동하도록 코드를 다시 작성해야한다고 생각합니다. 이제는 http : // connect를로드합니다. soundcloud.com/sdk.js') 응용 프로그램이 아무런 오류없이 멈 춥니 다. 나는 고마워. 고마워. – simonelippolis

답변

3

비슷한 결과가 나타납니다. 연결되어 있는지 확실하지 않지만 일부 트랙은 플래시로만 스트리밍 가능하므로 GET 방법은 스트리밍 가능하다고 표시하지만 플래시를 사용할 수없는 경우 스트림이 중단 될 수 있습니다. 4 주있다 :

  • 0 = 초기화되지 않은
  • 1 = 주위 얻을

    한가지 방법 SoundManager (사운드 관리자)가 onload & readyState (http://www.schillmania.com/projects/soundmanager2/doc/ 문서에서)를 이용하여 트랙을로드 할 때 체크한다 로딩

  • 2 =는/오류
  • 3 =로드/성공
실패

그래서 : 상태 변경이 문제가되면, 그래서 당신은 또한 그것이 내가 가로 질러 간다 실패한 트랙 null를 반환으로 durationEstimate를 사용하여 시도 할 수있을 때 몇 가지주의 사항이있다

sound_object.play({ 
    // Exisiting… 
    onload: function() { 
     if (this.readyState == 2) { 
     // Handle error 
     } 
    }); 

.

+0

감사합니다. 나는 당신에게 알려주 려 노력할 것입니다! S. – simonelippolis

+0

감사합니다. – simonelippolis

0

많은 노래의 경우 streamable이 true로 설정되고 해당 stream_url이 정의되어 있지만 리소스 자체는 없습니다.

으로 I1 엔드 포인트를 타격, curl를 사용하여 track_id을 원하는 및 등록 API_KEY는 사운드 클라우드의 실제 자원을 확인하는 첫 번째 단계 트랙을 개최한다.(경고 : i1 엔드 포인트가 공식적으로 사운드 클라우드의 HTTP API 참조 설명되어 있지 않습니다)

curl https://api.soundcloud.com/i1/tracks/{{track_id}}/streams?client_id={{API_KEY}} 

이 같은 보이는 JSON 개체를 반환합니다 다음 http_mp3_128_url 키 - 값 쌍이있는 경우

{ 
    "http_mp3_128_url": "{some_url}", 
    "preview_mp3_128_url": "{some_url}" 
} 

을, 그 트랙은 액세스 가능한 HTTP 리소스를 가지며 스트리밍 할 수 있습니다.

여기

더 많은 정보 - https://github.com/francismakes/i1-soundcloud

+0

감사합니다.이 정보가 도움이됩니다. – simonelippolis

0

건물 roj의 대답 오프, 내가 먼저 SC 트랙 스트리밍에 처리 404에 들어갈 같은 코드의 비트를 사용 :

sound.play({ 
      onload: function() { 
       if (this.readyState === 2){ 
       alert('error'); 
       } 

      }, 
관련 문제