📄 datasource.java
字号:
package com.sun.media.protocol.screen;
import javax.media.Time;
import javax.media.MediaLocator;
import javax.media.protocol.*;
import java.io.IOException;
// 数据源类:从采集屏幕设定区域图像作为实时数据源
public class DataSource extends PushBufferDataSource {
protected Object [] controls = new Object[0];
protected boolean started = false;
protected boolean connected = false;
protected LiveStream stream = null;
public DataSource() {}
/***************************************************************************
* 下面这个函数实现了 PushBufferDataSource 类的抽象方法
***************************************************************************/
// 得到数据流
public PushBufferStream [] getStreams() {
LiveStream [] streams = null;
streams = new LiveStream[1];
stream = streams[0] = new LiveStream(getLocator()); // 初始化实时数据流
return streams;
}
/***************************************************************************
* 下面几个函数实现了 DataSource 类的抽象方法,因为public abstract class PushBufferDataSource extends DataSource
***************************************************************************/
public String getContentType() { // 得到数据源数据类型的描述
if (!connected){
System.err.println("Error: DataSource not connected");
return null;
}
String contentType = "raw";
return contentType;
}
// 连接上数据源
public void connect() throws IOException {
if (connected) return;
connected = true;
}
// 断开数据源
public void disconnect() {
try {
if (started) stop();
}
catch (IOException e) {}
connected = false;
}
// 开始数据传送
public void start() throws IOException {
if (!connected) // 如果没有连上数据源,则报错
throw new java.lang.Error("DataSource must be connected before it can be started");
if (started) return;
started = true;
stream.start(true); // 通知开始采集
}
// 停止数据传送
public void stop() throws IOException {
if ((!connected) || (!started))
return;
started = false;
stream.start(false); // 通知停止采集
}
/***************************************************************************
* 下面几个函数是为实现 Controls 接口,因为public abstract class DataSource extends java.lang.Object implements Controls,Duration
***************************************************************************/
// 得到所有控制器
public Object [] getControls() {
return controls;
}
// 得到特定类型的控制器
public Object getControl(String controlType) {
return null;
}
/***************************************************************************
* 下面这个函数实现了 Duration 接口,因为public abstract class DataSource extends java.lang.Object implements Controls,Duration
***************************************************************************/
// 得到播放持续时间
public Time getDuration() {
Time duration = DURATION_UNBOUNDED; // 实时媒体的播放时间没有边界
return duration;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -