Проблемы с использованием javazoom Player

Я пытаюсь воспроизвести mp3-файлы с помощью JLayer Class Player. После запуска потока, содержащего myPlayer.play(), вы можете услышать несколько сотен миллисекунд начала песни, а затем проигрыватель прерывается, и я получаю следующие сообщения об ошибках:

> javazoom.jl.decoder.BitstreamException: Bitstream errorcode 102   at
> javazoom.jl.decoder.Bitstream.newBitstreamException(Unknown Source)
>   at javazoom.jl.decoder.Bitstream.readFrame(Unknown Source)  at
> javazoom.jl.player.Player.decodeFrame(Unknown Source)     at
> javazoom.jl.player.Player.play(Unknown Source)    at
> javazoom.jl.player.Player.play(Unknown Source)    at
> controller.PlayController.run(PlayController.java:51)     at
> java.lang.Thread.run(Thread.java:724)

Я искал решения в Интернете и читал, что эта ошибка может возникать из-за проблем с определенными файлами .mp3, но файлы .wav или .wma также не принимаются. Кто-нибудь знает, как заставить работать плеер? заранее спасибо


person user3021755    schedule 22.11.2013    source источник
comment
JLayer работает практически с любым мп3 файлом - исключением будет свободный битрейт (никогда не видел такого файла). Код ошибки 102 указывает на ошибку чтения из потока. Вы, вероятно, запустили плеер (который работает в своем собственном потоке), а затем закрыли входной поток из основного потока. Простая ошибка кодирования.   -  person Durandal    schedule 22.11.2013
comment
хорошо, спасибо пока.   -  person user3021755    schedule 22.11.2013
comment
У меня в коде есть BufferedInputStream bis, и когда я закомментирую bis.close(), плеер работает как надо. Можете ли вы объяснить, почему закрытие входного потока приводит к ошибке? Кроме того, невозможно закрыть проигрыватель JFrame, хотя я поместил назначение myPlayer.play() в отдельный поток. как я могу заставить приложение быть закрытым?   -  person user3021755    schedule 22.11.2013
comment
Как только вы вызываете close() для InputStream, вы больше не можете читать его. JLayer читает mp3 во время воспроизведения, поэтому поток не должен закрываться до окончания воспроизведения (закрытие его подобно тому, как кто-то вырывает книгу, которую вы читаете, у вас из рук). Что касается того, почему ваш фрейм не закрывается, покажите код. Вы либо неправильно обрабатываете событие закрытия, либо блокируете поток Swing.   -  person Durandal    schedule 22.11.2013
comment
Хорошо, я нашел ошибку. Простая ошибка кодирования с потоком ;-)   -  person user3021755    schedule 22.11.2013


Ответы (1)


Я получил некоторые искажения, используя Javazoom в Linux. комментарий выше о прерывании входного потока побудил меня сохранить экземпляр класса Player и закрыть буферизованный входной поток перед каждым открытием, это, похоже, помогло, но я не уверен. Он возвращался, но реже, и теперь исчезает, если я закрываю Firefox.

Спасибо за понимание о прерывании входных потоков.

person honestyrocksu    schedule 31.12.2014