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

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

?? rtptransmit.java

?? 利用java的jmf實現RTPTransmit
?? 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一区二区三区免费野_久草精品视频
午夜欧美2019年伦理| 一区二区三区四区中文字幕| 欧美欧美欧美欧美首页| 色综合久久中文综合久久牛| zzijzzij亚洲日本少妇熟睡| 成人午夜视频网站| 成人免费观看av| 成人av片在线观看| 99精品久久免费看蜜臀剧情介绍| 不卡电影免费在线播放一区| 成人精品在线视频观看| 风流少妇一区二区| av男人天堂一区| 欧美中文字幕一区二区三区亚洲| 色视频欧美一区二区三区| 在线视频欧美精品| 日韩欧美视频在线| 国产日韩精品一区二区浪潮av| 国产视频911| 亚洲美女电影在线| 亚洲成av人片观看| 狠狠色丁香久久婷婷综合丁香| 国产.欧美.日韩| 色综合久久天天综合网| 欧美一区二区三级| 中文字幕av一区二区三区高| 亚洲自拍偷拍av| 久久国产尿小便嘘嘘| 成人开心网精品视频| 欧美系列在线观看| 精品福利一二区| 亚洲欧美视频在线观看| 亚洲成a人片综合在线| 国产在线不卡一区| 欧美亚一区二区| 久久综合给合久久狠狠狠97色69| 国产精品久久久久一区二区三区 | 欧美亚洲综合另类| 日韩一区二区麻豆国产| 亚洲欧美日韩一区| 激情久久五月天| 欧美日韩一区二区不卡| 国产日韩欧美麻豆| 日韩avvvv在线播放| 北条麻妃一区二区三区| 欧美精品一区男女天堂| 亚洲综合视频网| 粉嫩蜜臀av国产精品网站| 91精品在线观看入口| 亚洲色图清纯唯美| 国产精品影音先锋| 欧美一级二级三级乱码| 亚洲综合视频在线观看| av午夜一区麻豆| 久久久精品天堂| 蜜桃视频一区二区三区在线观看| 91黄色免费版| 亚洲婷婷国产精品电影人久久| 精品一区二区三区久久| 91麻豆精品国产91久久久| 一区二区三区在线观看视频| 91在线国内视频| 国产精品久久久久一区二区三区 | 精品少妇一区二区三区免费观看| 中文av一区二区| 国产夫妻精品视频| 欧美成人猛片aaaaaaa| 午夜精品在线看| 欧美性色aⅴ视频一区日韩精品| 国产精品第五页| 成年人国产精品| 国产精品久久久久久久久久久免费看 | 国产成人免费在线| 国产亚洲午夜高清国产拍精品| 久久se这里有精品| 久久嫩草精品久久久精品一| 国产自产2019最新不卡| 精品国产伦一区二区三区免费| 奇米影视7777精品一区二区| 欧美一区二区私人影院日本| 午夜精品免费在线| 91精品国产色综合久久ai换脸| 天堂一区二区在线| 日韩一级大片在线观看| 精品在线亚洲视频| 久久久国产精品麻豆| 成人免费视频视频在线观看免费| 国产精品无人区| 91论坛在线播放| 五月开心婷婷久久| 精品不卡在线视频| 高清不卡一区二区在线| 综合激情成人伊人| 欧美在线三级电影| 免费精品视频最新在线| 久久亚洲欧美国产精品乐播| 99视频精品免费视频| 亚洲高清视频的网址| 日韩视频一区二区三区 | 亚洲欧洲一区二区三区| 在线精品观看国产| 麻豆视频观看网址久久| 欧美激情一区二区三区全黄 | 亚洲午夜一区二区三区| 欧美一级日韩不卡播放免费| 国产麻豆一精品一av一免费 | 欧美精品久久一区| 国精品**一区二区三区在线蜜桃| 亚洲国产精品成人综合色在线婷婷 | 欧美mv日韩mv亚洲| 波多野结衣中文字幕一区二区三区| 亚洲午夜在线视频| 久久久久久久综合日本| 一本到三区不卡视频| 久久国产精品72免费观看| 中文字幕在线观看不卡| 日韩欧美一级二级| 欧美无砖砖区免费| 国产成人小视频| 蜜臀久久99精品久久久画质超高清| 亚洲国产激情av| 欧美成人一区二区三区在线观看| av一二三不卡影片| 成人黄色一级视频| 日韩高清在线观看| 一区二区欧美精品| 国产精品网友自拍| 日韩免费在线观看| 欧美日韩免费高清一区色橹橹| 国产成人免费视频网站高清观看视频 | 国产亚洲欧美日韩在线一区| 欧美精品三级在线观看| 97se亚洲国产综合自在线不卡 | www.久久精品| 国产美女一区二区三区| 美女一区二区视频| 婷婷开心激情综合| 亚洲高清视频在线| 亚洲一区二区在线免费看| 国产精品美女久久福利网站| 久久久久国产精品人| 日韩久久精品一区| 7777女厕盗摄久久久| 欧美性生交片4| 在线国产亚洲欧美| 91麻豆精品视频| 99久久精品国产一区二区三区| 国产91精品精华液一区二区三区| 国产麻豆日韩欧美久久| 国产一区二区免费视频| 黑人巨大精品欧美一区| 精品一区二区免费视频| 久久精品理论片| 蜜臀精品一区二区三区在线观看| 日本欧美一区二区三区| 蜜桃免费网站一区二区三区| 日本vs亚洲vs韩国一区三区二区| 日韩影院精彩在线| 免费高清在线一区| 韩国av一区二区三区在线观看| 久久精品99国产精品日本| 国产一区在线精品| 国产福利一区二区三区视频在线| 国产精品1024| 99国产欧美另类久久久精品| 色综合久久久久综合体| 在线免费亚洲电影| 7777精品伊人久久久大香线蕉的| 欧美一级二级在线观看| 久久久亚洲综合| 亚洲欧洲一区二区三区| 亚洲成av人影院| 毛片不卡一区二区| 波多野结衣中文字幕一区| 色狠狠桃花综合| 日韩一区二区麻豆国产| 国产日本欧美一区二区| 国产精品国产三级国产有无不卡| 亚洲激情欧美激情| 免费看欧美美女黄的网站| 国产福利精品一区| 91精品办公室少妇高潮对白| 欧美一区二区三区在线观看视频| 精品国产91乱码一区二区三区 | 成人av资源网站| 欧美亚洲动漫另类| 欧美精品一区二区三区蜜桃| 亚洲免费毛片网站| 蜜芽一区二区三区| 97久久超碰精品国产| 欧美一区二区三区免费| 国产精品国模大尺度视频| 天天综合网天天综合色| 波多野洁衣一区| 欧美电影免费观看高清完整版在 | 亚洲午夜私人影院| 国产麻豆精品视频| 欧美私模裸体表演在线观看| 久久精品一区二区三区四区| 午夜久久久久久久久久一区二区|