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

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

?? rtptransmit.java

?? 《java網絡編程實例》配書光盤.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一区二区三区免费野_久草精品视频
婷婷国产v国产偷v亚洲高清| 色综合av在线| 欧美亚洲国产怡红院影院| 欧美一区二区三区视频免费播放| 国产欧美一区二区精品婷婷| 午夜不卡av在线| 99久久99久久精品免费看蜜桃| 日韩无一区二区| 亚洲成人午夜电影| 97se狠狠狠综合亚洲狠狠| 久久久美女毛片| 蜜臀av性久久久久蜜臀aⅴ流畅| 91麻豆国产在线观看| 国产精品日日摸夜夜摸av| 精品在线免费观看| 在线电影院国产精品| 一区二区三区四区在线| av在线播放一区二区三区| 久久色.com| 久久99久久99精品免视看婷婷| 欧美日本在线一区| 午夜精品久久久久久| 日本道色综合久久| 亚洲精品免费在线| 99re这里只有精品6| 亚洲欧美综合色| 91网上在线视频| 亚洲欧美电影一区二区| 一本大道久久精品懂色aⅴ| 一区二区中文字幕在线| 97aⅴ精品视频一二三区| 亚洲视频图片小说| 色系网站成人免费| 亚洲国产日韩在线一区模特| 欧美午夜精品一区| 日本在线观看不卡视频| 日韩一区二区在线观看视频播放| 男人操女人的视频在线观看欧美| 欧美狂野另类xxxxoooo| 蜜桃在线一区二区三区| 精品国产乱码久久久久久牛牛| 九九在线精品视频| 国产视频视频一区| 99久久精品免费| 一区二区三区**美女毛片| 欧美日韩免费观看一区二区三区| 亚洲va天堂va国产va久| 欧美一区日韩一区| 国产精品一级二级三级| 国产精品久久久爽爽爽麻豆色哟哟 | 麻豆高清免费国产一区| 2021久久国产精品不只是精品| 国产成人av资源| 亚洲人成精品久久久久| 欧美精品123区| 久久97超碰色| 亚洲欧洲性图库| 制服丝袜激情欧洲亚洲| 国产精品一区二区男女羞羞无遮挡 | 51精品久久久久久久蜜臀| 精品一区二区在线免费观看| 中文字幕+乱码+中文字幕一区| 97精品视频在线观看自产线路二| 亚洲电影在线播放| 久久亚洲免费视频| 色一情一伦一子一伦一区| 免费观看在线色综合| 亚洲欧洲日韩在线| 日韩欧美在线1卡| 色欧美日韩亚洲| 韩国理伦片一区二区三区在线播放| 国产精品电影一区二区| 91精品国产色综合久久| 9l国产精品久久久久麻豆| 婷婷综合另类小说色区| 中文字幕中文字幕中文字幕亚洲无线| 欧美少妇xxx| www.av亚洲| 激情综合网av| 视频一区二区中文字幕| 国产精品黄色在线观看| 亚洲精品一区二区在线观看| 色老头久久综合| 国产成人av一区二区三区在线观看| 亚洲五码中文字幕| 亚洲少妇30p| 国产精品少妇自拍| 26uuu色噜噜精品一区二区| 欧美丝袜丝交足nylons| 99国产一区二区三精品乱码| 精品一区二区在线免费观看| 日韩中文字幕麻豆| 一区二区免费在线播放| 亚洲国产成人在线| 久久久综合九色合综国产精品| 欧美日韩三级一区| 色噜噜狠狠成人网p站| 成人性视频免费网站| 精品一区二区三区免费播放| 午夜精品久久久久久久蜜桃app | 久久丝袜美腿综合| 欧美一区二区三区视频在线 | 一本色道**综合亚洲精品蜜桃冫| 国产精品888| 国产伦精品一区二区三区免费| 久久成人av少妇免费| 天天免费综合色| 亚洲1区2区3区4区| 日日夜夜一区二区| 亚洲va欧美va国产va天堂影院| 亚洲一区二区三区四区在线免费观看 | 久久天堂av综合合色蜜桃网| 欧美mv和日韩mv国产网站| 欧美一区二区三区免费视频| 制服丝袜亚洲色图| 日韩丝袜美女视频| 精品国产一二三区| 久久日韩精品一区二区五区| 久久久久久久久岛国免费| 国产日产精品1区| 国产精品久久久久精k8| 一区二区三区四区乱视频| 一区二区三区精密机械公司| 亚洲综合色视频| 日韩和欧美的一区| 久久电影网站中文字幕| 国产精品一区一区三区| 成人激情免费视频| 色一区在线观看| 9191久久久久久久久久久| 精品成人在线观看| 国产精品久久三区| 亚洲第一电影网| 久久国产精品99久久人人澡| 成人听书哪个软件好| 一本色道a无线码一区v| 欧美一区二区三区四区在线观看| 久久亚洲欧美国产精品乐播| 中文字幕av一区二区三区免费看 | 在线观看一区不卡| 8x8x8国产精品| 久久久国际精品| 亚洲青青青在线视频| 青草国产精品久久久久久| 国产精品资源在线看| 91美女福利视频| 日韩午夜激情视频| 亚洲日穴在线视频| 美脚の诱脚舐め脚责91| 91一区二区在线| 日韩一级精品视频在线观看| 国产精品美女视频| 日韩影院精彩在线| 不卡一区二区三区四区| 欧美一区二区三区小说| 中文字幕一区二区三区蜜月| 免费在线一区观看| 91色在线porny| 久久久欧美精品sm网站| 亚洲大片一区二区三区| 成人免费毛片片v| 国产精品国产精品国产专区不蜜| 亚洲成人综合在线| 国产成人aaa| 91精品婷婷国产综合久久| 最好看的中文字幕久久| 精品在线你懂的| 欧美久久高跟鞋激| 亚洲色图制服丝袜| 国产精品一区二区三区乱码| 在线播放91灌醉迷j高跟美女| 中文字幕一区二区三区色视频| 久久成人麻豆午夜电影| 欧美日韩1区2区| 亚洲尤物在线视频观看| 成人av网站在线| 久久久综合九色合综国产精品| 爽好多水快深点欧美视频| 91色视频在线| 中文字幕亚洲一区二区va在线| 国内不卡的二区三区中文字幕| 777亚洲妇女| 亚洲高清免费在线| 色偷偷88欧美精品久久久| 国产精品嫩草久久久久| 激情综合色播激情啊| 69久久夜色精品国产69蝌蚪网| 一区二区三区日韩精品视频| 成人免费电影视频| 日本一区二区高清| 国产高清不卡一区| 国产偷v国产偷v亚洲高清| 激情五月激情综合网| 欧美成人艳星乳罩| 精品一区二区三区在线视频| 欧美一区二区三区精品| 日本欧美一区二区| 欧美一级淫片007| 久久成人免费网站| www成人在线观看|