AAC Decoder mit Android Media Codec (Audio Stream von Gstreamer)

  • Hey!
    Ich würde gerne Audio von meinem Raspberry mit Hilfe von Gstreamer an mein Android Handy senden.
    In Gstreamer benutze ich folgende Pipeline:
    gst-launch-1.0 audiotestsrc ! faac ! "audio/mpeg, mpegversion=4" ! mux. mpegtsmux name=mux ! udpsink host=224.0.0.1 port=8001
    Dadurch erhalte ich AAC LC Audio Stream mit MPEG-TS als Container.
    Ich versuche die Android App mit Android Studio selbst zu entwickeln. Die Daten empfange ich mit einem MulticastSocket. Nun muss der Audio Stream mit Media Extractor und Media Codec decodiert werden. Da Media Extractor nicht direkt auf den Socket zugreifen kann speichere ich ein Teil der Daten in eine Datei und setze diese als DataSource für den Media Extractor.
    Der Media Extractor scheint teilweise zu funktionieren, er erkennt dass es sich um AAC Audio handelt. Allerdings erhalte ich viele Fehlermeldungen und es wird nichts abgespielt.
    Der relevante Teil meines Codes sieht folgendermaßen aus:


    Das hier sind die Fehlermeldungen in der Logcat:




    Wie schon gesagt schreibe ich zuerst einen Teil des Streams in eine Datei, auf welche der Extractor zugreift. Diese Datei lässt sich abspielen, auch mit den Android Music Player!
    Also denke ich dass der Fehler weniger beim Senden und Empfangen, als eher beim Decodieren liegt. Ich habe mir auch eine AAC Testdatei heruntergeladen, mit dieser kommt es zu den selben Fehlermeldungen.
    Wie ihr wahrscheinlich am Code erkennen könnt bin ich noch nicht sehr Fortgeschritten was Programmieren angeht und somit um jede Hilfe dankbar!

  • Die Fehlermeldung sieht nach einem einfachen Permissions Problem aus. Du musst in deiner Manifest erst die entsprechende Permission zum Zugriff auf Datein setzen, sonst lässt Android deine App nicht darauf zugreifen. Was für eine Permission du setzen musst, hängt davon ab wo das File liegt, ob im App Ordner order auf einem Externen Medium wie einer SD Karte.

  • Danke für die schnelle Antwort!


    Habe in meiner Manifest die Permissions:


    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    gesetzt.
    Die Fehlermeldungen bleiben weiterhin die selben. Auch wenn ich statt dem externen den internen Speicher benutze ändert sich nichts.
    In der Fehlermeldung "E/MM_OSAL: MM_File_Create File Name /data/mmosal_logmask.cfg , Mode 0"
    Wird die Datei "/data/mmosal_logmask.cfg" genannt, das ist jedoch nicht die Audio Datei, die ich abspeichere. Was könnte das für eine Datei sein? Möglicherweise wird sie vom Decoder erstellt?

  • Und was ist überhaupt dieses "MM_OSAL"? Ich kann im Internet nichts brauchbares dazu finden.


    Die Datei auf die zugegriffen werden soll befindet sich im "data" Ordner von Android, eine App kann jedoch nicht ohne root Rechte auf diesen Ordner zugreifen. Warum will meine App auf diesen Ordner zugreifen?
    Ich debugge mit Android Studio in dem ich mein Smartphone mit dem PC verbinde, hängt es vielleicht damit zusammen?

  • eine .cfg datei ist in der regel eine konfigurationsdatei. Vielleicht will der decoder irgendeine konfiguration laden bzw. schreiben und der standardpfad liegt eben in data. Schau mal ob du bei dem Decoder irgendwo einen pfad für mmosal konfiguration definieren kannst.

  • Habe meinen Decoder jetzt ohne den Media Extractor konfiguriert. Die Fehlermeldungen mit MM_OSAL und der Konfigurationsdatei erhalte ich nicht mehr. Diese scheinen jedoch nicht das Hauptproblem gewesen zu sein, denn mein Programm funktioniert immer noch nicht und die Meldungen:


    Code
    W/SoftAAC2: aacDecoder_DecodeFrame decoderErr = 0x4004 
    W/SoftAAC2: AAC decoder returned error 0x4004, substituting silence 
    I/SoftAAC2: Reconfiguring decoder: 0->44100 Hz, 0->0 channels

    bleiben weiterhin bestehen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!