Ich versuche, MP3 von einem Android-Telefon auf ein anderes Android-Telefon zu streamen, indem ich WiFi über einen Zugangspunkt verwende. Das Problem besteht darin, dass OpenSL ES scheinbar nur PCM-Audiopuffer als Quelle unterstützt (es sei denn, es wird ein URI verwendet). Anstatt eine potentiell riesige Datei auf der "Master" -Seite vor dem Senden zu dekodieren, würde ich es bevorzugen, den "Client" die MP3 in PCM dekodieren zu lassen. Beachten Sie, dass dies geschehen muss, während die Datei streamt, anstatt einfach die gesamte Datei zu senden und dann zu dekodieren. Gibt es eine Möglichkeit, dies mit OpenSL ES zu erreichen? Audiospur? Es scheint, als wäre es eine ziemlich häufige Anfrage.
Sie haben Recht, dass opensl anscheinend keine einfache Pufferwarteschlange mit MP3-Quelle aufnimmt. Davon abgesehen, sollten Sie stattdessen einen SLDataLocator_URI verwenden können. Jetzt verstehe ich, dass Sie nicht die volle Datei zur Verfügung haben, wenn Sie starten (da Sie streamen), aber es gibt einen Weg um dies zu umgehen. Wenn Sie eine leere Datei erstellen und diese als Quelle für den opsi URI-Player verwenden, sollte alles funktionieren. Wenn Sie Daten (Bits der MP3-Datei) erhalten, fügen Sie diese Daten einfach der leeren Datei hinzu, die Sie erstellt haben. Sie können OpenSL von dieser Datei starten lassen, bevor Sie mit dem Anhängen von Daten fertig sind.
Erstellen Sie eine leere Datei mit:
%Vor%Erstellen Sie Ihre Audioquelle als:
%Vor%Lade Puffer mit:
%Vor%Starten Sie die Wiedergabe von Audio jederzeit mit OpenSL und fahren Sie dann mit dem Laden von Puffern fort. Solange Sie in Ihrem Streaming-Prozess der Kurve voraus sind, sollten Sie in Ordnung sein.
Müssen Sie opensl verwenden? MediaCodec (verfügbar in Android 4.2) kann mp3 in PCM-Stücke entschlüsseln, die an AudioTrack weitergegeben werden können.
Tags und Links android audio-streaming audiotrack opensl