2009-04-24 21 views
6

Z powodu (dość irytujących) ograniczeń w wielu telefonach J2ME, pliki audio nie mogą być odtwarzane, dopóki nie zostaną w pełni pobrane. Tak więc, aby odtwarzać transmisje na żywo, jestem zmuszony do pobierania fragmentów na raz i konstruowania ByteArrayInputStream s, które następnie przesyłam do Graczy.Alternatywy dla obracających się buforów w odtwarzaczach w J2ME?

Działa to dobrze, z tą różnicą, że za każdym razem, gdy kończy się strumień i jest potrzebna nowa, istnieje irytująca przerwa trwająca około 1/4 sekundy. Czy istnieje sposób na rozwiązanie tego problemu lub powyższy problem?

+0

Myślę, że to, czego chcesz, to klasy SourceStream i DataSource znalezione w javax.microedition.media.protocol, które można znaleźć tutaj: http://java.sun.com/javame/reference/apis/jsr135/javax/microedition/media/protocol /DataSource.html –

Odpowiedz

0

EDIT2: A może po prostu patrzeć na to co wydaje się być dokładnie to, co chcesz: http://java.sun.com/javame/reference/apis/jsr135/javax/microedition/media/protocol/DataSource.html

Chciałbym utworzyć dwie klasy zawodnik i upewnić się, że otrzymało wystarczającą ilość kawałków zanim zacząłem grać im. Wtedy zacznę grać pierwszy kawałek przez gracza pierwszego i załaduję drugi do drugiego gracza. Potem używałbym klasy TimeBase, aby śledzić, ile czasu minęło i kiedy wiedziałem, że pierwszy fragment się skończy (powinieneś wiedzieć, jak długo ma grać każdy kawałek), wtedy zacznę grać drugi fragment przez drugiego gracza i Załaduj trzeci fragment na pierwszy i tak dalej i tak dalej, aż nie będzie już żadnych kawałków do grania.

Kluczem tutaj jest prawidłowe używanie klasy TimeBase, aby wiedzieć, kiedy dokonać przejścia. Myślę, że powinno to pozbyć się irytującego 1/4 sekundy przerwy między zakładami. Mam nadzieję, że to działa, daj mi znać, jeśli tak, ponieważ brzmi naprawdę interesująco.

EDYCJA: Player.prefetch() również może być przydatna w zmniejszaniu opóźnień.

1

Niestety, nie można pozbyć się tych luk, przynajmniej nie na żadnym urządzeniu, na którym go wypróbowałem. To bardzo denerwujące. To część specyfikacji, której nie można przesyłać strumieniowo audio ani wideo przez HTTP.

Jeśli chcesz przesyłać strumieniowo z serwera, jedynym sposobem, aby to zrobić, jest użycie serwera RTSP, ale musisz sprawdzić obsługę tego urządzenia na swoim urządzeniu.

I fałszowanie RTSP przy użyciu lokalnego serwera na urządzeniu (rtsp: // localhost ...) też nie działa. Próbowałem też.

2

Jedynym dobrym sposobem na odtwarzanie długich (3 minuty i więcej) utworów za pomocą J2ME JSR135, w umiarkowanie niezawodny sposób, na największej liczbie słuchawek, jest użycie adresu URL "file: //" podczas tworzenia odtwarzacza lub aby strumień wejściowy faktycznie pochodził z połączenia FileConnection.

najnowsze telefony BlackBerry mogą korzystać z ByteArrayInputstream tylko wtedy, gdy dostępna jest duża pamięć sterty Java.

Wiele telefonów działających w systemie operacyjnym Symbian umożliwia umieszczanie plików w obszarze prywatnym dla aplikacji J2ME, a jednocześnie umożliwia odtwarzanie utworów w tej samej lokalizacji.