网络摄像头检测是否仍然支持 vlcj-4.7.3
Is webcam detection still supported vlcj-4.7.3
是否仍然支持网络摄像头检测?
MediaDiscovererTest.java 文件似乎没有检测到任何捕获设备。 (win/mac)
在我看来,设备检测在 MAC webcam-capture driver for vlcj
上与早期版本的 vlcj 一起使用
...
MediaPlayerFactory mediaPlayerFactory = createMediaPlayerFactory();
MediaDiscoverer videoMediaDiscoverer = mediaPlayerFactory.newVideoMediaDiscoverer();
MediaList videoDeviceList = videoMediaDiscoverer.getMediaList();
List<MediaListItem> videoDevices = videoDeviceList.items();
...
VLC 能够检测到捕获设备。
在此先感谢您的帮助。
#edit1
在vlcj-4.7.3中使用下面的代码似乎没有return网络摄像头。但也许我错过了什么。
MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory();
List<MediaDiscovererDescription> videoDevices = mediaPlayerFactory.mediaDiscoverers().discoverers(MediaDiscovererCategory.DEVICES);
#edit 2
当我运行以下代码时;
List<MediaDiscovererDescription> discoverers = factory.mediaDiscoverers().discoverers(MediaDiscovererCategory.DEVICES);
在 Windows 10 下,我得到以下列表:(无视频捕获)
[MediaDiscovererDescription[name=disc,longName=Discs,category=DEVICES],
MediaDiscovererDescription[name=disc,longName=Discs,category=DEVICES]
在 MacOs 12.4 上我得到一个空列表...
#edit 3
捕获设备检测仅在linux
下有效
使用 vlcj-4.7.x,发现视频捕获设备的 API 如下所示:
List<MediaDiscovererDescription> discoverers = factory.mediaDiscoverers().discoverers(MediaDiscovererCategory.DEVICES);
当我 运行 那个代码时,我看到这样的东西:
[DEVICES ] v4l "Video capture"
[DEVICES ] disc "Discs"
[DEVICES ] xcb_apps "Screen capture"
[DEVICES ] mtp "MTP devices"
[DEVICES ] pulse "Audio capture"
在这种情况下,在 Linux,发现者 ID 是“v4l”。
现在您在发现者描述列表中找到了“v4l”发现者。一旦你有了那个发现者实例,你就可以调用它的方法来获取实际的捕获设备。
如果您事先知道发现者 ID(在所有(?)情况下您都会知道),您可以改为这样做:
MediaDiscoverer discoverer = factory.mediaDiscoverers().discoverer("v4l");
然后您从该发现者处获取媒体列表并将侦听器添加到该媒体列表。
最后你必须启动()发现者。
当捕获设备为added/removed(或'detected')时将触发侦听器。
MediaList list = discoverer.newMediaList();
list.events().addMediaListEventListener(new MediaListEventAdapter() {
@Override
public void mediaListItemAdded(MediaList mediaList, MediaRef item, int index) {
System.out.println(name + ": added " + item);
}
@Override
public void mediaListItemDeleted(MediaList mediaList, MediaRef item, int index) {
System.out.println(name + ": deleted " + item);
}
});
discoverer.start();
vlcj MediaDiscovererTest
class 展示了所有这些。
MediaRef 实例是捕获设备的 MRL,然后您可以使用它来构建菜单 select 以播放其中之一或其他内容。
是否仍然支持网络摄像头检测? MediaDiscovererTest.java 文件似乎没有检测到任何捕获设备。 (win/mac) 在我看来,设备检测在 MAC webcam-capture driver for vlcj
上与早期版本的 vlcj 一起使用...
MediaPlayerFactory mediaPlayerFactory = createMediaPlayerFactory();
MediaDiscoverer videoMediaDiscoverer = mediaPlayerFactory.newVideoMediaDiscoverer();
MediaList videoDeviceList = videoMediaDiscoverer.getMediaList();
List<MediaListItem> videoDevices = videoDeviceList.items();
...
VLC 能够检测到捕获设备。
在此先感谢您的帮助。
#edit1
在vlcj-4.7.3中使用下面的代码似乎没有return网络摄像头。但也许我错过了什么。
MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory();
List<MediaDiscovererDescription> videoDevices = mediaPlayerFactory.mediaDiscoverers().discoverers(MediaDiscovererCategory.DEVICES);
#edit 2
当我运行以下代码时;
List<MediaDiscovererDescription> discoverers = factory.mediaDiscoverers().discoverers(MediaDiscovererCategory.DEVICES);
在 Windows 10 下,我得到以下列表:(无视频捕获)
[MediaDiscovererDescription[name=disc,longName=Discs,category=DEVICES],
MediaDiscovererDescription[name=disc,longName=Discs,category=DEVICES]
在 MacOs 12.4 上我得到一个空列表...
#edit 3
捕获设备检测仅在linux
下有效使用 vlcj-4.7.x,发现视频捕获设备的 API 如下所示:
List<MediaDiscovererDescription> discoverers = factory.mediaDiscoverers().discoverers(MediaDiscovererCategory.DEVICES);
当我 运行 那个代码时,我看到这样的东西:
[DEVICES ] v4l "Video capture"
[DEVICES ] disc "Discs"
[DEVICES ] xcb_apps "Screen capture"
[DEVICES ] mtp "MTP devices"
[DEVICES ] pulse "Audio capture"
在这种情况下,在 Linux,发现者 ID 是“v4l”。
现在您在发现者描述列表中找到了“v4l”发现者。一旦你有了那个发现者实例,你就可以调用它的方法来获取实际的捕获设备。
如果您事先知道发现者 ID(在所有(?)情况下您都会知道),您可以改为这样做:
MediaDiscoverer discoverer = factory.mediaDiscoverers().discoverer("v4l");
然后您从该发现者处获取媒体列表并将侦听器添加到该媒体列表。
最后你必须启动()发现者。
当捕获设备为added/removed(或'detected')时将触发侦听器。
MediaList list = discoverer.newMediaList();
list.events().addMediaListEventListener(new MediaListEventAdapter() {
@Override
public void mediaListItemAdded(MediaList mediaList, MediaRef item, int index) {
System.out.println(name + ": added " + item);
}
@Override
public void mediaListItemDeleted(MediaList mediaList, MediaRef item, int index) {
System.out.println(name + ": deleted " + item);
}
});
discoverer.start();
vlcj MediaDiscovererTest
class 展示了所有这些。
MediaRef 实例是捕获设备的 MRL,然后您可以使用它来构建菜单 select 以播放其中之一或其他内容。