2012-02-17 27 views
2

我正在編寫一個小應用來播放shoutcast流,我使用javazoom.jl.player.Player來做到這一點。這裏是我的代碼:javazoom播放器不會在SHOUTcast視頻流上工作(說無效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:無效的Http響應」。我相信這是因爲SHOUTcast返回冰200 OK頭,其中Windows上的東西必須要它返回http頭。我似乎無法找到如何使用javazoom播放器在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()); 
    } 



} 
相關問題