поток java + shoutcast - PullRequest
       3

поток java + shoutcast

1 голос
/ 13 июля 2011

Я уже искал форумы, прежде чем опубликовать это (я не нашел ответа на свою проблему, поэтому создал этот пост).Я хочу сделать Java-приложение, которое воспроизводит аудиопоток с сервера shoutcast.Я посмотрел в Интернете и обнаружил, что javazoom будет полезен для того, что я хочу сделать.Я скачал их пакеты и начал экспериментировать.Я пришел с этим, но я получаю «javax.sound.sampled.UnsupportedAudioFileException: не удалось получить поток аудио ввода от входного URL-адреса"

Вот код:

    /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package test;

/**
 *
 * @author George
 */


import  java.io.*;
import java.util.Map;
import java.net.*;
import javax.sound.sampled.*;

public class play {
    public  void testPlay(String filename)
{
  try {

   // File file = new File(filename);
      URL file= new URL(filename);
    AudioInputStream in= AudioSystem.getAudioInputStream(file);
    AudioInputStream din = null;
    AudioFormat baseFormat = in.getFormat();
    AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 
                                                                                  baseFormat.getSampleRate(),
                                                                                  16,
                                                                                  baseFormat.getChannels(),
                                                                                  baseFormat.getChannels() * 2,
                                                                                  baseFormat.getSampleRate(),
                                                                                  false);
    din = AudioSystem.getAudioInputStream(decodedFormat, in);
    // Play now. 
    rawplay(decodedFormat, din);
    in.close();


    din = AudioSystem.getAudioInputStream(decodedFormat, in);
// DecodedMpegAudioInputStream properties
if (din instanceof javazoom.spi.PropertiesContainer)
{
    Map properties = ((javazoom.spi.PropertiesContainer) din).properties(); 
    float[] equalizer = (float[]) properties.get("mp3.equalizer");
    equalizer[0] = (float) 0.5;
    equalizer[31] = (float) 0.25; 
}




  } catch (Exception e)
    {
        System.out.println(e);
    }
} 

private void rawplay(AudioFormat targetFormat, AudioInputStream din) throws IOException,                                                                                                LineUnavailableException
{
  byte[] data = new byte[4096];
  SourceDataLine line = getLine(targetFormat); 
  if (line != null)
  {
    // Start
    line.start();
    int nBytesRead = 0, nBytesWritten = 0;
    while (nBytesRead != -1)
    {
        nBytesRead = din.read(data, 0, data.length);
        if (nBytesRead != -1) nBytesWritten = line.write(data, 0, nBytesRead);
    }
    // Stop
    line.drain();
    line.stop();
    line.close();
    din.close();
  } 
}

private SourceDataLine getLine(AudioFormat audioFormat) throws LineUnavailableException
{
  SourceDataLine res = null;
  DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
  res = (SourceDataLine) AudioSystem.getLine(info);
  res.open(audioFormat);
  return res;
} 
}

1 Ответ

1 голос
/ 13 июля 2011

Вы уверены, что у вас есть URL для данных MP3.Вы должны иметь возможность сохранять некоторые данные из потока локально, а затем воспроизводить их из стандартного приложения медиаплеера в виде файла MP3.Если нет, возможно, у вас плохой поток или поток для другого формата.

Кроме того, вы используете реализацию библиотеки аудио, предоставляемую JavaZoom, для получения поддержки MP3?В Java его нет по умолчанию.

Вы также можете попробовать прочитать заголовки ответа HTTP из потока shoutcast, в нем может быть более подробная информация об обслуживаемом контенте.

Удачи.

...