java - 纯 Java G.722 实现

标签 java audio codec

关闭。这个问题需要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/

相关文章:

Java 视频播放器

c++ - 解码图像文件的框架

java - 有没有办法部分控制Java并行流的顺序?

html - <bgsound>在Windows 10上的IE11上不起作用

node.js - 记录传入的音频流 Node js

ios - 在后台播放Apple Music

java - Java如何只读取每一行的第二个单词

java - 类型不匹配 : cannot convert from Set<Channel> to Iterable<ICleanable>

java - 用于获取未附加到特定变量的数据的查询 - JPA

mp4 - ISO BMFF 或 MP4 文件中出现 'free' 框的原因是什么?