6 Stimmen

Das Übertragen von Daten aus dem Speicher an den MediaPlayer

Szenario: Habe verschlüsselte mp3-Dateien in meiner .apk. Muss entschlüsseln und an das MediaPlayer-Objekt senden.

Problem: Nachdem ich die Dateien gelesen und entschlüsselt habe, wie bekomme ich MediaPlayer dazu, sie abzuspielen?

Jetzt hat MediaPlayer 4 Versionen von setDataSource().

setDataSource(String path)
setDataSource(FileDescriptor fd)
setDataSource(FileDescriptor fd, long offset, long length)
setDataSource(Context context, Uri uri)

Keines davon ist ideal für die Situation. Ideal wäre wohl, MediaPlayer einen InputStream zu geben?

Mögliche Lösungen:

  • Schreibe entschlüsselte Daten in eine Datei und spiele die Datei ab. Viel IO-Aufwand.
  • Erstellen Sie einen Dummy-HTTP-Server (ServerSocket?) und geben Sie die URL an MediaPlayer weiter. Wiederum unübersichtlich. Bin ich überhaupt berechtigt, einen Socket zu erstellen?

Hat jemand eine bessere Lösung?

2voto

A. Serediuk Punkte 36
byte[] callData = ...;
String base64EncodedString = Base64.encodeToString(callData, Base64.DEFAULT);

try
{
    String url = "data:audio/amr;base64,"+base64EncodedString;
    MediaPlayer mediaPlayer = new MediaPlayer();
    mediaPlayer.setDataSource(url);
    mediaPlayer.prepare();
    mediaPlayer.start();
}
catch(Exception ex){
    ...
}

1voto

rwat Punkte 833

Wenn Sie nicht alle Funktionen von MediaPlayer benötigen, empfehle ich Ihnen, AudioTrack auszuprobieren. Es ist im Grunde für das gedacht, was Sie beschreiben. Leider akzeptiert MediaPlayer keinen AudioTrack in seinem Konstruktor, daher ist die beste Lösung in diesem Fall, einen Dummy-Http-Server einzuschließen, der Ihre Daten von einer URL zurücksendet (wie es in den Android-1.0-Release-Notes empfohlen wird).

0voto

Julian Punkte 19244

Ich bin mir nicht zu 100% sicher, aber ich glaube, dass du keine andere Option hast, als die entschlüsselte Datei vor dem Abspielen temporär zu speichern.

Diese Frage ist irgendwie ähnlich, aber ich glaube nicht, dass du die einfache Lösung dort verwendest, da es sich um eine verschlüsselte Datei handelt. Es wird auch ein Link zu einem Tutorial für Benutzerdefiniertes Audio-Streaming mit dem MediaPlayer bereitgestellt, aber es scheint, dass auch ihre Lösung eine temporäre Datei verwendet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X