Воспроизведение онлайн mp3
У меня проблема с воспроизведением онлайн mp3. Я использую последнюю версию javazoom jlayer и basicplayer. Вот исключение:
Вызывается: javazoom.jlgui.basicplayer.BasicPlayerException: java.io.EOFException at javazoom.jlgui.basicplayer.BasicPlayer.initAudioInputStream(Неизвестный источник) at javazoom.jlgui.basicplayer.BasicPlayer.open(Неизвестный источник) ... еще 12 Вызвано: java.io.EOFException в java.io.DataInputStream.readInt(DataInputStream.java:375) на com.sun.media.sound.WaveFileReader.getFMT(WaveFileReader.java:244) в com.sun.media.sound.WaveFileReader.getAudioFileFormat(WaveFileReader.java:85) в javax.sound.sampled.AudioSystem.getAudioFileFormat(AudioSystem.java:985) at javazoom.jlgui.basicplayer.BasicPlayer.initAudioInputStream(Неизвестный источник) ... еще 15
Моя Java 1.6.0_16.
Некоторые файлы не могут быть воспроизведены через Интернет. У меня есть набор mp3-файлов, играющих один за другим. Случайно один mp3 не работает, бросая выше исключения. Некоторые mp3-файлы могут быть воспроизведены путем повторного вызова метода play(), если базовый плеер javazoom, но другие никогда не могут быть воспроизведены онлайн.
Мне удалось найти этот пост, но я сомневаюсь, действительно ли это относится к моей версии DirectX или что-то.
Мохсен
3 ответа
Можете ли вы скачать файл по этому URL?
EOF это "конец файла". Он теряет поток, или там просто нет файла, чтобы получить.
Если вы используете потоковую передачу по HTTP, веб-сервер, похоже, немедленно закрывает соединение, не доставляя никаких данных. Некоторые серверы, доставляющие MP3 через HTTP, оценивают заголовки запроса, пытаясь предотвратить захват инструментами мультимедийного потока, и, например, доставляют контент только в том случае, если заголовки запроса соответствуют известному медиапроигрывателю. Если у вас есть инструмент для прослушивания сети и вы знаете медиаплеер, который работает с сервером, с которого вы пытаетесь получить контент, вы, конечно, можете установить заголовки HTTP-запросов в вашей Java-программе, чтобы сервер думал, что вы используете обычный медиаплеер.
У меня были похожие проблемы, когда потоки ввода или вывода не обрабатывались должным образом... Вы все оборачиваете в try/catch/finally и правильно закрываете все потоки?
Некоторые могут работать, если вам повезет, и буфер получит весь контент.
Вы также можете попробовать очистить (.flush()) входной поток.
Надеюсь это поможет.