纯javag.722实现

纯javag.722实现,java,audio,codec,Java,Audio,Codec,我正在创建一个用Java编写的VoIP软电话,目前我已经实现了G.711编解码器(全部通过Java实现,没有本地代码) 我想扩展可用的编解码器,尽管我到处都可以看到,比如像Jitsi这样的项目,而不是用Java编写算法,而是用C编写,JNI用来调用它。我对C知之甚少,对JNI一无所知,所以我并不急于学习它们。此外,我喜欢不依赖本机代码运行的纯Java实现的想法 我的问题是:我确信有一个很好的理由我没有找到一个Java实现,但我对编解码器的了解还不够,不知道原因是什么。那么,当另一个像G.711这

我正在创建一个用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翻译工作正常)。我研究过Xugle,但构建项目是一场噩梦,我不能使用GPL版本(也没有方便的Javadoc)

FFMpeg看起来对它提供的所有编解码器都很有希望,但我不确定是否要编写自己的JNI包装器,我所看到的那些包装器要么难以实现(Xuggle),要么似乎已经过时(FMJ)

一句话:我想实现新的编解码器,但我想选择哪一种。当我只想要2或3个音频编解码器时,我不需要整个AV库。占用空间小,尽可能纯Java。

我已经在IAX软电话上用GSM(非常小的占用空间)纯Java实现了它,您正在实现SIP吗?是开源吗?是否基于任何已知的实现(针对前对等方?)


最佳问候

编解码器往往对性能至关重要,并且具有实时性要求,这两个要求在基于虚拟机的运行时更难实现

当本机实现时,编解码器能够利用通用VM无法利用的CPU特定硬件加速。显而易见的例子是使用SIMD指令实现过滤器和FFT,以及专门设计用于加速位流处理的指令(例如,定位寄存器中的第一个1或0位)


在大多数平板电脑和手机中使用的ARMv7 CPU上,这是一个非常重要的问题。在这些平板电脑和手机中,浮点运算的FPU和NEON(SIMD)单元的性能存在巨大差异

好的,这就是为什么要使用本机代码而不是JVM的重点。对于Java,这可能将使用JNI。那么,我应该继续尝试让Xuggle工作,还是有其他更活跃的音频编解码器库呢?我从同行那里得到了很多灵感,它使用了JAIN-SIP(gov.nist参考实现)。然而,它不是开源的,这就是为什么我必须小心使用什么库的原因。通常情况下,我自己编写比处理许可证更容易。我在业余时间一直在尝试制作一款真正有用的voip电话,例如,我尝试了同龄人,通话延迟使其难以使用,我还尝试了Asterisk Java Iax,因为它在项目中不起作用我有一个支持GSM和g711的工作版本,但有一些错误,使其不稳定的生产。。。没有重做的工作,因为我无法修复这些错误的一些,如果有兴趣检查这个让我知道