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
- Android Tests: Stubbing Out Retrofit con Mockito
- Obtención de todos los registros de sqlite android
- llamada a Bitmap.compress no devuelve - y ninguna excepción
- ¿Cómo usar sockets UDP en android?
- ¿Qué algoritmos hash están disponibles en Android?
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
- Página de detalles de las aplicaciones de lanzamiento de Android
- Cómo descomprimir un archivo protegido con contraseña creado por Linux, utilizando Java
- Android se conecta al servidor con certificado autenticado
- Android java.net.UnknownHostException: Host no resuelto (pregunta de estrategia)
- Cómo borrar la memoria del montón de eclipse
- Actualizar el fragmento ListView cuando no está enfocado
- ¿Tiene handler.post (runnable) iniciar un nuevo subproceso?
- ¿Cómo se repite una imagen sólo verticalmente en android?
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!)
- Java.net.BindException: error de enlace: EADDRINUSE (Dirección ya en uso)
- Contenido de URL desconocido: // downloads / my_downloads