Descodificación de paquetes Airplay en Java o C / C ++ en Android

Actualmente estoy trabajando en un receptor AirPlay para una subparte de una aplicación Android. Estoy utilizando el siguiente marco:

Https://github.com/pentateu/DroidAirPlay

Si bien esto funciona muy bien en algunos dispositivos de gama media como el miPad, tenemos que conseguir que se ejecute en un dispositivo de baja especificación personalizada. El dispositivo personalizado está decodificando los paquetes airplay de 10x a 20x más lento que el miPad. Como resultado, los paquetes de audio pierden sincronización de tiempo y debido al tiempo empleado para decodificar los paquetes, el audio nunca puede volver a sincronizar.

Estaba buscando en algunas aplicaciones receptor receptor de aire en la Play Store y de lo que puedo ver que tienden a estar basado en Shairport ( https://github.com/abrasive/shairport ) para el receptor de aire lado de las cosas.

** Nota: ** los marcos basados ​​en Shairport no parecen sufrir el problema de sincronización en el dispositivo de gama baja.

El marco que estoy utilizando está fuertemente basado en el marco de Shairport aparte de que está escrito en Java.

Para decodificar datos, ¿es C / C ++ muy superior a Java?

Si es así, ¿dirigiría la parte de descodificación del framework DroidAirPlay mediante una implementación C o C ++ utilizando el NDK me daría un gran impulso al rendimiento?

Gracias por adelantado

Mate

Si bien es cierto que Java compila a bytecode que se ejecuta en una máquina virtual, no puede ser necesariamente más lento (o más rápido) que un compilador compilado nativamente, si C / C ++ o no. ¡Todo depende del programa!

Hay varias razones por las que en este caso Java puede ser más lento:

  • La implementación de decodificación podría ser mal codificada / optimizada? (Que no es realmente culpa de Java)
  • El compilador de Java puede generar código subóptimo para la JVM.
  • Algunas de las construcciones de lenguaje de Java son demasiado lentas para las demandas de velocidad / recursos que se le asignan aquí.
  • La JVM es otra capa de abstracción y el culpable
  • La recolección de basura está en él ?!

(Tengo que señalar aquí que no soy un experto en Java!)

Sin embargo, todavía no ir tan lejos como para llamar Java intrínsecamente más lento que C o C + +. Estoy seguro de que usted puede encontrar muchos puntos de referencia y pruebas en Internet comparando un idioma con otro, y algunos hacen afirmaciones a un cierto grado (por orgullo y ego?). Pero esas pruebas son sólo casos específicos, por lo general probando aspectos específicos de un lenguaje más grande (rendimiento de búsqueda de hash-map por ejemplo!).

LLVM tenía un blog de tres partes en C y por qué un comportamiento indefinido permite al compilador generar código aún correcto pero más eficiente a costa de inferir la comprobación de seguridad en tiempo de ejecución o decidir que i + 1 siempre viene después de i, ignorando totalmente la existencia de desbordamiento de enteros. Si el programador no tiene cuidado, esto puede tener consecuencias desastrosas.

En palabras del propio Bjarne en abstracción y del modelo C ++ :

C ++ fue diseñado para ser un lenguaje de programación de sistemas y se ha utilizado para la programación de sistemas embebidos y otros tipos de programación de recursos limitados desde los primeros días.

Como tal, creo que C y C + + puede ser empujado más allá de Java debido a este comportamiento indefinido y menos restricciones puestas en él. (Y también hay el bit de montaje en línea, pero eso no es estrictamente C!)

  • ¿Cómo puedo reproducir un archivo cif encriptado con ExoPlayer?
  • Android Vision Barcode API - leer código QR personalizado con datos binarios
  • Actualizar ArrayList para mostrar nuevos datos en RecyclerView haciendo clic en Spinner Item
  • Eclipse: inhabilita la compilación de archivos XML mientras está en perspectiva de Java
  • ¿Cuál es la convención para nombres de paquetes java sin una asociación de dominio?
  • Color de fondo o imágenes barajando en desplazamiento en recyclerview?
  • Inicializar una aplicación de Android
  • Título de la barra de herramientas primera letra otro color
  • Optimizar las asignaciones de java
  • IllegalBlockSizeException al intentar cifrar y descifrar una cadena con AES
  • ¿Cuál es el tiempo de espera predeterminado de java.net.Socket en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.