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

📄 udpadapter.java

📁 是一个用java实现的
💻 JAVA
字号:
/*
 * RTPSocketAdapter.java
 *
 * Created on November 18, 2003, 3:08 PM
 */

package gov.nist.applet.phone.media.protocol.transport;

/**
 *
 * @author  DERUELLE Jean
 */
import java.io.IOException;
import java.net.InetAddress;
import java.net.DatagramSocket;
import java.net.SocketException;

import javax.media.protocol.PushSourceStream;
import javax.media.rtp.RTPConnector;
import javax.media.rtp.OutputDataStream;


/**
 * An implementation of RTPConnector based on UDP sockets.
 */
public class UDPAdapter implements RTPConnector {

    private DatagramSocket dataSock;
    private DatagramSocket ctrlSock;

    private InetAddress addr;
    private int port;    
    //private int destinationPort;    
    private int rtcpPort;
    //private int rtcpDestinationPort;
    
    private UDPPushSourceStream dataInStrm = null, ctrlInStrm = null;
    private UDPOutputDataStream dataOutStrm = null, ctrlOutStrm = null;

    /** Creates a new instance of UDPAdapter 
     * @param addr - address of the remote host
     * @param localPort - port of the local host
     * @param destPort - port of the remote host
     */
    public UDPAdapter(InetAddress addr, int port) throws IOException {
		this(addr, port, 1);
    }
    /** Creates a new instance of UDPAdapter 
     * @param addr - address of the remote host
     * @param localPort - port of the local host
     * @param destPort - port of the remote host
     * @param ttl - time to live
     */
    public UDPAdapter(InetAddress addr, int port, int ttl) throws IOException {
        rtcpPort=port++;
        //rtcpDestinationPort=destPort++;
		try {	    
			System.out.println(addr+" port "+port+" rtcp" + rtcpPort);
            dataSock = new DatagramSocket(port, addr);
            ctrlSock = new DatagramSocket(rtcpPort, addr);	    
		} catch(SocketException e) {			
		    throw new IOException(e.getMessage());
		}
		this.addr = addr;
		this.port = port;
        //this.destinationPort = destPort;
    }

     /**
     * Returns an input stream to receive the RTP data.
     * @return input stream to receive the RTP data.
     */
    public PushSourceStream getDataInputStream() throws IOException {
		if (dataInStrm == null) {
		    dataInStrm = new UDPPushSourceStream(dataSock, addr, port);
		    dataInStrm.start();
		}
		return dataInStrm;
    }

     /**
     * Returns an output stream to send the RTP data.
     * @return output stream to send the RTP data.
     */
    public OutputDataStream getDataOutputStream() throws IOException {
		if (dataOutStrm == null)
		    dataOutStrm = new UDPOutputDataStream(dataSock, addr, port);
		return dataOutStrm;
    }

    /**
     * Returns an input stream to receive the RTCP data.
     * @return input stream to receive the RTCP data.
     */
    public PushSourceStream getControlInputStream() throws IOException {
		if (ctrlInStrm == null) {
		    ctrlInStrm = new UDPPushSourceStream(ctrlSock, addr, rtcpPort);
		    ctrlInStrm.start();
		}
		return ctrlInStrm;
    }

    /**
     * Returns an output stream to send the RTCP data.
     * @return output stream to send the RTCP data.
     */
    public OutputDataStream getControlOutputStream() throws IOException {
		if (ctrlOutStrm == null)
		    ctrlOutStrm = new UDPOutputDataStream(ctrlSock, addr, rtcpPort);
		return ctrlOutStrm;
    }

    /**
     * Close all the RTP, RTCP streams.
     */
    public void close() {
        System.out.println("Closing the streams");
		if (dataInStrm != null)
		    dataInStrm.kill();
		if (ctrlInStrm != null)
		    ctrlInStrm.kill();
        while(!dataSock.isClosed())
            dataSock.close();
        while(!ctrlSock.isClosed())
            ctrlSock.close();
        dataSock=null;
        ctrlSock=null;
    }

    /**
     * Set the receive buffer size of the RTP data channel.
     * This is only a hint to the implementation.  The actual implementation
     * may not be able to do anything to this.
     * @param size - receive buffer size 
     */
    public void setReceiveBufferSize( int size) throws IOException {
		dataSock.setReceiveBufferSize(size);
    }

    /**
     * Get the receive buffer size set on the RTP data channel.
     * Return -1 if the receive buffer size is not applicable for
     * the implementation.
     * @return receive buffer size 
     */
    public int getReceiveBufferSize() {
		try {
		    return dataSock.getReceiveBufferSize();
		} catch (Exception e) {
		    return -1;
		}
    }

    /**
     * Set the send buffer size of the RTP data channel.
     * This is only a hint to the implementation.  The actual implementation
     * may not be able to do anything to this.
     * @param size - send buffer size.
     */
    public void setSendBufferSize( int size) throws IOException {
		dataSock.setSendBufferSize(size);
    }

    /**
     * Get the send buffer size set on the RTP data channel.
     * Return -1 if the send buffer size is not applicable for
     * the implementation.
     * @return send buffer size 
     */
    public int getSendBufferSize() {
		try {
		    return dataSock.getSendBufferSize();
		} catch (Exception e) {
		    return -1;
		}
    }

    /**
     * Return the RTCP bandwidth fraction.  This value is used to
     * initialize the RTPManager.  Check RTPManager for more detauls.
     * @return RTCP bandwidth fraction. -1 to use the default values.
     */
    public double getRTCPBandwidthFraction() {
		return -1;
    }

    /**
     * Return the RTCP sender bandwidth fraction.  This value is used to
     * initialize the RTPManager.  Check RTPManager for more detauls.
     * Return -1 to use the default values.
     * @return RTCP sender bandwidth fraction. -1 to use the default values.
     */
    public double getRTCPSenderBandwidthFraction() {
		return -1;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -