关闭。这个问题需要details or clarity .它目前不接受答案。
想改进这个问题?通过 editing this post 添加详细信息并澄清问题.
8年前关闭。
Improve this question
我正在创建一个用 Java 编写的 VoIP 软电话,目前我已经实现了 G.711 编解码器(全部通过 Java,没有 native 代码)。
我想扩展可用的编解码器,尽管在我所见的任何地方,比如像 Jitsi 这样的项目,而不是用 Java 编写算法,它是用 C 编写的,而 JNI 用于调用它。我对C知之甚少,对JNI一无所知,所以我不太急于学习它们。此外,我喜欢不依赖 native 代码运行的纯 Java 实现的想法。
我的问题是:我确信我找不到 Java 实现是有充分理由的,但我对编解码器的了解还不够,不知道是什么原因。那么,当另一个像 G.711 这样的编解码器运行良好时,为什么没有任何 G.722 的 Java 实现呢?
此外,如果 native 代码是唯一的方法,那么从哪里开始呢?我已经尝试将 G.722.c 代码从 ITU-T 翻译成 Java,但在有点头疼之后我停止了(也是因为我的 G.711 翻译工作正常)。我研究了 Xuggle,但构建项目是一场噩梦,我不能使用 GPL 版本(也没有方便的 Javadoc)。
FFMpeg 看起来对它提供的所有编解码器都很有希望,但我不确定是否要编写自己的 JNI 包装器,而且我看过的那些要么难以实现(Xuggle)要么似乎已经过时(FMJ) .
底线:我想实现新的编解码器,但我想挑选哪些编解码器。当我只想拥有 2 或 3 个音频编解码器时,我不需要整个 AV 库。占用空间小,并且尽可能地使用纯 Java。
最佳答案
编解码器往往对性能至关重要并且具有实时要求——这两者在基于虚拟机的运行时中都更难实现。
当 native 实现时,编解码器能够利用通用 VM 无法利用的特定于 CPU 的硬件加速。明显的例子是使用 SIMD 指令来实现过滤器和 FFT,以及专门为加速比特流处理而设计的指令(例如,在寄存器中定位第一个 1 或 0 位)。
对于大多数平板电脑和手机中使用的 ARMv7 CPU 来说,这是一个非常大的问题,在浮点运算中,FPU 和 NEON (SIMD) 单元的性能存在巨大差异。
关于java - 纯 Java G.722 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18136965/