📄 rawlivedatasource.java
字号:
/*
* RawLiveDataSource.java
*
* Created on March 20, 2003, 8:56 AM
*/
package gov.nist.media.protocol.live;
import javax.media.Time;
import javax.media.protocol.*;
import java.io.IOException;
/**
* A default data-source created directly from an array of byte
* This Data source allow one to play or play back a buffer filled by RAW
* audio data
*
* @author Jean Deruelle <jean.deruelle@nist.gov>
*
* <a href="{@docRoot}/uncopyright.html">This code is in the public domain.</a>
*/
public class RawLiveDataSource extends PushBufferDataSource {
protected Object [] controls = new Object[0];
protected boolean started = false;
protected boolean connected = false;
protected Time duration = DURATION_UNKNOWN;
protected RawLiveStream [] streams = null;
protected RawLiveStream stream = null;
/**
* Constructs a new instance of RawLiveDataSource
*
*/
public RawLiveDataSource() {
}
/**
* Get the current content type for this stream.
*
* @return The current <CODE>ContentDescriptor</CODE> for this stream.
*/
public String getContentType() {
if (!connected){
System.err.println("Error: DataSource not connected");
return null;
}
return ContentDescriptor.RAW;
}
/**
* The <CODE>connect</CODE> method initiates communication with the source.
*
* @exception IOException Thrown if there are IO problems
* when <CODE>connect</CODE> is called.
*/
public void connect() throws IOException {
if (connected)
return;
connected = true;
}
/**
* The <CODE>disconnect</CODE> method frees resources used to maintain a
* connection to the source.
* If no resources are in use, <CODE>disconnect</CODE> is ignored.
*/
public void disconnect() {
try {
if (started)
stop();
} catch (IOException e) {}
connected = false;
}
/**
* Initiate data-transfer. The <CODE>start</CODE> method must be
* called before data is available.
*(You must call <CODE>connect</CODE> before calling <CODE>start</CODE>.)
*
* @exception IOException Thrown if there are IO problems with the source
* when <CODE>start</CODE> is called.
*/
public void start() throws IOException {
// we need to throw error if connect() has not been called
if (!connected)
throw new java.lang.Error("DataSource must be connected before it can be started");
if (started)
return;
started = true;
stream.start(true);
}
/**
* Stop the data-transfer.
* If the source has not been connected and started,
* <CODE>stop</CODE> does nothing.
*/
public void stop() throws IOException {
if ((!connected) || (!started))
return;
started = false;
stream.start(false);
}
/**
* Obtain the collection of objects that
* control the object that implements this interface.
* <p>
*
* No controls are supported.
* A zero length array is returned.
*
* @return A zero length array
*/
public Object [] getControls() {
return controls;
}
/**
* Obtain the object that implements the specified
* <code>Class</code> or <code>Interface</code>
* The full class or interface name must be used.
* <p>
*
* The control is not supported.
* <code>null</code> is returned.
*
* @return <code>null</code>.
*/
public Object getControl(String controlType) {
try {
Class cls = Class.forName(controlType);
Object cs[] = getControls();
for (int i = 0; i < cs.length; i++) {
if (cls.isInstance(cs[i]))
return cs[i];
}
return null;
} catch (Exception e) { // no such controlType or such control
return null;
}
}
/**
* Set the buffer of this <code>DataSource</code>
* @param buffer
*/
public void setBuffer(byte[] buffer){
if (streams == null) {
streams = new RawLiveStream[1];
stream = streams[0] = new RawLiveStream();
}
stream.data=buffer;
}
/**
* @see javax.media.Duration#getDuration()
*/
public Time getDuration() {
return duration;
}
/**
* Get the collection of streams that this source
* manages. The collection of streams is entirely
* content dependent. The MIME type of this
* <CODE>DataSource</CODE> provides the only indication of
* what streams can be available on this connection.
*
* @return The collection of streams for this source.
*/
public PushBufferStream [] getStreams() {
if (streams == null) {
streams = new RawLiveStream[1];
stream = streams[0] = new RawLiveStream();
}
return streams;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -