📄 captureutil.java
字号:
package video.client;
import javax.media.*;
import javax.media.protocol.*;
import javax.media.format.*;
import javax.media.control.*;
import java.util.Vector;
import java.awt.*;
import com.sun.media.ui.PlayerWindow;
public class CaptureUtil {
public static DataSource getCaptureDS(VideoFormat vf, AudioFormat af) {
DataSource dsVideo = null;
DataSource dsAudio = null;
DataSource ds = null;
// Create a capture DataSource for the video为视频创建一个捕获的数据源
// If there is no video capture device, then exit with null如果没有捕获视频的设备就退出
if (vf != null) {
dsVideo = createDataSource(vf);//创建视频数据源
if (dsVideo == null)
return null;
}
if (af != null) {
dsAudio = createDataSource(af);//创建音频数据源
}
// Create the monitoring datasource wrapper创建监听数据源的封装
if (dsVideo != null) {
//dsVideo = new MonitorCDS(dsVideo);
if (dsAudio == null)
return dsVideo;
ds = dsVideo;
} else if (dsAudio != null) {
return dsAudio;
} else
return null;
// Merge the data sources, if both audio and video are available
try {
ds = Manager.createMergingDataSource(new DataSource [] {
dsAudio, dsVideo
});
} catch (IncompatibleSourceException ise) {
return null;
}
return ds;
}
static DataSource createDataSource(Format format) {
DataSource ds;//数据源
Vector devices;//所有设备的表
CaptureDeviceInfo cdi;//捕获设备信息
MediaLocator ml;//媒体定位器
// Find devices for format
devices = CaptureDeviceManager.getDeviceList(format);//得到类型为format的设备的清单,存放在表devices中
if (devices.size() < 1) {
System.err.println("! No Devices for " + format);
return null;
}
// Pick the first device选取第一个设备
cdi = (CaptureDeviceInfo) devices.elementAt(0);
ml = cdi.getLocator();//返回一媒体定位器从而为设备创建数据源
try {
ds = Manager.createDataSource(ml);//通过媒体定位器创建数据源
ds.connect();//开设一个连接,通向媒体定位器所描述的数据源
if (ds instanceof CaptureDevice) {
setCaptureFormat((CaptureDevice) ds, format);
}
} catch (Exception e) {
System.err.println(e);
return null;
}
return ds;
}
static void setCaptureFormat(CaptureDevice cdev, Format format) {
FormatControl [] fcs = cdev.getFormatControls();
if (fcs.length < 1)
return;
FormatControl fc = fcs[0];
Format [] formats = fc.getSupportedFormats();
for (int i = 0; i < formats.length; i++) {
if (formats[i].matches(format)) {
format = formats[i].intersects(format);
System.out.println("Setting format " + format);
fc.setFormat(format);
break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -