Проигрыватель javazoom не будет работать в Windows с потоком SHOUTcast (говорит неверный запрос Https) - PullRequest
2 голосов
/ 17 февраля 2012

Я пишу небольшое приложение для воспроизведения потока shoutcast и использую javazoom.jl.player.Player для этого. Вот мой код:

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». Я верю , это потому, что SHOUTcast возвращает ледяные 200 ok заголовков, причем что-то в Windows должно хотеть, чтобы оно возвращало http заголовки Я не могу найти, как заставить его принимать эти разные заголовки в окнах с помощью javazoom Player.

1 Ответ

0 голосов
/ 06 июля 2013

Я решил эту проблему с помощью 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());
    }



}
...