2012-02-17 3 views
2

shoutcast 스트림을 재생할 작은 응용 프로그램을 작성 중이며이를 수행하기 위해 javazoom.jl.player.Player를 사용하고 있습니다. 여기 내 코드는 다음과 같습니다.javadoom 플레이어가 SHOUTcast 스트림을 사용하여 Windows에서 작동하지 않음 (잘못된 Https 요청)

package music; 

import java.io.InputStream; 
import java.net.URL; 
import javazoom.jl.player.Player; 
class audiostream extends Thread { 

private Player mediafilePlayer; 
private volatile boolean shouldPlay = true; 

@Override 
public void run() { 
    while (true) { 
     if (shouldPlay) { 
      player(); 
     } 
    } 
} 

public void player() { 
    try { 
     URL mediafile = new URL("http://hi1.streamingsoundtracks.com:8000/;"); 
     InputStream stream = mediafile.openStream(); 

     mediafilePlayer = new Player(stream); 
     mediafilePlayer.play(); 
    } catch (Exception e) { 
     System.out.println(e); 
    } 
} 

public void pause() { 
    shouldPlay = false; 
    mediafilePlayer.close(); 
} 

public void play() { 
    shouldPlay = true; 
} 
} 

이것은 내 Mac에서 완벽하게 작동하며 스트림을들을 수 있습니다. 그러나 Windows에서 이것을 실행하려고하면 "java.io.IOException : Invalid Http response"오류가 발생합니다. I 이것은 SHOUTcast가 얼음이 우거진 200 개의 확인 헤더를 반환하기 때문에 발생합니다. Windows의 무언가가 http 헤더를 반환해야하는 경우입니다. javazoom Player를 사용하여 Windows에서 이러한 다른 헤더를 허용하는 방법을 찾지 못하는 것 같습니다.

답변

0

대신 BasicPlayerListener을 사용하여이 문제를 해결했습니다. 내 질문에있는 코드를 다음으로 대체했습니다.

package music; 

import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.Map; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javazoom.jlgui.basicplayer.BasicController; 
import javazoom.jlgui.basicplayer.BasicPlayer; 
import javazoom.jlgui.basicplayer.BasicPlayerEvent; 
import javazoom.jlgui.basicplayer.BasicPlayerException; 
import javazoom.jlgui.basicplayer.BasicPlayerListener; 

public class audiostream implements BasicPlayerListener, Runnable { 

    public String streamurl; 
    public BasicController playerControl; 
    private volatile boolean shouldPlay = true; 

    @Override 
    public void run() { 
     while (true) { 
      if (shouldPlay) { 
       player(); 
      } 
     } 
    } 

    // ** RUN ONCE TO START THREAD 
    public void start() { 

     new Thread(this).start(); 

    } 

    // ** RUN TO PAUSE/STOP THE PLAYER 
    public void pause() { 

     // set play bool to false 
     shouldPlay = false; 


     // stop player 
     try { 
      playerControl.stop(); 
     } catch (BasicPlayerException ex) { 
      Logger.getLogger(audiostream.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    } 

    // ** RUN TO PLAY 
    public void play() { 
     shouldPlay = true; 
    } 


    // construct 
    public audiostream(String givenStreamurl) { 

     // assign the radio url 
     streamurl = givenStreamurl; 

    } 

    // OPENS UP THE SHOUTCAST STREAM 
    public void player() { 

     // dont allow multiple runnings of this 
     shouldPlay = false; 

     // start stream 
     try { 
      BasicPlayer player = new BasicPlayer(); 
      playerControl = (BasicController) player; 
      player.addBasicPlayerListener(this); 
      try { 
       playerControl.open(new URL(streamurl)); 
      } catch (MalformedURLException ex) { } 
      playerControl.play(); 
     } catch (BasicPlayerException ex) { } 

    } 

    @Override 
    public void opened(Object o, Map map) { 
     //System.out.println("opened : "+map.toString()); 
    } 

    @Override 
    public void progress(int i, long l, byte[] bytes, Map map) { 
     //System.out.println("opened : "+map.toString()); 
    } 

    @Override 
    public void stateUpdated(BasicPlayerEvent bpe) { 
     //System.out.println("opened : "+bpe.toString()); 
    } 

    @Override 
    public void setController(BasicController bc) { 
     //System.out.println("opened : "+bc.toString()); 
    } 



} 
관련 문제