在Mac Os X上使用Java获取网络摄像头流

7
我想获取我的Macbook(集成的iSight网络摄像头)的网络摄像头流。
我使用Java,不了解Objective-C,因此我正在寻找“全Java”解决方案。我找到了一些类示例,但它们是在2005年制作的,而且在我的系统上不起作用。
4个回答

6
我现在也遇到了同样的问题。我正在使用VLCJ进行项目开发,它在Windows、Linux Mint、Linux Ubuntu和Mac OSX Lion上都能完美运行。正如您可能已经了解到的那样,VLCJ是围绕libvlc的Java包装器,而VLC播放器也使用它。
问题在于,当您打开VLC播放器的捕获选项时,它会使用可用摄像头(USB连接)填充组合框。但这只是VLC播放器为自己做的事情,它并不为此提供API。如果您没有使用VLCJ将某个摄像头的ID传递给它,VLC将使用系统默认摄像头。我使用VLCJ从USB连接的摄像头或桌面流式传输到文件。
我必须找到一种方法来“扫描”我的系统上的USB摄像头,这是特定于操作系统的。
在Windows上,我使用DirectShowJava
在Linux上,您只需要读取/dev/video*以获取可用摄像头,如果您想向用户显示一些“用户友好的名称”,则可以使用video4linux4java

我还没有尝试第三个,也是你最感兴趣的一个,但我会用这个来尝试:stack, example

如果libvlc可以提供这个功能就更好了,但它没有,所以我必须使用另外3个API(针对3个操作系统),每个API都可以像VLCJ一样做到(只是在该平台上),我正在使用它们来读取设备。

编辑:当前官方的VLC版本是1.1.x,对于Mac相机的支持有限。你只能从Mac的默认相机(iSight、FaceTime内置)无声播放流。VLC 1.2.0即将发布,并且它将具有更好的Mac支持(可以识别其他连接的相机、桌面流和音频)。你可以在 VideoLAN 论坛上查看我的thread。我下载了Mac版的VLC 1.2.0-git版本,它看起来很酷,真正具有“Mac feel”。你可以从here下载它。但请注意,这是开发版本,会经常崩溃。

@Matthieu 我刚刚编辑了我的答案,加入了一些Mac OS X的具体细节,希望能为您节省一些时间 :) - vale4674

1

我读到了关于Quicktime的内容:“新版本还忽略了提供一个组件来显示从捕获设备(如网络摄像头或摄像机)输入的视觉预览。”看起来Java对于苹果并不是真正的问题...另请参见:http://onjava.com/pub/a/onjava/2003/10/29/qtj-returns.html?page=last(在“其他更改”中)。至于VideoLAN,似乎无法从网络摄像头进行捕获。 - Matthieu Napoli
是的,我不知道QTJava已经被弃用了,抱歉: http://lists.apple.com/archives/quicktime-java/2008/Jun/msg00018.html - trashgod
VLC应该能够从网络摄像头中捕获...文件->打开捕获设备。 - rogerdpack

0
尝试过JMF吗?你可以从这里开始。

1
似乎这是为Windows或Solaris的网络摄像头设计的,没有提到OS X或Mac。 - Matthieu Napoli

0

我发现了OpenIMAJ Core视频捕获库,它在我的MacBook、Windows PC和Linux服务器上都运行良好。缺点是它有很多依赖项。

因此,我修改了OpenIMAJ代码,并制作了另一个包,不需要那些疯狂的功能。您可以从我的网站获取我的代码和演示应用程序(开源BSD许可证):http://www.sleepingdumpling.com/blog/download/jvideoinput/

感谢OpenIMAJ和贡献者。

所以这并非不可能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接