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

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

?? rtptransmit.java

?? Java網絡編程實例 第9章實例.rar
?? 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一区二区三区免费野_久草精品视频
成人91在线观看| 久久精品国产久精国产| ww亚洲ww在线观看国产| 欧美体内she精高潮| 色婷婷av一区二区三区软件 | 91麻豆精品国产91| 欧美日韩一区在线观看| 91成人免费在线| 欧美在线视频日韩| 欧美日韩一区二区电影| 欧美在线制服丝袜| 欧美日韩精品三区| 日韩欧美一区二区久久婷婷| 91精品国产91久久久久久一区二区 | 日本道精品一区二区三区| 91在线小视频| 欧美三级中文字幕在线观看| 欧美色男人天堂| 欧美一区二区人人喊爽| 精品对白一区国产伦| 国产午夜精品一区二区| 亚洲欧美综合网| 亚洲成a人片综合在线| 视频一区国产视频| 国产一区二区在线影院| 福利视频网站一区二区三区| 色婷婷亚洲一区二区三区| 欧美日韩综合在线免费观看| 精品日韩99亚洲| 国产精品久久久久久久裸模| 亚洲一区二区三区四区在线观看| 日本欧美一区二区在线观看| 国产风韵犹存在线视精品| 91免费小视频| 欧美成人乱码一区二区三区| 国产精品成人免费精品自在线观看 | 日韩一区二区在线观看| 久久精品人人做人人综合| 亚洲三级免费电影| 久久国产精品72免费观看| 99精品久久只有精品| 欧美一区二区播放| 国产精品三级av| 奇米在线7777在线精品| av不卡免费电影| 精品伦理精品一区| 天天影视色香欲综合网老头| 粉嫩av一区二区三区粉嫩| 4438x成人网最大色成网站| 日本一区二区视频在线| 免费看日韩a级影片| 色综合久久六月婷婷中文字幕| 欧美精品一区二区三区在线| 亚洲国产sm捆绑调教视频| 成人激情小说乱人伦| 日韩免费成人网| 亚洲高清视频的网址| 成人av电影在线网| 久久久久久免费毛片精品| 日本不卡1234视频| 精品视频在线免费观看| 国产精品萝li| 久久精品999| 欧美一卡2卡三卡4卡5免费| 亚洲黄网站在线观看| 成人激情av网| 国产精品久久综合| 成人午夜短视频| 久久精品人人做人人综合| 久久99精品久久久久久| 日韩一区二区免费电影| 五月综合激情婷婷六月色窝| 欧美亚洲图片小说| 亚洲午夜三级在线| 欧美午夜精品电影| 亚洲乱码国产乱码精品精98午夜| 成人一级片在线观看| 国产日韩欧美精品一区| 国产另类ts人妖一区二区| 欧美videossexotv100| 麻豆精品在线观看| 日韩精品资源二区在线| 久久99国产精品久久99果冻传媒| 欧美一区二区三区四区五区| 日本不卡一二三| 日韩精品中午字幕| 国产一区高清在线| 中文天堂在线一区| 91视频91自| 亚洲国产成人高清精品| 在线播放亚洲一区| 激情文学综合丁香| 国产亚洲午夜高清国产拍精品| 国产99久久久国产精品免费看| 亚洲国产精品二十页| 91蜜桃免费观看视频| 亚洲精品伦理在线| 日韩一区二区三区观看| 国产毛片精品视频| 亚洲欧美日韩在线不卡| 欧美精品视频www在线观看| 美女视频黄a大片欧美| 久久久精品免费免费| 一本色道久久综合亚洲91| 天堂va蜜桃一区二区三区| 久久一留热品黄| 99国产精品视频免费观看| 日韩主播视频在线| 国产视频视频一区| 色天天综合久久久久综合片| 日韩中文字幕一区二区三区| 日本一区二区高清| 欧美精品在欧美一区二区少妇| 国内精品久久久久影院色 | 91在线高清观看| 青青草国产精品97视觉盛宴| 中文字幕欧美日韩一区| 欧美色大人视频| 成人黄色片在线观看| 日韩精品一二三| 亚洲免费观看高清完整版在线观看| 欧美一级久久久久久久大片| 91网站最新地址| 国产一区二区电影| 亚洲va欧美va人人爽| 亚洲国产激情av| 777奇米成人网| 色狠狠一区二区三区香蕉| 国产成人综合在线| 日韩影院在线观看| 一区二区三区在线观看视频| 久久久精品国产免费观看同学| 欧美日韩一级视频| 99re这里只有精品首页| 国产在线视频一区二区| 五月激情综合婷婷| 依依成人精品视频| 国产精品婷婷午夜在线观看| 日韩欧美一区中文| 在线成人小视频| 91精品国产综合久久国产大片| jizzjizzjizz欧美| 国产精品自在在线| 狠狠色丁香婷综合久久| 视频一区视频二区中文字幕| 亚洲精品日韩一| 亚洲人成网站影音先锋播放| 国产欧美综合在线| 久久久久久久久岛国免费| 日韩女优制服丝袜电影| 欧美日韩国产天堂| 欧美性极品少妇| 欧美在线不卡视频| 欧美伊人久久久久久久久影院| 色国产精品一区在线观看| 99久久99久久综合| 国产成人精品午夜视频免费| 国产精品亚洲午夜一区二区三区| 日本不卡高清视频| 极品瑜伽女神91| 国内精品国产三级国产a久久| 久久国产剧场电影| 国产精品白丝jk白祙喷水网站| 国产真实乱对白精彩久久| 国产精品一级二级三级| 国产99久久久久久免费看农村| 国产盗摄一区二区| 成人午夜在线视频| 一本色道综合亚洲| 精品视频在线视频| 欧美变态口味重另类| 精品久久久久久久久久久久久久久 | 久久99国产精品麻豆| 免费精品视频在线| 日韩高清一区二区| 亚州成人在线电影| 国产自产2019最新不卡| 日日噜噜夜夜狠狠视频欧美人| 久久久国产精品不卡| 精品国产免费人成电影在线观看四季 | 欧美精品vⅰdeose4hd| 欧美日韩一区高清| 91精品国产一区二区人妖| 久久亚区不卡日本| 国产精品久久久久aaaa樱花| 亚洲人成在线播放网站岛国| 中文字幕制服丝袜成人av| 一色屋精品亚洲香蕉网站| 亚洲激情在线激情| 日韩中文字幕1| 99在线精品视频| 欧美日韩免费在线视频| 精品88久久久久88久久久| 亚洲男人的天堂在线观看| 日日夜夜一区二区| 99精品国产91久久久久久| 91精品黄色片免费大全| 国产亚洲一区二区三区在线观看 | 国产欧美日韩视频在线观看| 精品国产一区a|