Decodieren von Airplay-Paketen in Java oder C / C ++ auf Android

Ich arbeite derzeit an einem AirPlay-Receiver für einen Unterabschnitt einer Android-Anwendung. Ich verwende das folgende Framework:

Https://github.com/pentateu/DroidAirPlay

  • Implementierung von Android als Server (Empfänger) im Airplay
  • Native Android / iOS Entwicklung vs Marmalade SDK
  • Während dies funktioniert auf einige Mid-Range-Geräte wie die miPad, müssen wir diese auf einem niedrigen spec benutzerdefinierte Gerät zu bekommen. Das benutzerdefinierte Gerät decodiert die Airplay-Pakete um 10x bis 20x langsamer als die miPad. Infolgedessen verlieren die Audiopakete die Zeitsynchronisation und aufgrund der Zeit, die zum Decodieren der Pakete benötigt wird, kann das Audio niemals neu synchronisieren.

    Ich schaute in einige andere Airplay-Receiver-Apps auf dem Play Store und von dem, was ich sehen kann, neigen sie dazu, auf Shairport ( https://github.com/abrasive/shairport ) für die Airplay-Empfängerseite der Dinge zu basieren.

    ** Hinweis: ** Die Shairport-basierten Frameworks scheinen das Synchronisierungsproblem auf dem Low-End-Gerät nicht zu erleiden.

    Das Framework, das ich verwende, basiert stark auf dem Shairport-Framework, abgesehen davon ist es in Java geschrieben.

    Für die Decodierung von Daten ist C / C ++ weit überlegen als Java?

    Wenn ja, würde die Regie des Decoding-Teils des DroidAirPlay-Frameworks über eine C- oder C ++ – Implementierung mit dem NDK einen großen Auftrieb zur Leistung geben?

    Danke im Voraus

    Matt

  • Wie kann ich wissen, ob ich in einem Anruf auf Android bin?
  • In MVP ist onClick Verantwortung von View oder Presenter?
  • Appcompat funktioniert nicht
  • Android - kundenspezifische Titelansicht zur Laufzeit ändern
  • NativeActivity endet nicht
  • Ripple-Effekt über ein RecyclerView-Element mit ImageView
  • One Solution collect form web for “Decodieren von Airplay-Paketen in Java oder C / C ++ auf Android”

    Während es wahr ist, dass Java zu Bytecode kompiliert, das in einer virtuellen Maschine ausgeführt wird, muss es nicht unbedingt langsamer (oder schneller) als eine nativ kompilierte ausführbare Datei sein, ob C / C ++ oder nicht. Es hängt alles vom Programm ab!

    Es gibt eine Reihe von Gründen, warum in diesem Fall Java kann langsamer sein:

    • Die Decodierungsimplementierung könnte nur schlecht codiert / optimiert werden? (Das ist nicht wirklich Java's Schuld)
    • Der Java-Compiler kann einen suboptimalen Code für die JVM generieren.
    • Einige Java-Sprachkonstrukte sind einfach zu langsam für die Geschwindigkeits- / Ressourcenanforderungen, die hier auf sie gestellt werden.
    • Die JVM ist nur eine andere Abstraktionsschicht und der Täter
    • Die Müllsammlung ist drauf ?!

    (Ich muss hier merken, dass ich kein Experte auf Java bin!)

    Allerdings würde ich immer noch nicht so weit gehen, um Java intrinsisch langsamer als C oder C ++ aufzurufen. Ich bin sicher, dass Sie viele finden können – ein Benchmarks und Tests auf dem Internet, die eine Sprache mit einer anderen vergleichen, und einige behaupten ein gewisses Maß (aus Stolz und Ego?). Aber diese Tests sind nur spezifische Fälle, in der Regel testen spezifische Aspekte einer größeren Sprache (Hash-Map-Lookup-Performance zum Beispiel!).

    LLVM hatte einen dreiteiligen Blog-Post auf C und warum undefined Verhalten ermöglicht es dem Compiler, immer noch korrekten, aber effizienteren Code zu generieren, um die Laufzeitsicherheit zu überprüfen oder zu entscheiden, dass i + 1 immer nach I kommt, völlig ignorieren die Existenz von Integer-Überlauf Wenn der Programmierer nicht vorsichtig ist, kann dies katastrophale Folgen haben.

    In den Worten von Bjarne selbst in Abstraktion und dem C ++ – Maschinenmodell :

    C ++ wurde entworfen, um eine Systemprogrammiersprache zu sein und wurde für die eingebettete Systemprogrammierung und andere ressourcenbeschränkte Programmtypen seit den frühesten Tagen verwendet.

    Als solches glaube ich, dass C und C ++ weiter als Java geschoben werden können, weil dieses undefinierte Verhalten und weniger Einschränkungen darauf gelegt werden. (Und es gibt auch die Inline Montage Bit, aber das ist nicht genau C!)

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.