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

📄 rawlivedatasource.java

📁 是一个用java实现的
💻 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 + -