我正在创建一个用 Java 编写的 VoIP 软电话,目前我已经实现了 G.711 编解码器(全部通过 Java,没有本机代码)。
我想扩展可用的编解码器,尽管在我所见的任何地方,比如像 Jitsi 这样的项目,而不是用 Java 编写算法,它是用 C 编写的,而 JNI 用于调用它。我对C知之甚少,对JNI一无所知,所以我不太急于学习它们。此外,我喜欢不依赖本机代码运行的纯 Java 实现的想法。
我的问题是:我确信我找不到 Java 实现是有充分理由的,但我对编解码器的了解还不够,不知道是什么原因。那么,当另一个像 G.711 这样的编解码器运行良好时,为什么没有任何 G.722 的 Java 实现呢?
此外,如果本机代码是唯一的方法,那么从哪里开始呢?我已经尝试将 G.722.c 代码从 ITU-T 翻译成 Java,但在有点头疼之后我停止了(也是因为我的 G.711 翻译工作正常)。我研究了 Xuggle,但构建项目是一场噩梦,我不能使用 GPL 版本(也没有方便的 Javadoc)。
FFMpeg 看起来对它提供的所有编解码器都很有希望,但我不确定是否要编写自己的 JNI 包装器,而且我看过的那些要么难以实现(Xuggle),要么似乎已经过时(FMJ) .
底线:我想实现新的编解码器,但我想挑选哪些编解码器。当我只想拥有 2 或 3 个音频编解码器时,我不需要整个 AV 库。占用空间小,并且尽可能地使用纯 Java。