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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? traandrec.java

?? 基于JMF的音視頻聊天程序源代碼.在CSDN上找到的
?? JAVA
?? 第 1 頁 / 共 2 頁
字號(hào):
/*
 * 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) {//如果需要服務(wù)器
            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 {//如果不需要服務(wù)器
            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]); //默認(rèn)選擇第一個(gè)格式
            } 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]); //默認(rèn)選擇第一個(gè)格式
                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);


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆产精品久久久久久| 日韩激情在线观看| 国产91高潮流白浆在线麻豆| 精品国产麻豆免费人成网站| 狠狠色丁香婷婷综合| 欧美精品一区二区三| 国产91在线观看| 亚洲女爱视频在线| 91超碰这里只有精品国产| 麻豆久久一区二区| 欧美激情一区二区三区蜜桃视频| 成人免费观看男女羞羞视频| 中文字幕中文在线不卡住| 在线免费观看日韩欧美| 日本成人中文字幕在线视频| 精品国产乱码久久久久久影片| 丁香婷婷综合激情五月色| 亚洲精品国产高清久久伦理二区| 欧美日韩久久久久久| 国产一区二区三区免费| 亚洲视频一区在线观看| 欧美一区二区三区喷汁尤物| 国产一区二区成人久久免费影院| 日韩一区在线看| 欧美一级日韩一级| 99久久er热在这里只有精品66| 日韩在线卡一卡二| 日本一区二区成人在线| 欧美视频在线观看一区| 国产成人在线视频网站| 亚洲一区二区在线观看视频| 欧美mv日韩mv国产| 91久久一区二区| 国产乱子伦一区二区三区国色天香| 亚洲人成精品久久久久久| 欧美一级片在线看| 91成人看片片| 国产91丝袜在线播放九色| 日本不卡免费在线视频| 成人欧美一区二区三区| 精品久久久久一区| 欧美日韩美少妇| 不卡的av网站| 黑人巨大精品欧美一区| 视频一区中文字幕国产| 亚洲欧洲美洲综合色网| 久久久久亚洲蜜桃| 欧美一区二区成人| 欧美日韩欧美一区二区| 国产成人激情av| 久久精品二区亚洲w码| 亚洲mv大片欧洲mv大片精品| 综合久久久久久久| 久久精品视频在线免费观看| 4438x成人网最大色成网站| 一本大道久久a久久精二百 | 精品国产乱码久久久久久1区2区 | 蜜臀国产一区二区三区在线播放| 中文字幕一区二区在线播放| 欧美成人a在线| 91精品国产高清一区二区三区蜜臀 | 欧美精品高清视频| av不卡在线播放| 豆国产96在线|亚洲| 国产主播一区二区| 久久精品久久99精品久久| 日日夜夜精品视频天天综合网| 亚洲精品国产一区二区三区四区在线| 国产精品毛片高清在线完整版| 日韩一区二区在线观看视频播放| 欧美日韩一区二区电影| 欧美色男人天堂| 欧美伊人久久大香线蕉综合69| 色婷婷久久久久swag精品| 99re视频精品| 91久久精品一区二区三区| 99国产精品国产精品久久| 92精品国产成人观看免费| bt欧美亚洲午夜电影天堂| 国产精品一卡二卡| 日韩专区中文字幕一区二区| 亚洲最新视频在线观看| 亚洲精品视频在线观看免费 | 国产亚洲欧美色| 久久久久97国产精华液好用吗| 欧美videos大乳护士334| 日韩欧美在线综合网| 日韩美女在线视频| 久久中文字幕电影| 国产女人18水真多18精品一级做| 欧美国产精品一区二区| 国产欧美1区2区3区| 中文字幕亚洲欧美在线不卡| 亚洲天堂中文字幕| 亚洲777理论| 国产一区二区女| 成人av手机在线观看| 色婷婷av一区二区三区软件| 欧美日韩另类一区| 精品国产乱码久久久久久蜜臀 | 26uuu国产电影一区二区| 亚洲国产精品激情在线观看| 国产成人精品www牛牛影视| 国产美女精品在线| 99久久99久久免费精品蜜臀| 欧美性色黄大片| 精品入口麻豆88视频| 欧美—级在线免费片| 亚洲综合清纯丝袜自拍| 老司机精品视频在线| 成人黄色在线视频| 91精品国产入口在线| 日本一区二区视频在线| 夜夜嗨av一区二区三区四季av| 日韩国产欧美视频| 成人av网站大全| 日韩一区二区视频| 亚洲男人的天堂在线观看| 麻豆精品新av中文字幕| av高清不卡在线| 91精品久久久久久久99蜜桃| 日本一区二区三区四区| 午夜久久久久久电影| 成人午夜视频在线| 日韩欧美在线影院| 一二三四社区欧美黄| 国产福利一区二区三区| 欧美剧情片在线观看| 91影院在线免费观看| 亚洲欧美日本在线| 亚洲国产sm捆绑调教视频| 麻豆国产精品777777在线| 色噜噜久久综合| 2022国产精品视频| 日韩有码一区二区三区| 色综合久久久久| 国产性做久久久久久| 青青草原综合久久大伊人精品优势| 国产91丝袜在线观看| 精品女同一区二区| 丝袜亚洲精品中文字幕一区| 成人综合在线视频| 久久天堂av综合合色蜜桃网| 欧美色网一区二区| 欧美一区二区三区四区高清| 亚洲美女电影在线| 国产福利一区二区三区视频 | 91精品在线免费观看| 亚洲欧美日韩在线播放| 国产成人免费9x9x人网站视频| 欧美变态口味重另类| 丝瓜av网站精品一区二区| 91激情在线视频| 亚洲摸摸操操av| 成a人片亚洲日本久久| 国产日本亚洲高清| 麻豆一区二区99久久久久| 8x8x8国产精品| 亚洲电影在线播放| 欧美性videosxxxxx| 亚洲一区二区三区爽爽爽爽爽| 91丨porny丨在线| 国产精品乱码妇女bbbb| 国产在线精品不卡| 欧美r级在线观看| 国产酒店精品激情| 久久久国产精品午夜一区ai换脸| 国产一区二区三区不卡在线观看| 99久久精品免费| 亚洲欧美日韩中文字幕一区二区三区| 99久久精品一区| 亚洲日本va午夜在线影院| 97se亚洲国产综合自在线观| 亚洲色图在线视频| 色拍拍在线精品视频8848| 亚洲综合清纯丝袜自拍| 欧美艳星brazzers| 日本欧美在线看| 精品国产一二三| 国产成人免费视频一区| 国产精品丝袜一区| 97超碰欧美中文字幕| 亚洲成精国产精品女| 日韩欧美一级二级三级| 韩国女主播成人在线| 中文字幕av一区 二区| 色一区在线观看| 日韩激情在线观看| 久久精品欧美日韩精品| 99视频一区二区| 亚洲国产精品久久久男人的天堂| 正在播放亚洲一区| 国产成人一区在线| 亚洲男同1069视频| 欧美一二区视频| 成a人片亚洲日本久久| 天堂久久久久va久久久久| 日韩精品影音先锋| 99精品偷自拍| 欧美a一区二区|