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

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

?? rtptransmit.java

?? Java各種網(wǎng)絡代碼
?? JAVA
字號:
package RTPTransmit;import java.io.*;import java.awt.Dimension;import java.net.InetAddress;import javax.media.*;import javax.media.protocol.*;import javax.media.protocol.DataSource;import javax.media.format.*;import javax.media.control.TrackControl;import javax.media.rtp.*;// 用RTP協(xié)議傳輸數(shù)據(jù)的類public class RTPTransmit {  private MediaLocator locator;     // 媒體定位,可以是一個本機文件,也可以是一個網(wǎng)絡文件或采集設備得到的數(shù)據(jù)源  private String ipAddress;         // 發(fā)送目的地(接收端)的IP地址  private int portBase;             // 傳輸端口號  private Processor processor = null;          // 處理器  private RTPManager rtpMgrs[];                // RTP管理器  private DataSource dataOutput = null;        // 輸出的數(shù)據(jù)源  // 構造函數(shù)  public RTPTransmit(MediaLocator locator, String ipAddress,String pb,Format format) {    this.locator = locator;    this.ipAddress = ipAddress;    Integer integer = Integer.valueOf(pb);    if (integer != null)      this.portBase = integer.intValue();  }  // 開始傳輸  // 如果一切正常,就返回 null,否則返回出錯原因  public synchronized String start() {    String result;    result = createProcessor();           // 產生一個處理器    if (result != null)      return result;    result = createTransmitter();        // 產生RTP會話,將處理器輸出的數(shù)據(jù)傳給指定的IP地址的指定的端口號    if (result != null) {      processor.close();      processor = null;      return result;    }    processor.start();         // 讓處理器開始傳輸    return null;  }  // 為指定的媒體定位器產生一個處理器  private String createProcessor() {    if (locator == null)      return "Locator is null";    DataSource ds;    try {      ds = javax.media.Manager.createDataSource(locator);           // 為定義的MediaLocator定位并實例化一個適當?shù)臄?shù)據(jù)源。    }    catch (Exception e) {      return "Couldn't create DataSource";    }    try {      processor = javax.media.Manager.createProcessor(ds);          // 通過數(shù)據(jù)源來產生一個處理器    }    catch (NoProcessorException npe) {      return "Couldn't create processor";    }    catch (IOException ioe) {      return "IOException creating processor";    }    boolean result = waitForState(processor, Processor.Configured);         // 等待處理器配置好    if (result == false)      return "Couldn't configure processor";    TrackControl [] tracks = processor.getTrackControls();        // 為媒體流中的每一個磁道得到一個控制器    if (tracks == null || tracks.length < 1)              // 確保至少有一個可用的磁道      return "Couldn't find tracks in processor";    ContentDescriptor cd = new ContentDescriptor(ContentDescriptor.RAW_RTP);    processor.setContentDescriptor(cd);                // 設置輸出的內容描述為RAW_RTP                                                       // 從而限定每個磁道支持的格式僅為合法的RTP格式,即它影響后面的 Track.getSupportedFormats()    Format supported[];    Format chosen = null;    boolean atLeastOneTrack = false;    for (int i = 0; i < tracks.length; i++) {          // 對每一個磁道,選擇一種RTP支持的傳輸格式      Format format = tracks[i].getFormat();      if (tracks[i].isEnabled()) {                     // 如果該磁道可用        supported = tracks[i].getSupportedFormats();        if (supported.length > 0) {          if (supported[0] instanceof VideoFormat) {            chosen = checkForVideoSizes(tracks[i].getFormat(),supported[0]); // 檢查視頻格式的尺寸,以確保正常工作          }          else              chosen = supported[0];       // 前面已經設置了輸出內容描述為RIP,這里支持的格式都可以與RTP配合工作                                           // 這里選擇第一種支持的格式          tracks[i].setFormat(chosen);          System.err.println("Track " + i + " is set to transmit as:");          System.err.println("  " + chosen);          atLeastOneTrack = true;        }        else          tracks[i].setEnabled(false);      }      else        tracks[i].setEnabled(false);    }    if (!atLeastOneTrack)      return "Couldn't set any of the tracks to a valid RTP format";    result = waitForState(processor, Controller.Realized);        // 等待處理器實現(xiàn)    if (result == false)      return "Couldn't realize processor";    dataOutput = processor.getDataOutput();   // 從處理器得到輸出的數(shù)據(jù)源    return null;  }  // 為處理器的每一個媒體磁道產生一個RTP會話  private String createTransmitter() {    PushBufferDataSource pbds = (PushBufferDataSource)dataOutput;     // 將數(shù)據(jù)源轉化為“Push”(推)數(shù)據(jù)源    PushBufferStream pbss[] = pbds.getStreams();   // 得到“Push”數(shù)據(jù)流    rtpMgrs = new RTPManager[pbss.length];       // 為每個磁道產生一個RTP會話管理器    for (int i = 0; i < pbss.length; i++) {      try {        rtpMgrs[i] = RTPManager.newInstance();        int port = portBase + 2 * i;                         // 每增加一個磁道,端口號加2        InetAddress ipAddr = InetAddress.getByName(ipAddress);     // 得到發(fā)送目的地的IP地址        SessionAddress localAddr = new SessionAddress( InetAddress.getLocalHost(),port);    // 得到本機的會話地址                                                                // 這里傳輸端使用和接收目的端相同的端口號(實際上也可以不同)        SessionAddress destAddr = new SessionAddress( ipAddr, port);          // 得到目的機器(接收端)的會話地址        rtpMgrs[i].initialize( localAddr);                  // 將本機會話地址傳給RTP管理器        rtpMgrs[i].addTarget( destAddr);                    // 加入目的會話地址        System.err.println( "Created RTP session: " + ipAddress + " " + port);        SendStream sendStream = rtpMgrs[i].createSendStream(dataOutput, i);           // 產生數(shù)據(jù)源的RTP傳輸流        sendStream.start();                                // 開始RTP數(shù)據(jù)流發(fā)送      }      catch (Exception  e) {        return e.getMessage();      }    }    return null;  }  // 由于JPEG和H.263編碼標準,只支持一些特定的圖像大小,所以這里進行必要的檢查,以確保其可以正確編碼  Format checkForVideoSizes(Format original, Format supported) {    int width, height;    Dimension size = ((VideoFormat)original).getSize();         // 得到視頻圖像的尺寸    Format jpegFmt = new Format(VideoFormat.JPEG_RTP);    Format h263Fmt = new Format(VideoFormat.H263_RTP);    if (supported.matches(jpegFmt)) {          // 對JPEG格式,視頻圖像的寬和高必須是8像素的整數(shù)倍      width = size.width % 8 == 0 ? size.width : ((int)(size.width / 8) * 8);      height = size.height % 8 == 0 ? size.height : ((int)(size.height / 8) * 8);    }    else if (supported.matches(h263Fmt)) {     // H.263格式僅支持三種特定的圖像尺寸      if (size.width <= 128) {          width = 128;          height = 96;      }      else if (size.width <= 176) {          width = 176;          height = 144;      }      else {          width = 352;          height = 288;      }    }    else {         // 對其他格式不予處理      return supported;    }    return (new VideoFormat(null,new Dimension(width, height),Format.NOT_SPECIFIED,                            null,Format.NOT_SPECIFIED)).intersects(supported);        // 返回經過處理后的視頻格式  }  // 停止傳輸  public void stop() {    synchronized (this) {      if (processor != null) {        processor.stop();        processor.close();                          // 停止處理器        processor = null;                           // 關閉處理器        for (int i = 0; i < rtpMgrs.length; i++) {  // 刪除所有RTP管理器          rtpMgrs[i].removeTargets( "Session ended.");          rtpMgrs[i].dispose();        }      }    }  }  // 以下兩個變量為對處理器狀態(tài)改變的處理服務  private Integer stateLock = new Integer(0);        // 狀態(tài)鎖變量  private boolean failed = false;                    // 是否失敗的狀態(tài)標志  // 得到狀態(tài)鎖  Integer getStateLock() {    return stateLock;  }  // 設置失敗標志  void setFailed() {    failed = true;  }  // 等待處理器達到相應的狀態(tài)  private synchronized boolean waitForState(Processor p, int state) {    p.addControllerListener(new StateListener());          // 為處理器加上狀態(tài)監(jiān)聽    failed = false;    if (state == Processor.Configured) {         // 配置處理器      p.configure();    }    else if (state == Processor.Realized) {    // 實現(xiàn)處理器      p.realize();    }    // 一直等待,直到成功達到所需狀態(tài),或失敗    while (p.getState() < state && !failed) {      synchronized (getStateLock()) {        try {          getStateLock().wait();        }        catch (InterruptedException ie) {          return false;        }      }    }    if (failed)      return false;    else      return true;  }  // 內部類:處理器的狀態(tài)監(jiān)聽器  class StateListener implements ControllerListener {    public void controllerUpdate(ControllerEvent ce) {      // 如果在處理器配置或實現(xiàn)過程中出現(xiàn)錯誤,它將關閉      if (ce instanceof ControllerClosedEvent)   // 控制器關閉        setFailed();      // 對于所有的控制器事件,通知在waitForState方法中等待的線程      if (ce instanceof ControllerEvent) {        synchronized (getStateLock()) {          getStateLock().notifyAll();        }      }    }  }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡一区中文字幕| 欧美专区在线观看一区| 国产精品一区久久久久| 99精品国产99久久久久久白柏| 欧美一级黄色录像| 一区二区久久久久| 粉嫩一区二区三区性色av| 3d成人h动漫网站入口| 亚洲欧美二区三区| 国产在线国偷精品免费看| 欧美日韩一区视频| 亚洲日本va午夜在线影院| 国产黄色91视频| 精品国产青草久久久久福利| 亚洲成在人线免费| 91成人在线免费观看| 中文字幕中文字幕一区二区| 国产乱码精品一区二区三| 欧美一级片在线| 日韩在线一二三区| 欧美系列在线观看| 一片黄亚洲嫩模| 91视频在线观看免费| 国产精品国产三级国产三级人妇 | 久久狠狠亚洲综合| 欧美日韩一级二级| 亚洲成人久久影院| 欧美美女视频在线观看| 亚洲一卡二卡三卡四卡无卡久久 | 色狠狠综合天天综合综合| 国产日韩欧美精品电影三级在线| 美腿丝袜在线亚洲一区| 91精品午夜视频| 美国十次了思思久久精品导航| 欧美疯狂做受xxxx富婆| 日本欧美加勒比视频| 这里是久久伊人| 美女视频第一区二区三区免费观看网站| 91国模大尺度私拍在线视频| 亚洲欧美电影一区二区| 在线看一区二区| 天堂在线亚洲视频| 日韩午夜激情免费电影| 国产一区欧美二区| 国产欧美一二三区| av中文字幕亚洲| 亚洲欧美另类综合偷拍| 欧洲另类一二三四区| 视频一区欧美精品| 精品国产乱码久久久久久闺蜜 | 亚洲一区在线视频观看| 9191久久久久久久久久久| 在线免费观看日本一区| 亚洲777理论| 91精品国产黑色紧身裤美女| 国产真实乱子伦精品视频| 国产日韩精品一区二区浪潮av| 成人黄色在线网站| 一区二区在线观看视频| 欧美日韩久久一区二区| 经典一区二区三区| 亚洲欧洲一区二区三区| 欧美日韩午夜精品| 国产高清在线观看免费不卡| 亚洲精品久久久久久国产精华液| 欧美日韩国产天堂| 国产一本一道久久香蕉| 夜夜嗨av一区二区三区网页 | 在线日韩一区二区| 麻豆一区二区99久久久久| 中文在线免费一区三区高中清不卡 | 在线观看日韩av先锋影音电影院| 日韩av不卡在线观看| 日本一区二区三区电影| 欧美午夜一区二区三区免费大片| 精品亚洲国产成人av制服丝袜| 中文字幕日韩精品一区| 欧美成人一区二区三区| 一本色道a无线码一区v| 国产在线精品一区二区三区不卡| 伊人夜夜躁av伊人久久| 久久免费偷拍视频| 538prom精品视频线放| 大美女一区二区三区| 日韩电影在线观看网站| 国产精品私人影院| 日韩午夜激情视频| 欧美三级中文字| av成人老司机| 国产一区二区日韩精品| 亚洲成人福利片| 中文字幕日韩欧美一区二区三区| 精品欧美一区二区久久 | 精品久久久久久久久久久院品网| 色综合天天性综合| 国产福利一区二区三区视频在线| 亚洲国产日韩在线一区模特| 国产精品久久久久一区二区三区共| 欧美一二三区在线观看| 欧美日韩一级二级三级| 色偷偷久久一区二区三区| 成人伦理片在线| 国产一区在线视频| 久久精品久久久精品美女| 天天综合日日夜夜精品| 国产精品99久| 麻豆视频一区二区| 美女视频网站久久| 青青草伊人久久| 日日嗨av一区二区三区四区| 亚洲一区二区欧美| 一区二区三区不卡视频 | 免费看黄色91| 日韩精品一二三| 婷婷久久综合九色综合伊人色| 亚洲国产毛片aaaaa无费看| 亚洲欧美乱综合| 亚洲黄色尤物视频| 一区二区三区av电影 | 黄色小说综合网站| 久久国产精品露脸对白| 看片网站欧美日韩| 国产一区二区三区久久悠悠色av | 美日韩一区二区| 久久国产精品免费| 国产精品1024久久| www.久久久久久久久| 成人污污视频在线观看| 91视频在线观看免费| 欧美亚日韩国产aⅴ精品中极品| 欧美在线观看一二区| 欧美老女人第四色| 欧美大度的电影原声| 久久久国产一区二区三区四区小说| 国产欧美日韩在线视频| 亚洲欧洲日产国码二区| 亚洲一二三四在线观看| 青娱乐精品视频在线| 国内精品免费在线观看| 波多野结衣中文字幕一区 | 精品久久免费看| 亚洲国产精品ⅴa在线观看| 国产精品久久久久永久免费观看 | 日韩高清国产一区在线| 午夜精品免费在线| www.欧美.com| 亚洲精品日韩专区silk| 亚洲国产综合91精品麻豆| 免费成人在线影院| 欧美日韩精品一区二区| 精品少妇一区二区三区免费观看 | 久久久久久久久久电影| 中文字幕永久在线不卡| 亚洲一区二区偷拍精品| 激情图区综合网| 91麻豆精品秘密| 欧美一区二区三区视频免费| 国产精品网站在线播放| 午夜电影网一区| 成人的网站免费观看| 欧美精品一二三区| 国产欧美日韩不卡免费| 亚洲一区二区三区不卡国产欧美| 国产一区91精品张津瑜| 在线日韩一区二区| 欧美激情一区不卡| 日本美女一区二区| 91麻豆免费视频| 26uuu亚洲婷婷狠狠天堂| 亚洲最快最全在线视频| 国产91对白在线观看九色| 7777女厕盗摄久久久| 亚洲欧美日韩小说| 国产**成人网毛片九色| 91精品国产综合久久精品图片| 亚洲欧洲精品一区二区三区| 久久99深爱久久99精品| 欧美日韩国产一级片| 自拍偷拍欧美激情| 国产成人av在线影院| 日韩一区二区三区免费观看| 悠悠色在线精品| 91免费观看视频在线| 亚洲国产高清在线| 国产精品综合一区二区| 国产精品网友自拍| 国产综合色产在线精品| 日韩视频一区二区三区在线播放| 亚洲激情第一区| 色诱视频网站一区| 中文字幕亚洲精品在线观看| 国产999精品久久久久久绿帽| 精品国精品国产| 日韩激情一区二区| 在线不卡的av| 五月激情六月综合| 欧美精品久久一区| 日韩中文字幕区一区有砖一区 | www.欧美日韩国产在线| 中文字幕巨乱亚洲|