亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tcppushsourcestream.java

?? 是一個用java實現的
?? JAVA
字號:
/*
 * TCPPushSourceStream.java
 *
 * Created on November 19, 2003, 9:51 AM
 */

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

import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
import javax.media.protocol.SourceTransferHandler;
import javax.media.protocol.PushSourceStream;
import javax.media.protocol.ContentDescriptor;
//import gov.nist.applet.phone.ua.PushToTalkStatus;
/**
 * This class is an implementation of the PushSourceStream for
 * The TCP transport protocol underlying to RTP. 
 * @author  DERUELLE Jean
 */
public class TCPPushSourceStream extends Thread implements PushSourceStream{
    private Socket socket;    
    private InputStream in;    
    private boolean done = false;
    private boolean dataRead = false;    
    private SourceTransferHandler sth = null;    
    private boolean ctrl;
    /** 
     * Creates a new instance of TCPPushSourceStream
     * @param socket - the socket from which we will get the input stream.
     * @param ctrl - used to know if we are reading the rtcp packets     
     */
    public TCPPushSourceStream(Socket socket,boolean ctrl) {
        this.socket = socket;                     
        this.ctrl=ctrl;
        try{
            //if(ctrl)
                //in=socket.getInputStream();
            //else
                in=socket.getInputStream();
                //in=new MyInputStream(socket.getInputStream());
        }
        catch(IOException ioe){
            ioe.printStackTrace();
        }                
    }
    /**
     * Read some data from the input stream.
     * @param buffer - the buffer into which the data is read.
     * @param offset - the start offset in array buffer at which the data is written.
     * @param len - the maximum number of bytes to read.
     * @return the total number of bytes read into the buffer,
     * or -1 if there is no more data because the end of the stream has been reached.
     */
    public int read(byte buffer[], int offset, int length) {              
        int byteRead=0;        
        
        try 
        {
            //if(ctrl)
            //    byteRead=in.read(buffer,offset,length);
            //else{
                //if(!PushToTalkStatus.pushToTalk)
                    byteRead=in.read(buffer,offset,length);
                /*else{
                    if(PushToTalkStatus.talking)
                        if(!ctrl)
                            return 0;
                        else
                            byteRead=in.read(buffer,offset,length);
                    else
                        byteRead=in.read(buffer,offset,length);            
                }*/
            //}
        }
        catch (IOException e) {
            return -1;
        }
        synchronized (this) {
            dataRead = true;
            notify();
        }
        return byteRead;
    }
    /**
     * Start this thread
     */
    public synchronized void start() {
        super.start();
        if (sth != null) {
            dataRead = true;
            notify();
        }
    }
    /**
     * Kill this thread
     */
    public synchronized void kill() {
        done = true;
        notify();
    }
    /**
     * Determine the size of the buffer needed for the data transfer. 
     * This method is provided so that a transfer handler can determine how much data, 
     * at a minimum, will be available to transfer from the source. 
     * Overflow and data loss is likely to occur if this much data isn't read at transfer time.
     * @return The size of the data transfer.
     */
    public int getMinimumTransferSize() {
        return 2 * 1024;	// twice the MTU size, just to be safe.
    }
    
    /**
     * Register an object to service data transfers to this stream.
     *
     * If a handler is already registered when setTransferHandler is called, 
     * the handler is replaced; there can only be one handler at a time.
     * @param sth - The handler to transfer data to.
     */
    public synchronized void setTransferHandler(SourceTransferHandler sth) {
        this.sth = sth;
        dataRead = true;
        notify();
    }
    
    /**
     * Get the current content type for this stream.
     * @return The current ContentDescriptor for this stream.
     */
    // Not applicable.
    public ContentDescriptor getContentDescriptor() {
        return null;
    }
    /**
     * Get the size, in bytes, of the content on this stream. 
     * LENGTH_UNKNOWN is returned if the length is not known.
     * @return The content length in bytes.
     */
    // Not applicable.
    public long getContentLength() {
        return LENGTH_UNKNOWN;
    }
    /**
     * Find out if the end of the stream has been reached.
     * @return Returns true if there is no more data.
     */
    // Not applicable.
    public boolean endOfStream() {
        return false;
    }

    /**
     * Obtain the collection of objects that control the object that implements this interface.
     * If no controls are supported, a zero length array is returned.
     * @return the collection of object controls
     */
    // Not applicable.
    public Object[] getControls() {
        return new Object[0];
    }
    /**
     * Obtain the object that implements the specified Class or Interface  The full class or interface name must be used.
     * If the control is not supported then null is returned.
     * @return the object that implements the control, or null.
     */
    // Not applicable.
    public Object getControl(String type) {
        return null;
    }

