繁体   English   中英

在Android上以Java或C / C ++解码Airplay数据包

[英]Decoding Airplay Packets in Java or C/C++ on Android

我目前正在为Android应用程序的子部分开发AirPlay接收器。 我正在使用以下框架:

https://github.com/pentateu/DroidAirPlay

虽然这在某些中端设备(例如miPad)上效果很好,但我们需要让它在低规格的自定义设备上运行。 定制设备以比miPad慢10倍至20倍的速度解码airplay数据包。 结果,音频分组失去时间同步,并且由于解码分组所花费的时间,音频永远无法重新同步。

我在Play商店中研究了其他一些airplay接收器应用程序,从中可以看出,它们往往基于Shairport( https://github.com/abrasive/shairport )来实现airplay接收器方面的功能。

**注意:**基于Shairport的框架似乎在低端设备上没有出现同步问题。

除了使用Java编写之外,我使用的框架很大程度上基于Shairport框架。

对于解码数据,C / C ++是否比Java优越?

如果是这样,是否可以使用NDK通过C或C ++实现来指导DroidAirPlay框架的解码部分,从而大大提高性能?

提前致谢

马特

尽管Java确实可以编译为在虚拟机上运行的字节码,但它不一定比本机编译的可执行文件(无论是否为C / C ++)要慢(或快)。 这完全取决于程序!

在这种情况下,Java的运行速度可能有多种原因:

  • 解码实现可能只是编码/优化不佳? (这不是Java的真正错)
  • Java编译器可能会为JVM生成次优代码。
  • 对于此处的速度/资源要求,某些Java语言结构太慢了。
  • JVM只是另一个抽象层和元凶
  • 垃圾收集在里面吗?

(我必须在这里指出,我不是Java专家!)

但是,我仍然称呼Java 本质上比C或C ++ 我敢肯定,您可以在互联网上找到许多基准测试,将一种语言与另一种语言进行比较,有些基准和测试在一定程度上声称(出于骄傲和自我?)。 但是这些测试只是特定情况,通常会测试较大语言的特定方面 (例如,哈希映射查找性能!)。

LLVM在C上有一个由三部分组成的博客文章 ,为什么未定义的行为使编译器能够生成仍然正确但更有效的代码,却以推断运行时安全性检查或判定i + 1 总是紧随i之后为代价,而完全忽略了i的存在整数溢出。 如果程序员不小心,可能会造成灾难性的后果。

用Bjarne本人在Abstraction和C ++机器模型中所说的话:

C ++被设计为一种系统编程语言,并且自最早以来就已用于嵌入式系统编程和其他资源受限的编程类型。

因此,我相信C和C ++可以比Java进一步发展,因为这种不确定的行为并且对其施加的限制更少。 (还有内联汇编位,但严格来说不是C!)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM