java - Java 是否足够快以进行实时屏幕共享?

标签 java ffmpeg red5 xuggle

在过去的几个月里,我和一个开发人员一直在开发一个屏幕共享小程序,它可以流式传输到 Wowza 或 Red5 等媒体服务器,但无论我们做什么,我们都有大约 5 秒的延迟,这太长了对于人们相互交互的实时应用程序。我们试过 xuggle,不同的编码器,不同的播放器,不同的网络,不同的媒体服务器,甚至本地流媒体,都有明显的延迟。

所以,我开始怀疑……

Java 是否足够快以进行实时屏幕共享?

我看过很多用Java写的录屏小程序,但是没有一个是直播的。现场完成的一切,例如 GoToMeeting,似乎都使用 C++。我想也许是有原因的。

这不是压缩问题。使用 ScreenVideo,我们将一个小时长的流压缩到大约 100 MB,而且我们有足够的带宽。处理器在执行压缩时也没有过载,但似乎花费了太多时间。我们从 BigBlueButton 中提取的一些代码得到了最好的结果,但延迟仍然很糟糕。

另一方面,流式传输网络摄像头既漂亮又活泼。几乎没有延迟。所以,问题出在小程序上。

我唯一能想到的其他想法是以某种方式用 Java 模拟网络摄像头。不确定那样会不会更快。

想法?还是我应该放弃 Java 而用 C++ 来做?我不想那样做,因为那样我就必须为不同的平台创建不同的版本,但如果这是唯一的方法,那就是唯一的方法。

最佳答案

许多视频流子系统会特意进行缓冲,以便连接中断不会影响视频,但这在录制的媒体场景中更有意义。

确保这些系统已关闭或关闭缓冲。

此外,虽然这并不完全科学,但您可以在传出和传入计算机上运行类似 wireshark 的应用程序,并尝试查看流量 实际需要多长时间。如果速度非常快,那么我会更认真地考虑缓冲问题。

如果你在 Windows 上,也许只是运行任务管理器/网络选项卡就可以证明这一点(而不是安装 wireshark 之类的东西,这并不困难......只是想建议一种快速检查方法)

关于java - Java 是否足够快以进行实时屏幕共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9643503/

相关文章:

java - JTabbedPane 带有获取 Pane 的按钮

java - 为什么 JTabbedPane 的 ChangeListener 会随着主 JFrame 的启动而加载?

ffmpeg 如何将 header 信息添加到 pcm 中?

java - 列出 Red5 可用的流

java - red5服务器未启动

ios - 用于连接 iOS 中的 Red5 服务器的免费客户端库

java - 使用 SSHJ 时进行 Sudo 访问

java - 如何动态更改 JFrame 内对 JPanel 的引用?

android - Flutter FFmpeg - [AVFilterGraph @ 0x88f4b300] 没有这样的过滤器 : '"scale'

c++ - FFMPEG实现RTSP客户端,高速播放