    /**
     * Loop and notify the transfer handler of new data.
     */
    public void run() {
        while (!done) {
            synchronized (this) {
                while (!dataRead && !done) {
                    try {
                        wait();
                    } catch (InterruptedException e) { }
                }
                dataRead = false;
            }
            if (sth != null && !done) {
                sth.transferData(this);
            }
        }
    }    
    
    class MyInputStream  extends InputStream {        
        private int ptr;
        private int maxBufferRead;
        private  byte[] buffer;
        private  byte[] sockBuffer;
        private boolean bufferFull;
        private InputStream in;
        private static final int MAX_BUFFER_SIZE=131072;
        
        public MyInputStream (InputStream in) {
            super();
            ptr =0;
            maxBufferRead=0;
            bufferFull=false;
            buffer=new byte[MAX_BUFFER_SIZE];
            sockBuffer=new byte[MAX_BUFFER_SIZE];
            this.in = in;
        }


        public int read() throws IOException {    
            //if(!PushToTalkStatus.pushToTalk){
                byte content[]=new byte[1];
                int nbBytesRead=in.read(content);                
                if(nbBytesRead==-1)
                    return -1;
                else
                    return (int)content[0];
            /*}
            else{                                
                while(!bufferFull){
                    int nbBytesRead=in.read(sockBuffer);   
                    //System.out.println("nbBytesRead: "+nbBytesRead+" ctrl"+ctrl);
                    if(nbBytesRead==-1)
                        return -1;            
                    if(nbBytesRead<MAX_BUFFER_SIZE){
                        //System.out.println("ptr+nbBytesRead: "+ptr+" ctrl"+ctrl);
                        if(ptr+nbBytesRead<MAX_BUFFER_SIZE){
                            System.arraycopy(sockBuffer, 0, buffer, ptr, nbBytesRead);
                            ptr+=nbBytesRead;                   
                        }
                        else{                            
                            maxBufferRead=ptr;
                            ptr=0;
                            System.out.println("buffer fulled: size read: "+maxBufferRead);                    
                            System.out.println("ptr on : "+ptr);
                            bufferFull=true;
                        }
                    }
                }
                //We read the buffer                
                int byteVal= (int) buffer[ptr++];
                System.out.println("ptr on : "+ptr);
                //The buffer has been read we have to fill it up again
                if(ptr>=maxBufferRead){
                    ptr=0;
                    bufferFull=false;
                    maxBufferRead=0;
                    System.out.println("buffer emptied");
                }
                return byteVal;
            }*/
        }

    }
    
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品欧美激情| 欧美伦理影视网| 国产亚洲综合av| 精品影视av免费| 日韩欧美一区在线| 国产乱码字幕精品高清av| 亚洲精品在线观| 国产成人免费视频网站| 中文字幕一区二区三区色视频| 色综合久久久久久久久久久| 亚洲免费在线看| 精品1区2区3区| 经典三级视频一区| 亚洲欧美在线视频观看| 欧美日韩一区二区在线视频| 日本亚洲一区二区| 欧美国产日韩在线观看| 色天天综合色天天久久| 日韩在线一区二区三区| 26uuu成人网一区二区三区| 成人午夜视频网站| 亚洲国产精品久久久久秋霞影院 | 色综合网色综合| 午夜电影网亚洲视频| 日韩免费视频线观看| 成人综合婷婷国产精品久久蜜臀| 亚洲人成网站精品片在线观看| 欧美精品免费视频| 成人18视频日本| 日韩精品五月天| 中文字幕一区三区| 欧美一级黄色大片| 色综合咪咪久久| 国产在线视频不卡二| 亚洲免费大片在线观看| 精品少妇一区二区三区视频免付费| av成人老司机| 国产麻豆精品在线| 亚州成人在线电影| 国产精品第四页| 精品少妇一区二区三区免费观看 | 奇米影视7777精品一区二区| 久久久久久久久久久久久女国产乱| 99国产精品久久| 久久爱www久久做| 亚洲自拍另类综合| 国产喷白浆一区二区三区| 9191久久久久久久久久久| 成人永久看片免费视频天堂| 免费观看在线色综合| 亚洲精品国产视频| 国产人伦精品一区二区| 日韩美女一区二区三区四区| 色噜噜狠狠成人网p站| 国产精品一区二区在线看| 午夜国产精品一区| 一区二区三区中文字幕精品精品| 国产午夜亚洲精品午夜鲁丝片 | 色婷婷综合久久久中文一区二区| 精品伊人久久久久7777人| 亚洲成人在线网站| 亚洲卡通欧美制服中文| 国产精品国产精品国产专区不蜜 | 捆绑调教一区二区三区| 亚洲大片一区二区三区| 亚洲精品国产精品乱码不99| 国产亚洲精品aa| 久久久久久久精| 精品久久国产97色综合| 欧美一二区视频| 91精品国产综合久久精品图片| 在线精品亚洲一区二区不卡| 99久精品国产| 99久久er热在这里只有精品66| 国产91高潮流白浆在线麻豆| 国产精品综合二区| 狠狠色丁香久久婷婷综合丁香| 久久激五月天综合精品| 国产真实乱对白精彩久久| 国产乱淫av一区二区三区| 国产乱一区二区| 风间由美一区二区三区在线观看| 国产成人在线视频免费播放| 国产99久久久国产精品潘金网站| 高清av一区二区| www.av亚洲| 99久久免费精品高清特色大片| 成人美女在线观看| 99久久精品国产一区| 色菇凉天天综合网| 欧美亚洲动漫另类| 5566中文字幕一区二区电影| 欧美一区二区三区四区五区| 日韩一级免费一区| 精品成人免费观看| 国产精品嫩草影院com| 亚洲柠檬福利资源导航| 午夜在线电影亚洲一区| 久久精品99国产精品| 国产精品资源网站| 成人性生交大片| 在线观看区一区二| 欧美一区二区三区精品| 精品国产三级电影在线观看| 亚洲欧美在线观看| 日韩影院免费视频| 粉嫩一区二区三区在线看| 在线亚洲一区二区| 日韩午夜在线观看视频| 日本一二三不卡| 一区二区三区国产| 美女网站色91| 99久久综合狠狠综合久久| 欧美色图12p| 国产午夜精品美女毛片视频| 亚洲欧美偷拍三级| 美女视频黄免费的久久| 成人激情开心网| 欧美电影一区二区三区| 欧美激情一区二区三区在线| 午夜不卡av免费| 国产精品夜夜爽| 欧美精品粉嫩高潮一区二区| 国产精品乱人伦中文| 青青草91视频| 色综合天天在线| 一区二区三区在线视频免费| 狠狠色2019综合网| 欧美亚洲国产一卡| 国产精品乱码人人做人人爱| 午夜精品一区二区三区免费视频 | 99久久婷婷国产综合精品| 欧美精品久久久久久久久老牛影院 | 日本系列欧美系列| 成人精品高清在线| 精品嫩草影院久久| 亚洲成人tv网| 91视频观看免费| 国产亚洲欧美日韩日本| 日韩国产欧美在线观看| 99久久久久久| 国产日韩欧美高清在线| 老司机精品视频在线| 欧美日韩极品在线观看一区| 亚洲色欲色欲www在线观看| 国产福利一区二区| 日韩一级片网址| 日韩不卡在线观看日韩不卡视频| 99久久精品国产观看| 中文字幕欧美激情一区| 国产美女在线观看一区| 欧美一级片在线| 午夜精品在线看| 欧美日韩日本视频| 亚洲自拍偷拍麻豆| 91在线小视频| 最新不卡av在线| 99久久精品情趣| 综合久久给合久久狠狠狠97色| 成人av网站在线观看免费| 国产亚洲成av人在线观看导航| 国产毛片精品一区| 欧美精品一区二区三区很污很色的| 美女视频黄免费的久久 | 日韩女优电影在线观看| 日韩一区精品视频| 日韩一卡二卡三卡四卡| 青青草97国产精品免费观看无弹窗版 | 亚洲午夜久久久久中文字幕久| 99国产一区二区三精品乱码| 中文字幕欧美三区| av不卡在线观看| 亚洲男人的天堂在线观看| 色激情天天射综合网| 亚洲影院免费观看| 欧美日韩成人高清| 亚洲成年人网站在线观看| 欧美精品乱码久久久久久| 天天av天天翘天天综合网色鬼国产| 欧美日韩一级二级| 日本人妖一区二区| 日韩视频永久免费| 国内精品自线一区二区三区视频| 日韩欧美亚洲国产另类| 久久99九九99精品| 久久久电影一区二区三区| 丁香激情综合国产| 亚洲综合在线免费观看| 欧美精品视频www在线观看| 青草国产精品久久久久久| 精品国产一区久久| 国产精品99久久久久久久vr| 中文字幕第一区二区| 91久久精品午夜一区二区| 亚洲chinese男男1069| 日韩天堂在线观看| 久久亚洲二区三区| 成人爱爱电影网址| 亚洲一卡二卡三卡四卡五卡| 日韩欧美在线观看一区二区三区|