如何使用 Java 从网络摄像头获取视频和音频流?

Posted

技术标签:

【中文标题】如何使用 Java 从网络摄像头获取视频和音频流?【英文标题】:How to get video and audio streams from web cameras with Java? 【发布时间】:2011-02-01 06:55:26 【问题描述】:

如何使用 Java(以跨平台方式)从网络摄像头获取视频和音频流?

例如,我们有一台带有 3-4 个 USB 网络摄像头的计算机;我们想要获取他们的流并让它们在用户界面中可见。我们怎么能做这样的事情呢?我需要一个简单应用程序的代码,它可以在计算机上找到所有摄像头,让我们选择要观看的摄像头。有哪位可以分享一下吗?

【问题讨论】:

【参考方案1】:

使用java media framework JMF 或FMJ

Here 是 JVM 的示例

【讨论】:

【参考方案2】:

我看到您对解决方案需要“纯”java 的评论,但这真的“几乎”不可能。您将需要使用某种本机库来访问设备,并说明这一点;我建议您将 Xuggler 视为您的解决方案。 Xuggler 支持 Windows、Mac 和 Linux,它们还提供用于处理音频和视频的示例代码。最后图书馆是免费的。 网络摄像头捕获示例:http://xuggle.googlecode.com/svn/trunk/java/xuggle-xuggler/src/com/xuggle/xuggler/demos/DisplayWebcamVideo.java

虽然 Xuggle 没有麦克风捕获的示例,但您可以在邮件列表中找到示例,或者您可以使用由 packet-mulitbroadcaster 项目编写的代码,该项目位于此处:https://code.google.com/p/packet-multibroadcaster/

【讨论】:

其实这里有一篇关于抓屏和麦克风的帖子:groups.google.com/group/xuggler-users/browse_thread/thread/…【参考方案3】:

你可以试试my solution。它使用 OpenCV 捕获图像并使用码头服务器通过 WebSocket 传输图像。该示例具有三个类,并且很容易理解。 现在我只能发送视频,但我也在处理音频。

【讨论】:

通过添加一些源代码来改进你的答案。链接将来可能会损坏 你也完成了音频 @Kanaris007 我看过你的解决方案。为什么让客户端一直向WebSocket发送消息,这样WebSocket就会被触发调用GetBase64Image();。这种技术是否不会引入不必要的延迟,因为 WebSocket 需要等待来自客户端的消息才能捕获下一帧,而客户端也需要等待来自 WebSocket 的数据才能向 WebSocket 发送另一条消息?为什么不直接在带有Thread.sleep() 的while 循环中调用这个方法,让客户端在ws.onopen() 函数中只发送一次消息?【参考方案4】:

我会使用弹性。它可以相对容易地与java后端集成。

更新:

需要纯 Java

那么您应该考虑 JavaFX 解决方案。我不是 javafx 方面的专家,我只编写了一些基本的测试应用程序,但我确信这是用 pure java 解决所描述问题的现代方法。

【讨论】:

bugaga...=) 是的 - 现代方式...或者您建议将视频流从 Flash 发送到 java 进行编码,而 JAVA 可以自己处理它只是为了好玩?=)跨度> @Ole Jak:你不同意哪一部分?您不同意闪存(flex)解决方案由于闪存更受欢迎而被计算得更好吗?或者您不同意 JavaFX 解决方案比基于小程序的解决方案更好吗?如果你知道答案,就不要问问题。 -1. 1) 我不同意将数据从闪存发送到 java,因为它需要时间(您需要以旧的客户端 - 服务器方式对其进行 bild,并通过 http 或套接字继续打磨数据 -不需要开发时间花费))2)JavaFX - 请举一个例子(带有源代码)。 3)

以上是关于如何使用 Java 从网络摄像头获取视频和音频流?的主要内容,如果未能解决你的问题,请参考以下文章

从网络摄像头java录制音频和视频

使用 opencv 和 pyaudio 从网络摄像头录制视频和音频

如何从相机(或网络摄像头)在 python 中捕获视频(和音频)

C# 如何采集 视频和音频 如何调用摄像头获取图片

如何减少延迟 - 来自网络摄像头的 VLC 流式传输

网络摄像头如何按需推流?