⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 captureutil.java

📁 一个初级的远程视频系统的代码
💻 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 + -