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

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

?? traandrec.java

?? 基于JMF的音視頻聊天程序源代碼.在CSDN上找到的
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/*
 * TranAndRec.java	21/06/07
 * author: Max
 * MSN: zengfc@21cn.com
 * QQ: 22291911
 * Email: zengfc@21cn.com
 *
 */

import java.awt.*;
import java.io.IOException;
import java.net.*;
import java.util.Vector;

import javax.media.*;
import javax.media.control.QualityControl;
import javax.media.control.TrackControl;
import javax.media.format.VideoFormat;
import javax.media.protocol.ContentDescriptor;
import javax.media.protocol.DataSource;
import javax.media.rtp.*;
import javax.media.rtp.event.*;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TraAndRec implements ReceiveStreamListener, SessionListener,
        ControllerListener {

    String ipAddress;
    String serverAddr;
    String name;
    int serverPort;
    int localPort;
    int destCtrlPort;
    int destAudioDataPort;
    int destAudioCtrlPort;
    int destVideoDataPort;
    int destVideoCtrlPort;
    int ttl;
    boolean isMulticastAddress = false;
    boolean hasServer = false;

    MediaLocator audioCapDevLoc;
    MediaLocator videoCapDevLoc;
    Processor audioProcessor = null;
    Processor videoProcessor = null;
    DataSource audioDataOutput = null;
    DataSource videoDataOutput = null;
    RTPManager audioRTPMgr;
    RTPManager videoRTPMgr;
    TrackControl audioTracks[] = null;
    TrackControl videoTracks[] = null;
    boolean initAudioProcessorOK = false;
    boolean initVideoProcessorOK = false;

    DatagramSocket managerSock;
    DatagramSocket audioDataSock;
    DatagramSocket audioCtrlSock;
    DatagramSocket videoDataSock;
    DatagramSocket videoCtrlSock;

    ChatFrame chatFrame;
    Vector playerWindows = null;

    boolean dataReceived = false;
    Object dataSync = new Object();

    public TraAndRec(MediaLocator audioCapDevLoc, MediaLocator videoCapDevLoc,
                     String name, boolean hasServer, String serverAddr,
                     int serverPort,
                     ChatFrame chatFrame) throws SocketException {

        this.audioCapDevLoc = audioCapDevLoc;
        this.videoCapDevLoc = videoCapDevLoc;
        this.name = name;
        this.hasServer = hasServer;
        this.serverAddr = serverAddr;
        this.serverPort = serverPort;
        this.localPort = 23432;
        this.chatFrame = chatFrame;

        playerWindows = new Vector();
        UDPConnect();
    }

    public void setDestAddressAndPort(String ipAddress, int destCtrlPort,
                                      int destAudioDataPort,
                                      int destAudioCtrlPort,
                                      int destVideoDataPort,
                                      int destVideoCtrlPort) {
        this.ipAddress = ipAddress;
        this.destCtrlPort = destCtrlPort;
        this.destAudioDataPort = destAudioDataPort;
        this.destAudioCtrlPort = destAudioCtrlPort;
        this.destVideoDataPort = destVideoDataPort;
        this.destVideoCtrlPort = destVideoCtrlPort;
    }

    public void setMulticastAndTTL(int ttl) {
        this.isMulticastAddress = true;
        this.ttl = ttl;
    }

    public void UDPConnect() throws SocketException {

        managerSock = new DatagramSocket(localPort);
        audioDataSock = new DatagramSocket();
        audioCtrlSock = new DatagramSocket();
        videoDataSock = new DatagramSocket();
        videoCtrlSock = new DatagramSocket();

        if (hasServer) {//如果需要服務器
            new UDPTransmit(managerSock, "1 " + name, serverAddr, serverPort, false).
                    start();
            new UDPTransmit(audioDataSock, "2 " + name, serverAddr, serverPort, false).
                    start();
            new UDPTransmit(audioCtrlSock, "3 " + name, serverAddr, serverPort, false).
                    start();
            new UDPTransmit(videoDataSock, "4 " + name, serverAddr, serverPort, false).
                    start();
            new UDPTransmit(videoCtrlSock, "5 " + name, serverAddr, serverPort, false).
                    start();

            new UDPTransmit(managerSock, "7 " + name, serverAddr, serverPort, true).
                    start();
            new UDPTransmit(audioDataSock, "7 " + name, serverAddr, serverPort, true).
                    start();
            new UDPTransmit(audioCtrlSock, "7 " + name, serverAddr, serverPort, true).
                    start();
            new UDPTransmit(videoDataSock, "7 " + name, serverAddr, serverPort, true).
                    start();
            new UDPTransmit(videoCtrlSock, "7 " + name, serverAddr, serverPort, true).
                    start();

            new UDPReceive(managerSock, chatFrame).start();

        } else {//如果不需要服務器
            String msg = name + ":" + getLocalAddress() + ":" +
                         managerSock.getLocalPort() + ":" +
                         audioDataSock.getLocalPort() + ":" +
                         audioCtrlSock.getLocalPort() + ":" +
                         videoDataSock.getLocalPort() + ":" +
                         videoCtrlSock.getLocalPort();
            new UDPTransmit(managerSock, "0 " + msg, "255.255.255.255",
                            managerSock.getLocalPort(), false).start();
            new UDPReceive(managerSock, chatFrame, msg).start();
        }
    }

    public void needConnect(String msg) {
        new UDPTransmit(managerSock, "2 " + msg, ipAddress, destCtrlPort, false).
                start();
    }

    public void sayBye() {
        if (hasServer) {
            new UDPTransmit(managerSock, "6 " + name, serverAddr, serverPort, false).
                    start();
        } else {
            new UDPTransmit(managerSock, "6 " + name + ":" + getLocalAddress(),
                            "255.255.255.255", localPort, false).start();
        }
    }

    public synchronized String startAudioTransmit() {
        System.err.println("  - Open audio RTP session for: addr: " + ipAddress +
                           " localPort: " + audioDataSock.getLocalPort() +
                           " destPort: " + destAudioDataPort);

        String result;
        result = createAudioDataOutput();
        if (result != null) {
            System.out.println(result);
        }

        result = createAudioRTPMgrs();
        if (result != null) {
            return result;
        }
        if (audioProcessor != null) {

            audioProcessor.start();
        }
        return null;
    }

    public synchronized String startVideoTransmit() {
        System.err.println("  - Open video RTP session for: addr: " + ipAddress +
                           " localPort: " + videoDataSock.getLocalPort() +
                           " destPort: " + destVideoDataPort);

        String result;
        result = createVideoDataOutput();
        if (result != null) {
            System.out.println(result);
        }

        result = createVideoRTPMgrs();
        if (result != null) {
            return result;
        }
        if (videoProcessor != null) {

            videoProcessor.start();
        }
        return null;
    }

    public void closeTransmit() {
        synchronized (this) {
            if (audioProcessor != null) {
                audioProcessor.stop();
                audioRTPMgr.removeSessionListener(this);
                audioRTPMgr.removeReceiveStreamListener(this);
                audioRTPMgr.removeTargets("Session ended.");
            }
            if (videoProcessor != null) {
                videoProcessor.stop();
                if (videoRTPMgr != null) {
                    videoRTPMgr.removeSessionListener(this);
                    videoRTPMgr.removeReceiveStreamListener(this);
                    videoRTPMgr.removeTargets("Session ended.");
                }
            }
            for (int i = 0; i < playerWindows.size(); i++) {
                try {
                    ((PlayerWindow) playerWindows.elementAt(i)).close();
                } catch (Exception e) {}
            }
            playerWindows.removeAllElements();
        }
    }

    public void closeVideoTransmit() {
        synchronized (this) {
            if (videoProcessor != null) {
                videoProcessor.stop();
                videoRTPMgr.removeSessionListener(this);
                videoRTPMgr.removeReceiveStreamListener(this);
                videoRTPMgr.removeTargets("Session ended.");
            }
        }
    }

    public String initAudioProcessor() {
        if (audioCapDevLoc == null) {
            return "Audio capture device locator is null";
        }

        DataSource ds;
        try {
            ds = Manager.createDataSource(audioCapDevLoc);
        } catch (Exception e) {
            return "Couldn't create DataSource";
        }

        try {
            audioProcessor = Manager.createProcessor(ds);
        } catch (NoProcessorException npe) {
            return "Couldn't create processor";
        } catch (IOException ioe) {
            return "IOException creating processor";
        }

        boolean result = waitForState(audioProcessor, Processor.Configured);
        if (result == false) {
            return "Couldn't configure processor";
        }

        audioProcessor.setContentDescriptor(new ContentDescriptor(
                ContentDescriptor.RAW_RTP));

        audioTracks = audioProcessor.getTrackControls();
        if (audioTracks == null || audioTracks.length < 1) {
            return "Couldn't find tracks in processor";
        }

        Format supported[];

        if (audioTracks[0].isEnabled()) {

            supported = audioTracks[0].getSupportedFormats();

            for (int j = 0; j < supported.length; j++) {
                chatFrame.audioQualityComboBox.addItem(supported[j]);
            }

            if (supported.length > 0) {
                audioTracks[0].setFormat(supported[0]); //默認選擇第一個格式
            } else {
                audioTracks[0].setEnabled(false);
            }

        } else {
            audioTracks[0].setEnabled(false);
        }

        initAudioProcessorOK = true;

        return null;
    }

    public String initVideoProcessor() {

        if (videoCapDevLoc == null) {
            return "Video captue device locator is null";
        }

        DataSource ds;
        try {
            ds = Manager.createDataSource(videoCapDevLoc);
        } catch (Exception e) {
            return "Couldn't create DataSource";
        }

        try {
            videoProcessor = Manager.createProcessor(ds);
        } catch (NoProcessorException npe) {
            return "Couldn't create processor";
        } catch (IOException ioe) {
            return "IOException creating processor";
        }

        boolean result = waitForState(videoProcessor, Processor.Configured);
        if (result == false) {
            return "Couldn't configure processor";
        }

        videoTracks = videoProcessor.getTrackControls();
        if (videoTracks == null || videoTracks.length < 1) {
            return "Couldn't find tracks in processor";
        }

        videoProcessor.setContentDescriptor(new ContentDescriptor(
                ContentDescriptor.RAW_RTP));

        Format supported[];
        Format chosen;
        boolean atLeastOneTrack = false;

        if (videoTracks[0].isEnabled()) {

            supported = videoTracks[0].getSupportedFormats();

            for (int j = 0; j < supported.length; j++) {
                chatFrame.videoQualityComboBox.addItem(supported[j]);
            }

            if (supported.length > 0) {
                chosen = checkForVideoSizes(videoTracks[0].getFormat(),
                                            supported[0]); //默認選擇第一個格式
                videoTracks[0].setFormat(chosen);
                atLeastOneTrack = true;
            } else {
                videoTracks[0].setEnabled(false);
            }
        } else {
            videoTracks[0].setEnabled(false);
        }

        if (!atLeastOneTrack) {
            return "Couldn't set any of the tracks to a valid RTP format";
        }

        initVideoProcessorOK = true;

        return null;
    }

    public void setAudioFormat(int index) {
        audioTracks[0].setFormat(audioTracks[0].getSupportedFormats()[index]);
    }

    public void setVideoFormat(int index) {
        Format fmt = videoTracks[0].getSupportedFormats()[index];
        Format fmt2 = checkForVideoSizes(videoTracks[0].getFormat(), fmt);
        videoTracks[0].setFormat(fmt2);
    }

    public String createAudioDataOutput() {
        if (initAudioProcessorOK != true) {
            return "Couldn't init audio processor";
        }

        boolean result = waitForState(audioProcessor, Controller.Realized);
        if (result == false) {
            return "Couldn't realize processor";
        }

        audioDataOutput = audioProcessor.getDataOutput();

        return null;
    }

    public String createVideoDataOutput() {
        if (initVideoProcessorOK != true) {
            return "Couldn't init video processor";
        }

        boolean result = waitForState(videoProcessor, Controller.Realized);
        if (result == false) {
            return "Couldn't realize processor";
        }

        // Set the JPEG quality to .5.
        setJPEGQuality(videoProcessor, 0.5f);

        videoDataOutput = videoProcessor.getDataOutput();

        return null;
    }

    public String createAudioRTPMgrs() {

        InetAddress ipAddr;
        SendStream sendStream;

        try {
            if(audioRTPMgr == null){
                audioRTPMgr = RTPManager.newInstance();
            }
            audioRTPMgr.addSessionListener(this);
            audioRTPMgr.addReceiveStreamListener(this);


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区在线视频观看58| 伊人色综合久久天天| 一本大道av一区二区在线播放 | 亚洲国产视频在线| 精品国产三级电影在线观看| 97久久久精品综合88久久| 美日韩一区二区三区| 亚洲视频一二区| 久久综合五月天婷婷伊人| 日本高清不卡aⅴ免费网站| 国产一区不卡在线| 亚洲成年人影院| 国产精品人人做人人爽人人添| 91精品国产黑色紧身裤美女| 99久久国产综合精品麻豆 | 欧日韩精品视频| 国产白丝精品91爽爽久久| 天堂蜜桃91精品| 亚洲一区在线观看网站| 中文字幕一区二区三区在线播放 | 欧美在线观看视频在线| 成人午夜视频网站| 国产美女精品一区二区三区| 日韩精品亚洲一区| 亚洲最大成人网4388xx| 亚洲日韩欧美一区二区在线| 久久伊人蜜桃av一区二区| 日韩欧美国产综合一区 | 亚洲高清免费观看高清完整版在线观看 | 国产精品国产自产拍高清av | 欧美最新大片在线看| 97久久超碰国产精品| 成人a级免费电影| 国产高清在线精品| 福利视频网站一区二区三区| 极品少妇xxxx精品少妇| 美国毛片一区二区三区| 免费成人你懂的| 免费高清不卡av| 美国av一区二区| 狠狠色综合日日| 国产一二精品视频| 国产精品一二一区| 国产99精品国产| 成人午夜短视频| 99久久伊人久久99| 色综合久久久久久久久| 欧美性感一类影片在线播放| 欧美日韩一区二区三区四区 | 97se亚洲国产综合自在线不卡| 成人免费看视频| 99国产精品视频免费观看| 91丝袜美腿高跟国产极品老师 | 97精品视频在线观看自产线路二| 99久久99久久免费精品蜜臀| 91美女片黄在线观看91美女| 91麻豆精东视频| 欧美色大人视频| 日韩三级精品电影久久久| 久久久久久久综合日本| 国产精品毛片高清在线完整版 | 国产电影一区在线| av不卡在线播放| 欧美在线免费观看视频| 欧美一区二区成人6969| 337p粉嫩大胆噜噜噜噜噜91av| 国产精品丝袜在线| 一区二区三区成人| 麻豆91精品91久久久的内涵| 成人午夜激情影院| 欧美日韩精品电影| 国产日韩影视精品| 亚洲线精品一区二区三区| 精品一区二区三区在线播放 | 国模无码大尺度一区二区三区| 88在线观看91蜜桃国自产| 国产成人久久精品77777最新版本| 久久精品免费观看| 国内偷窥港台综合视频在线播放| 亚洲国产精品精华液网站| 亚洲香蕉伊在人在线观| 日韩成人免费电影| 久久精品国产亚洲高清剧情介绍 | 国产精品久久久久一区| 中文字幕国产一区| 亚洲黄色小视频| 亚洲高清久久久| 久久91精品久久久久久秒播| 九九在线精品视频| www.爱久久.com| 欧美久久免费观看| 欧美另类高清zo欧美| 精品久久久久久久一区二区蜜臀| 久久综合色婷婷| 中文字幕欧美一区| 午夜精品一区二区三区三上悠亚| 日本不卡高清视频| 国产在线精品一区二区三区不卡| 日本乱码高清不卡字幕| 欧美一区二区三区不卡| 国产精品天美传媒| 亚洲大片在线观看| 国产精品99久久久久久宅男| 色综合视频一区二区三区高清| 欧美日韩二区三区| 日韩欧美国产综合| 香蕉乱码成人久久天堂爱免费| 精品一区二区三区免费视频| 成人动漫一区二区三区| 欧美肥妇毛茸茸| 国产精品国产a| 国产成人激情av| 欧美久久久久久久久久| 国产日韩av一区| 日韩成人免费看| 91浏览器在线视频| 国产网站一区二区| 伊人夜夜躁av伊人久久| 成人av在线一区二区三区| 777亚洲妇女| 亚洲色图第一区| 激情综合网最新| 高清免费成人av| 欧美精品九九99久久| 国产三级一区二区三区| 青青草一区二区三区| 日本乱码高清不卡字幕| www久久久久| 水蜜桃久久夜色精品一区的特点| 成人av网址在线| 久久五月婷婷丁香社区| 亚洲精品国产精华液| 成人国产视频在线观看| 欧美大胆人体bbbb| 亚洲高清在线精品| 91免费精品国自产拍在线不卡| 欧美一级一区二区| 午夜精品久久久久久久99樱桃| 99久久久久免费精品国产| www国产精品av| 蜜桃精品视频在线| 欧美日韩成人一区二区| 一卡二卡欧美日韩| 成人免费高清视频在线观看| 国产精品卡一卡二卡三| 国产成人aaa| 国产人伦精品一区二区| 国模一区二区三区白浆| 日韩欧美卡一卡二| 人人精品人人爱| 精品国产一区二区亚洲人成毛片| 五月婷婷综合在线| 91丨porny丨国产| 亚洲精选视频免费看| av亚洲精华国产精华精| 国产精品视频免费看| 国产精品影音先锋| 日韩一区二区三区av| 国产在线一区观看| 久久午夜老司机| 国产经典欧美精品| 国产精品久久夜| 99re视频这里只有精品| 亚洲成精国产精品女| 欧美日韩黄色一区二区| 日韩精品一二区| 日韩三级视频在线看| 狠狠狠色丁香婷婷综合激情| 日韩一级免费观看| 成人黄色网址在线观看| 亚洲欧美偷拍三级| 欧美性videosxxxxx| 日韩精品1区2区3区| 日韩欧美aaaaaa| 日日夜夜一区二区| 欧美国产精品一区| 91偷拍与自偷拍精品| 亚洲综合免费观看高清在线观看| 在线视频你懂得一区| 日韩成人一区二区| 久久久久国产免费免费| 成人18视频日本| 亚洲精选一二三| 8v天堂国产在线一区二区| 狠狠网亚洲精品| 国产亚洲欧美日韩在线一区| 91黄色激情网站| 美女mm1313爽爽久久久蜜臀| 国产三级欧美三级| 91黄色激情网站| 日韩国产精品久久久| 中文字幕亚洲在| 欧美男人的天堂一二区| 国内精品免费**视频| 综合在线观看色| 91精品国产欧美日韩| 成人av资源下载| 免费一级欧美片在线观看| 中文字幕欧美国产| 欧美日韩一区二区三区在线 |