2012-02-17 3 views
2

shoutcastストリームを再生するための小さなアプリケーションを作成していますが、これを行うにはjavazoom.jl.player.Playerを使用しています。ここに私のコードは次のとおりです。javadoom Playerが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のokヘッダーを返すためです.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()); 
    } 



} 
関連する問題