使用Java和jmf从网络摄像头捕获实时视频
为了使用java和jmf从web捕获实时视频,我编写了以下代码,我还插入了usb网络摄像头,但它提供了使用Java和jmf从网络摄像头捕获实时视频,java,jmf,Java,Jmf,为了使用java和jmf从web捕获实时视频,我编写了以下代码,我还插入了usb网络摄像头,但它提供了java.util.NoSuchElementException 谁能帮帮我 import java.util.Vector; import javax.media.*; import javax.media.format.AudioFormat; import javax.media.format.VideoFormat; import javax.media.protocol.DataSou
java.util.NoSuchElementException
谁能帮帮我
import java.util.Vector;
import javax.media.*;
import javax.media.format.AudioFormat;
import javax.media.format.VideoFormat;
import javax.media.protocol.DataSource;
import javax.media.CaptureDeviceInfo;
import javax.media.format.YUVFormat;
import javax.media.protocol.FileTypeDescriptor;
public class CamRecorder {
static VideoFormat videoFormat;
static AudioFormat audioFormat;
static CaptureDeviceInfo videoDevice;
static CaptureDeviceInfo audioDevice;
public static void main(String[] args) {
try {
Vector deviceList = CaptureDeviceManager.getDeviceList(new YUVFormat()); //get all media devices
CaptureDeviceInfo device = (CaptureDeviceInfo) deviceList.firstElement(); //in this computer the only capture device is in=built webcam stays at 0th position
Format[] formats = device.getFormats(); //get all formats
for (int x = 0; x < formats.length; x++) {
if (formats[x] != null && formats[x] instanceof VideoFormat) {
videoFormat = (VideoFormat) formats[x]; //take the video format
videoDevice = device;
}
if (formats[x] != null && formats[x] instanceof AudioFormat) {
audioFormat = (AudioFormat) formats[x]; //take the audio format
//audioDevice = device;
}
}
//create data sources
DataSource videoDataSource = Manager.createDataSource(device.getLocator());
deviceList = CaptureDeviceManager.getDeviceList(new AudioFormat(null)); //get all media devices
device = (CaptureDeviceInfo) deviceList.firstElement();
DataSource audioDataSource=Manager.createDataSource(device.getLocator());
DataSource[] dArray=new DataSource[2];
dArray[0]=videoDataSource;
dArray[1]=audioDataSource;
DataSource mixedDataSource = Manager.createMergingDataSource(dArray);
//format for output
Format[] outputFormats=new Format[2];
outputFormats[0]=new VideoFormat(VideoFormat.YUV);
outputFormats[1]=new AudioFormat(AudioFormat.LINEAR);
//output type
FileTypeDescriptor outputType=new FileTypeDescriptor(FileTypeDescriptor.MSVIDEO);
//settingup Processor
ProcessorModel processorModel=new ProcessorModel(mixedDataSource, outputFormats, outputType);
Processor processor=Manager.createRealizedProcessor(processorModel);
//settingup sink
DataSource outputDataSource=processor.getDataOutput();
MediaLocator destination=new MediaLocator("file:.\\testcam.avi");
DataSink dataSink=Manager.createDataSink(outputDataSource, destination);
dataSink.open();
//start sink + processor
Thread.sleep(4000);
dataSink.start();
processor.start();
Thread.sleep(4000);
dataSink.close();
processor.stop();
processor.close();
} catch (Exception ex) {
System.out.println(ex);
}
}
import java.util.Vector;
导入javax.media.*;
导入javax.media.format.AudioFormat;
导入javax.media.format.VideoFormat;
导入javax.media.protocol.DataSource;
导入javax.media.CaptureDeviceInfo;
导入javax.media.format.YUVFormat;
导入javax.media.protocol.FileTypeDescriptor;
公共类摄像机{
静态视频格式;
静态音频格式;
静态捕获设备信息视频设备;
静态捕获设备信息音频设备;
公共静态void main(字符串[]args){
试一试{
Vector deviceList=CaptureDeviceManager.getDeviceList(新的YUVFormat());//获取所有媒体设备
CaptureDeviceInfo设备=(CaptureDeviceInfo)deviceList.firstElement();//在此计算机中,唯一的捕获设备是内置的=网络摄像头保持在第0位
Format[]formats=device.getFormats();//获取所有格式
对于(int x=0;x
}是的,它非常完美,但是安装jmf并正确设置路径和类路径 jmf安装:
请发布完整的StackTrace