2009-04-24 3 views
6

Aufgrund der (ziemlich nervigen) Einschränkungen vieler J2ME-Telefone können Audiodateien erst abgespielt werden, wenn sie vollständig heruntergeladen wurden. Um Livestreams zu spielen, muss ich daher Chunks auf einmal herunterladen und ByteArrayInputStream s konstruieren, die ich dann an die Players füttere.Alternativen zu rotierenden Puffern in Player in J2ME?

Dies funktioniert gut, außer dass es jedes Mal, wenn ein Stream endet und ein neuer benötigt wird, eine ärgerliche Lücke von etwa 1/4 Sekunde gibt. Gibt es eine Möglichkeit, dieses Problem oder das obige Problem zu lösen?

+0

Ich denke, was Sie wollen, sind die SourceStream und DataSource-Klassen in javax.microedition.media.protocol finden Sie hier http://java.sun.com/javame/reference/apis/jsr135/javax/microedition/media/protocol /DataSource.html –

Antwort

0

EDIT2: Oder Sie könnten nur dies betrachten, die genau zu sein scheint, was Sie wollen: http://java.sun.com/javame/reference/apis/jsr135/javax/microedition/media/protocol/DataSource.html

ich zwei Spieler-Klassen erstellen würde und stellen Sie sicher, dass ich genug Stücke erhalten hatte, bevor ich begann, sie zu spielen. Dann würde ich anfangen, den ersten Teil durch Spieler eins zu spielen und den zweiten Teil in Spieler zwei zu laden. Dann würde ich die TimeBase-Klasse verwenden, um zu verfolgen, wie viel Zeit vergangen ist und wann ich wusste, dass der erste Chunk enden würde (Sie sollten wissen, wie lange jeder Chunk spielen muss), dann würde ich den zweiten Chunk über den zweiten Player spielen Lade den dritten Chunk in den ersten und so weiter und so fort, bis keine Chunks mehr zu spielen sind.

Der Schlüssel hier ist die richtige Verwendung der TimeBase-Klasse, um zu wissen, wann der Übergang durchgeführt werden muss. Ich denke, das sollte den ärgerlichen 1/4-Sekunden-Abstand zwischen den Brocken beseitigen. Ich hoffe, das funktioniert, lass es mich wissen, wenn es das tut, weil es wirklich interessant klingt.

BEARBEITEN: Player.prefetch() könnte auch hier bei der Verringerung der Latenz nützlich sein.

1

Leider können Sie diese Lücken nicht loswerden, zumindest nicht auf jedem Gerät, auf dem ich es ausprobiert habe. Es ist wirklich sehr nervig. Es ist Teil der Spezifikation, dass Sie Audio oder Video nicht über HTTP streamen können.

Wenn Sie von einem Server streamen möchten, verwenden Sie stattdessen nur einen RTSP-Server, obwohl Sie die Unterstützung dafür auf Ihrem Gerät überprüfen müssen.

Und fälschen RTSP mit einem lokalen Server auf dem Gerät (rtsp: // localhost ...) funktioniert auch nicht .. Ich habe das auch versucht.

2

Die einzige gute Möglichkeit, lange (3 Minuten und mehr) Titel mit J2ME JSR135, mäßig zuverlässig, auf der größten Anzahl von Handgeräten zu spielen, ist die Verwendung einer "file: //" URL beim Erstellen des Players oder der Eingangsstrom tatsächlich von einer FileConnection kommt.

neuere Blackberry-Telefone können einen ByteArrayInputstream nur verwenden, wenn sie über einen großen Java-Heapspeicher verfügen.

Viele Telefone, die mit dem Betriebssystem Symbian betrieben werden, ermöglichen es Ihnen, Dateien in einen privaten Bereich für die J2ME-Anwendung zu legen und gleichzeitig Titel am gleichen Ort wiederzugeben.