Javazoom BasicPlayer: поиск с входными потоками - PullRequest
3 голосов
/ 16 сентября 2011

Я разрабатываю программу для потоковой передачи музыки из Интернета. Когда я транслирую песню, у меня нет доступа к ее URL. Я получаю только входной поток и некоторую информацию, такую ​​как длина в байтах и ​​так далее. Я хочу реализовать панель поиска, аналогичную поисковой панели на YouTube и т. Д. До сих пор мне удавалось отображать панель поиска в виде JSlider с максимальной длиной потока в байтах и ​​значением, изменяющимся в соответствии с текущей позицией в байтах в песне. .

Теперь у BasicPlayer есть функция под названием seek (long bytesToSkip), и я попытался вызвать ее, когда ползунок перемещается и освобождается при вводе пользователем. Однако seek () ничего не сделает. Нет сообщения журнала, ничего. Поэтому я скачал источник BasicPlayer и обнаружил, что seek (long bytesToSkip) вызывает skipBytes (long bytesToSkip), который проверяет, являются ли данные для воспроизведения файлом. Если это не так, это ничего не сделает.

Так что я удалил это условие, чтобы увидеть, куда меня это приведет. Теперь я получаю исключение на линии

initAudioInputStream();

Он проверяет, с какими типами данных он имеет дело, и вызывает соответствующий метод для этого типа данных. В моем случае

initAudioInputStream(InputStream inputStream) {
    m_audioInputStream = AudioSystem.getAudioInputStream(inputStream);
    m_audioFileFormat = AudioSystem.getAudioFileFormat(inputStream);
}

и там в первой из этих двух строк я получаю свое исключение. Это исключение EOFException, поэтому я считаю, что поток не "буферизован" достаточно для получения audioInputStream. Если этот метод требует всего файла, я думаю, мне не повезло.

Я действительно надеюсь, что кто-нибудь может помочь мне сделать эту работу. Я так долго над этим работаю ..

...