带有JMF的网络摄像头的流媒体视频会使Windows 7切换到基本主题



我的Java程序打开了一个网络摄像头流,并将捕获的视频流式传输到Swing组件,但是当我启动它时,它导致Windows切换到Basic主题。这是我的代码的摘录:

String str1 = "vfw:Logitech USB Video Camera:0";
String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
captureDeviceInfo = CaptureDeviceManager.getDevice(str2);
Format[] formats = captureDeviceInfo.getFormats();
for (Format format : formats) {
    System.out.println(format);
}
mediaLocator = captureDeviceInfo.getLocator();
try {
    player = Manager.createRealizedPlayer(mediaLocator);
    player.start();
    Component comp;
    if ((comp = player.getVisualComponent()) != null) {
        playerPanel.add(comp);
        add(playerPanel, BorderLayout.NORTH);
    }

如果我注释掉我添加comp到playerPanel的行,它不会切换到基本主题,所以我认为这就是它出错的地方。据我所知,JMF不再维护,可能与Windows 7 Aero主题不完全兼容。但是,有办法解决这个问题吗?为什么会转换?

既然你说它只发生在你将组件添加到播放器面板(所以当视频可见时),我认为这可能与我曾经使用Media player Classic的问题有关。

从http://www.codecguide.com/faq_mpc.htm

:

Q: Aero被禁用,我的桌面在玩游戏时变成基本模式MPC格式的文件

A:如果您选择了错误的视频,可能会发生这种情况渲染器在MPC选项。Aero与Overlay不兼容混合器。[…]
可能播放器组件使用这个叠加混频器来显示视频。

这个问题的答案是安装网络摄像头驱动程序。我用的是罗技QuickCam Pro 9000,所以我刚从罗技网站下载了驱动程序。显然,如果你使用Windows提供的通用网络摄像头驱动程序,你可以得到我前面描述的行为。

要解决这个问题,请在构造函数中添加以下内容:

Manager.setHint(经理。LIGHTWEIGHT_RENDERER Boolean.TRUE);

您的问题很简单,因为Swing是轻量级的,而默认呈现针对重量级组件。

最新更新