Альтернативы вращающимся буферам в Player в J2ME? - PullRequest
6 голосов
/ 25 апреля 2009

Из-за (довольно раздражающего) ограничений на многие телефоны J2ME аудиофайлы невозможно воспроизвести, пока они не будут полностью загружены. Таким образом, для воспроизведения прямых трансляций я вынужден загружать порции и создавать ByteArrayInputStream s, которые затем я передаю игрокам.

Это хорошо работает, за исключением того, что каждый раз, когда заканчивается поток и требуется новый, возникает раздражающий промежуток около 1/4 секунды. Есть ли способ решить эту проблему, или проблема выше?

Ответы [ 3 ]

2 голосов
/ 27 апреля 2009

Единственный хороший способ воспроизведения длинных (3 минуты и более) треков с J2ME JSR135, с умеренной надежностью, на самом большом количестве трубок - это использовать URL «file: //» при создании проигрывателя, или чтобы входной поток действительно исходил из FileConnection.

последние телефоны BlackBerry могут использовать ByteArrayInputstream, только если у них есть большая доступная память кучи Java.

многие телефоны, работающие в операционной системе Symbian, позволят вам помещать файлы в приватную область для приложения J2ME, в то же время сохраняя возможность воспроизводить треки в том же месте.

1 голос
/ 27 апреля 2009

К сожалению, вы не можете избавиться от этих пробелов, по крайней мере, ни на одном устройстве, на котором я его пробовал. Это действительно очень раздражает. Это часть спецификации, что вы не можете передавать аудио или видео по HTTP.

Если вы хотите осуществлять потоковую передачу с сервера, единственный способ сделать это - использовать сервер RTSP , хотя вам необходимо проверить поддержку этого на вашем устройстве.

И подделка RTSP с использованием локального сервера на устройстве (rtsp: // localhost ...) тоже не работает .. Я тоже это пробовал.

0 голосов
/ 25 апреля 2009

РЕДАКТИРОВАТЬ2: Или вы можете просто посмотреть на это, что, кажется, именно то, что вы хотите: http://java.sun.com/javame/reference/apis/jsr135/javax/microedition/media/protocol/DataSource.html

Я бы создал два класса Игрока и удостоверился, что получил достаточно кусков, прежде чем начать их играть. Затем я начинал играть первый блок через первого игрока и загружал второй в второго игрока. Затем я использовал бы класс TimeBase, чтобы отследить, сколько времени прошло, и когда я знал, что закончится первый блок (вы должны знать, сколько времени должен играть каждый блок), тогда я начал бы воспроизводить второй блок через второго игрока и загружайте третий блок в первый и так далее, и так далее, пока не останется больше фрагментов для игры.

Ключ здесь правильно использует класс TimeBase, чтобы знать, когда сделать переход. Я думаю, что это должно избавить от надоедливой ставки в 1/4 секунды между блоками. Я надеюсь, что это сработает, дайте мне знать, если это так, потому что это звучит очень интересно.

РЕДАКТИРОВАТЬ: Player.prefetch () также может быть полезно здесь для уменьшения задержки.

...