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

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

?? rtptransmit.java

?? java網絡編程 包含全書所有代碼編程以及實例
?? 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協議傳輸數據的類public class RTPTransmit {  private MediaLocator locator;     // 媒體定位,可以是一個本機文件,也可以是一個網絡文件或采集設備得到的數據源  private String ipAddress;         // 發送目的地(接收端)的IP地址  private int portBase;             // 傳輸端口號  private Processor processor = null;          // 處理器  private RTPManager rtpMgrs[];                // RTP管理器  private DataSource dataOutput = null;        // 輸出的數據源  // 構造函數  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會話,將處理器輸出的數據傳給指定的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定位并實例化一個適當的數據源。    }    catch (Exception e) {      return "Couldn't create DataSource";    }    try {      processor = javax.media.Manager.createProcessor(ds);          // 通過數據源來產生一個處理器    }    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);        // 等待處理器實現    if (result == false)      return "Couldn't realize processor";    dataOutput = processor.getDataOutput();   // 從處理器得到輸出的數據源    return null;  }  // 為處理器的每一個媒體磁道產生一個RTP會話  private String createTransmitter() {    PushBufferDataSource pbds = (PushBufferDataSource)dataOutput;     // 將數據源轉化為“Push”(推)數據源    PushBufferStream pbss[] = pbds.getStreams();   // 得到“Push”數據流    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);     // 得到發送目的地的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);           // 產生數據源的RTP傳輸流        sendStream.start();                                // 開始RTP數據流發送      }      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像素的整數倍      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();        }      }    }  }  // 以下兩個變量為對處理器狀態改變的處理服務  private Integer stateLock = new Integer(0);        // 狀態鎖變量  private boolean failed = false;                    // 是否失敗的狀態標志  // 得到狀態鎖  Integer getStateLock() {    return stateLock;  }  // 設置失敗標志  void setFailed() {    failed = true;  }  // 等待處理器達到相應的狀態  private synchronized boolean waitForState(Processor p, int state) {    p.addControllerListener(new StateListener());          // 為處理器加上狀態監聽    failed = false;    if (state == Processor.Configured) {         // 配置處理器      p.configure();    }    else if (state == Processor.Realized) {    // 實現處理器      p.realize();    }    // 一直等待,直到成功達到所需狀態,或失敗    while (p.getState() < state && !failed) {      synchronized (getStateLock()) {        try {          getStateLock().wait();        }        catch (InterruptedException ie) {          return false;        }      }    }    if (failed)      return false;    else      return true;  }  // 內部類:處理器的狀態監聽器  class StateListener implements ControllerListener {    public void controllerUpdate(ControllerEvent ce) {      // 如果在處理器配置或實現過程中出現錯誤,它將關閉      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精品| 成人在线综合网站| 日韩一级完整毛片| 亚洲与欧洲av电影| 不卡一区在线观看| 精品国产乱码久久久久久牛牛| 综合激情网...| 国产精品一区一区三区| 欧美一级一区二区| 日韩高清国产一区在线| 91成人免费网站| 国产精品麻豆视频| 国产一区二区精品在线观看| 制服丝袜日韩国产| 亚洲444eee在线观看| 色婷婷精品大在线视频 | 久久国产欧美日韩精品| 欧美综合一区二区| 亚洲精品国产一区二区三区四区在线| 国产精品一区二区久激情瑜伽| 日韩一级二级三级| 视频一区中文字幕| 3d动漫精品啪啪1区2区免费| 亚洲国产精品嫩草影院| 欧美怡红院视频| 亚洲夂夂婷婷色拍ww47| 欧美午夜理伦三级在线观看| 亚洲欧美福利一区二区| 91视频一区二区| 亚洲图片激情小说| 在线一区二区视频| 亚洲一区二区四区蜜桃| 欧美日韩久久不卡| 午夜视频在线观看一区二区三区| 欧美性猛片aaaaaaa做受| 亚洲一二三专区| 8x8x8国产精品| 成人99免费视频| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 午夜精品一区二区三区三上悠亚| 欧美综合色免费| 天天色 色综合| 精品国产一区二区国模嫣然| 国产麻豆精品95视频| 国产精品人人做人人爽人人添| 成人免费观看男女羞羞视频| 综合色中文字幕| 欧美亚日韩国产aⅴ精品中极品| 亚洲成人av电影在线| 欧美成人一区二区三区| 国产成人av自拍| 一区二区三区四区在线播放| 欧美精品v国产精品v日韩精品| 麻豆视频观看网址久久| 国产精品网站在线观看| 色久综合一二码| 日本在线不卡视频一二三区| 久久久电影一区二区三区| 99久久精品免费精品国产| 亚洲电影中文字幕在线观看| 欧美成人高清电影在线| av中文字幕不卡| 日韩电影一区二区三区四区| 久久精品人人做人人综合| 色美美综合视频| 免费的成人av| 亚洲视频免费看| 夜夜嗨av一区二区三区中文字幕| 91精选在线观看| 成人伦理片在线| 日韩在线观看一区二区| 国产精品久久久久9999吃药| 欧美久久久久久蜜桃| 高清视频一区二区| 日韩成人av影视| 1000部国产精品成人观看| 欧美理论在线播放| 成人97人人超碰人人99| 久久99精品久久久久久国产越南| 亚洲日本欧美天堂| 久久久精品国产免费观看同学| 欧美日韩综合在线免费观看| 成人免费观看男女羞羞视频| 久久精品国产亚洲aⅴ| 亚洲一区在线看| 日韩一区在线播放| 国产亚洲精久久久久久| 日韩一区二区精品葵司在线| 日本高清不卡一区| 亚洲精品一线二线三线| 婷婷国产v国产偷v亚洲高清| 日韩精品一区在线观看| 国产成人在线免费观看| 亚洲欧美日韩中文播放| 51精品久久久久久久蜜臀| 美女网站视频久久| 中文乱码免费一区二区| 日本久久一区二区三区| www国产精品av| 91精品久久久久久久99蜜桃| 欧美网站一区二区| 91福利在线观看| 一本色道亚洲精品aⅴ| 97久久精品人人做人人爽50路 | 懂色中文一区二区在线播放| 国产一区日韩二区欧美三区| 日韩va欧美va亚洲va久久| 亚洲aⅴ怡春院| 亚洲成av人片在线| 婷婷六月综合亚洲| 亚洲成a人v欧美综合天堂下载 | 亚洲品质自拍视频网站| 亚洲欧美一区二区在线观看| 国产精品乱人伦中文| 日本中文字幕一区二区有限公司| 亚洲国产精品欧美一二99| 性久久久久久久久久久久| 亚洲mv大片欧洲mv大片精品| 性感美女极品91精品| 日韩激情中文字幕| 美女免费视频一区二区| 久久99国产精品尤物| 国产一区二区三区最好精华液| 国产麻豆精品95视频| 成人av在线看| 在线中文字幕一区二区| 欧美美女网站色| 精品国产凹凸成av人导航| 久久毛片高清国产| 国产精品动漫网站| 亚洲图片自拍偷拍| 久久99精品国产.久久久久久| 国产精品正在播放| 色菇凉天天综合网| 在线播放国产精品二区一二区四区| 91麻豆精品国产无毒不卡在线观看 | 日韩免费成人网| 欧美日韩精品欧美日韩精品一| www.成人网.com| 国产成人av电影在线观看| 捆绑紧缚一区二区三区视频| 婷婷综合在线观看| 亚洲电影一区二区三区| 一区二区三区欧美激情| 亚洲欧美国产毛片在线| 中文字幕一区二区视频| 国产精品免费视频一区| 日本一区二区三区四区在线视频| 精品国产亚洲在线| 日韩精品一区二区三区中文不卡| 欧美一级免费观看| 69堂国产成人免费视频| 欧美久久一区二区| 日韩三级高清在线| 精品国产髙清在线看国产毛片| 制服丝袜亚洲播放| 精品久久人人做人人爽| 欧美精品一区二区三区很污很色的| 欧美va日韩va| 久久久国际精品| 国产欧美日韩另类视频免费观看 | 久久久www成人免费毛片麻豆| 精品日韩欧美在线| 国产欧美视频一区二区三区| 国产精品久久久久久久久免费樱桃 | 日韩av高清在线观看| 成人av片在线观看| 欧美videossexotv100| 亚洲电影视频在线| 91在线国产福利| 久久久一区二区三区| 日韩在线卡一卡二| 91久久线看在观草草青青| 久久久久久久久久看片| 日本免费新一区视频| 在线精品视频一区二区| 国产精品久久久久久久久久久免费看 | 国产老妇另类xxxxx| 国产精品国产馆在线真实露脸| 轻轻草成人在线| 欧美日韩成人一区二区| 中文字幕一区二区三区在线不卡| 国内偷窥港台综合视频在线播放| 91.xcao| 日韩精品久久久久久| 欧美日韩视频第一区| 亚洲黄色录像片| 91女人视频在线观看| 国产精品国产三级国产aⅴ无密码| 国产乱理伦片在线观看夜一区 | 欧美精品在线观看播放| 亚洲免费电影在线| 色999日韩国产欧美一区二区| 国产精品视频一二| www.亚洲激情.com| 国产精品国产a级| 一本一道久久a久久精品综合蜜臀 一本一道综合狠狠老 |