java - 基于 Java 的视频播放器是否足够快?

标签 java jvm audiovideoplayback

<分区>

我一直在寻找基于 Java 的视频播放器,不,我不需要它。只是为了看看是否有 Java 视频播放器,以及有多少。令我大吃一惊的是,我什么也没找到。至少没有任何流行的,如 VLC,WMP 等。我认为这些播放器有一些 Java 替代品。

很明显,我发现很多说法是 Java 对玩家来说太慢了。根据我的阅读,它可以分为 2 个子问题:

首先,编写 Java 的人对视频解码来说太慢了。但是自从开始接触Java之后,我一直觉得它的速度其实还是很不错的。当热 JVM 的性能几乎与 C++ 编写的程序一样好时,我发现了许多基准测试。真的很喜欢。我认为这是因为那些基准算法很小而且重复,所以 JVM 准备了那些编译的代码并且从那里它很快。也许在更大的程序中,由于动态编译,它实际上会慢得多。我真的不知道。但是由于 Java 是由 JVM 编译成 native 代码的,所以与速度真正相关的是多少代码以及它预编译的速度,对吧?当然还有其他差异,但最大的差异是实际编译。

其次,人们写道他们有用 C++ 编写的视频解码器并通过 JNI 获取图片数据。但他们说 Java 太慢了,甚至无法绘制那些 30 FPS 甚至 HD Ready 图像。但为什么?我一直认为 JVM 使用最快的方法在操作系统中获取其窗口,而不是在内部操作其内容。如果我在 JVM“预热”时强调 Java 足够快(意味着像 C++),那么显示图像的问题在哪里?在这种情况下,JVM 所要做的就是将数组写入操作系统特定的显示输出,对吗?

那么,是 Java 真的很慢,还是我遗漏了什么?用纯 Java 编写的全速(或几乎全速)视频播放器是否可能?如果不是,为什么?谢谢。

最佳答案

“video playback java”的第三个 google hit 似乎是相关的: http://blog.pirelenito.org/2008/08/java-movie-playback-jogl-fobs4jmf/

我对这个主题还不够熟悉,无法给出明确的答案,但我可以就您提出的某些要点进行扩展:

But since Java is compiled into native code by JVM, all it really matters with speed is how much code and how fast it precompiles, right? Of course there are other differences, but the biggest one would be the actuall compilation.

有几点我不会立即忽略。一方面,Java 规范要求在每次访问数组元素之前,运行时必须检查索引是否有效,即 0 <= index && index < array.length。 .我想视频解码将大量使用数组,因此 Java 数组可能不是该任务的最佳选择。

But they say Java is too slow to even paint those 30 FPS even HD Ready images. But why? I always thought that JVM uses the fastest method available to get its window in OS, and than manipulating its content internally. And if I pressume Java is fast enough (meaning C++ like) when JVM is "warmed", where is the problem with displaying images? all JVM has to do in that case is to write array to OS specific display output, right?

咳咳……我不会将 Java 2D API 的默认渲染器称为高效的。至少在我的计算机上,通过 JOGL 直接调用 Open GL 比使用 JDK 提供的 API 效率最高(大约 10 倍)。我怀疑工作中软件和硬件渲染之间的差异......但这主要不是语言的错误,而是它的标准库的错误。任何头脑正常的人都不会在没有硬件加速的情况下制作高性能图形,无论使用何种编程语言。

此外,渲染通常不仅仅是复制数组,例如缩放、色彩空间转换和缓冲(以避免撕裂)。

底线:我认为可以用 Java 进行视频播放,但它很可能需要使用 native 库来访问硬件加速,并且可能比纯 native 解决方案效率低一些。

关于java - 基于 Java 的视频播放器是否足够快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6404109/

相关文章:

c++ - 使用 Media Foundation 进行无缝视频播放

java - 使用 JDT 以编程方式格式化源代码

java - 我如何使用 java、RestAssured 测试 Web 服务自动替换 Json 对象文件中的两个单独的 ID

java - 如何限制每个线程的 Java 堆栈大小?

java - 是否可以在没有外部程序的情况下用 Java 编译成机器码?

java - 空指针检查顺序

Java : Method return Issue

Java(Java声音): Is "clip.play()" an expensive call?

c# - 通过 Microsoft.DirectX.AudioVideoPlayback 显示对视频播放的控制

actionscript-3 - 使用AS3录制和播放 Action