Wir implementieren ein Programm für Android-Telefone, das Audio-Streams aus dem Internet abspielt. Hier ist ungefähr, was wir tun:
- Laden Sie ein benutzerdefiniertes verschlüsseltes Format herunter.
- Entschlüsseln, um Teile der regulären MP3-Daten zu erhalten.
- Dekodierung von MP3-Daten in PCM-Rohdaten in einem Speicherpuffer.
- Weiterleitung der PCM-Rohdaten an eine Audiospur
Unsere Zielgeräte sind bisher Droid und Nexus One. Auf dem Nexus One funktioniert alles prima, aber die MP3-Dekodierung ist auf dem Droid zu langsam. Die Audiowiedergabe beginnt zu springen, wenn wir den Droid unter Last setzen. Es ist uns nicht erlaubt, die MP3-Daten auf die SD-Karte zu dekodieren, aber ich weiß, dass das sowieso nicht unser Problem ist.
Wir haben keinen eigenen MP3-Decoder geschrieben, sondern verwenden MPADEC ( http://sourceforge.net/projects/mpadec/ ). Es ist kostenlos und ließ sich leicht in unser Programm integrieren. Wir kompilieren es mit dem NDK.
Nach eingehender Analyse mit verschiedenen Profiling-Tools sind wir davon überzeugt, dass es dieser Decoder ist, der zurückbleibt.
Hier sind die Optionen, die wir in Betracht ziehen:
-
Finden Sie einen anderen MP3-Decoder, den wir mit dem Android NDK kompilieren können. Dieser MP3-Decoder müsste entweder für die Ausführung auf mobilen ARM-Geräten optimiert sein oder vielleicht nur Integer-Mathematik oder andere Optimierungen zur Leistungssteigerung verwenden.
-
Da der eingebaute Android MediaPlayer-Dienst URLs akzeptiert, könnten wir in unserem Programm einen kleinen HTTP-Server implementieren und den MediaPlayer mit den entschlüsselten MP3s versorgen. Auf diese Weise können wir die Vorteile des eingebauten MP3-Decoders nutzen.
-
Zugriff auf den eingebauten MP3-Decoder durch das NDK. Ich weiß nicht, ob dies möglich ist.
Hat jemand einen Vorschlag, wie wir unsere MP3-Dekodierung beschleunigen können?
-- Rob Sz
0 Stimmen
Bei Ihrer Option #2 würde ich erwarten, dass der HTTP-Overhead die Vorteile, die Sie durch die Verwendung der integrierten
MediaPlayer
Streaming-Unterstützung.2 Stimmen
Wenn ich mich nicht irre, ist die eingebaute
MediaPlayer
kann auch von jedem beliebigencontent://
URI, die Ihnen im Wesentlichen eine Pipe zum Schreiben zur Verfügung stellt.0 Stimmen
@jleedev: Können Sie das näher erläutern. Klingt sehr interessant!
0 Stimmen
@Rob sehr daran interessiert, welchen Ansatz Sie am Ende gewählt haben. Ich untersuche gerade dasselbe.