⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mediamanager.java

📁 java 开发的sip软电话 源码 jain sip
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
                remoteTransmisionDetails.put("video", sessionRemoteAddress);
            }
            ArrayList ports = new ArrayList();
            ArrayList formatSets = new ArrayList();
            ArrayList contents = new ArrayList();
            ArrayList localPorts = new ArrayList(); 
            for (int i = 0; i < mediaDescriptions.size(); i++) {
                MediaDescription mediaDescription = (MediaDescription) mediaDescriptions.get(i);
                Media media = mediaDescription.getMedia();
                //Media Type
                String mediaType = null;
                try {
                    mediaType = media.getMediaType();
                }
                catch (SdpParseException ex) {
                    fireNonFatalMediaError(new MediaException(
                        "Failed to extract the media type for one of the provided media descriptions!\n"
                        + "Ignoring description!",
                        ex
                        ));
                    continue;
                }
                //Find ports
                try {
                    mediaPort = media.getMediaPort();
                }
                catch (SdpParseException ex) {
                    fireNonFatalMediaError(new MediaException(
                        "Failed to extract port for media type ["
                        + mediaType + "]. Ignoring description!",
                        ex
                        ));
                    continue;
                }
                //Find  formats
                Vector sdpFormats = null;
                try {
                    sdpFormats = media.getMediaFormats(true);
                }
                catch (SdpParseException ex) {
                    fireNonFatalMediaError(new MediaException(
                        "Failed to extract media formats for media type ["
                        + mediaType + "]. Ignoring description!",
                        ex
                        ));
                    continue;
                }

                Connection mediaConnection = mediaDescription.getConnection();
                String mediaRemoteAddress = null;
                if (mediaConnection == null) {
                    if(sessionConnection == null) {
                        throw new MediaException(
                            "A connection parameter was not present in provided session/media description");
                    } else {
                        mediaRemoteAddress = sessionRemoteAddress;
                    }
                } else {
                    try {
                        mediaRemoteAddress = mediaConnection.getAddress();
                    }
                    catch (SdpParseException ex) {
                        throw new MediaException(
                            "Failed to extract the connection address parameter"
                            + "from privided media description", ex);
                    }
                }

                //update the remote address for the current media type in case
                //it is specific for this media (i.e. differs from the main
                //connection address)
                remoteTransmisionDetails.put(mediaType, mediaRemoteAddress);
                //START TRANSMISSION
                try {
                    if (isMediaTransmittable(mediaType)) {
                        remoteAddresses.add(mediaRemoteAddress);
                        ports.add(new Integer(mediaPort));
                        contents.add(mediaType);
                        
                        // Selecting local ports for NAT
                        
                        if(mediaType.trim().equals("video"))
                        	localPorts.add(new Integer(videoPort));
                        else if(mediaType.trim().equals("audio"))
                        	localPorts.add(new Integer(audioPort));
                        else 
                        	localPorts.add(new Integer(mediaPort));
                        
                        formatSets.add(extractTransmittableJmfFormats(
                            sdpFormats));
                    }
                    else{
                        //nothing to transmit here so skip setting the flag
                        //bug report and fix - Gary M. Levin - Telecordia
                        continue;
                    }
                }
                catch (MediaException ex) {
                    fireNonFatalMediaError(new MediaException(
                        "Could not start a transmitter for media type ["
                        + mediaType + "]\nIgnoring media [" + mediaType + "]!",
                        ex
                        ));
                    continue;
                }
                atLeastOneTransmitterStarted = true;
            }
            if (!atLeastOneTransmitterStarted) {
                throw new MediaException(
                		"Todos as tentativas de conex鉶 com dispositivos de som falharam!");
            }
            else {
                startTransmitter(
                    remoteAddresses,
                    ports,
                    formatSets,
                    contents,
                    localPorts);
            }
            //We should be able to receive even if we don't transmit so get this
            //out of the above if clause
            startReceiver(remoteTransmisionDetails);
        }
        finally {
            
        }
    }

    protected void closeProcessor() throws MediaException
    {
        try {
            
            if(processor != null)
            {
                processor.stop();
                processor.close();
            }
            if(avDataSource!=null)
                avDataSource.disconnect();
        }
        finally {
            
        }
    }

    public void stop() throws MediaException
    {
        try {            
            closeStreams();
            closeProcessor();
        }
        finally {
            
        }
    }

    public void closeStreams()
    {
        try {
            removeAllRtpManagers();
            
            stopTransmitters();
            stopReceiver();
            firePlayerStopped();
        }
        finally {
            
        }
    }

    protected void startTransmitter(ArrayList destHosts,
                                  ArrayList ports,
                                  ArrayList formatSets,
                                  ArrayList contents,
                                  ArrayList localPorts) throws MediaException
    {
        try {
            
            if (avDataSource != null) {
                AVTransmitter transmitter =
                    new AVTransmitter(processor,
                                      destHosts,
                                      ports,
                                      formatSets,
                                      contents,
                                      localPorts);
                transmitter.setMediaManagerCallback(this);
                avTransmitters.add(transmitter);
                
                transmitter.start();          
                
            }
        }
        finally {
            
        }
    }

    protected void stopTransmitters()
    {
        try {
            
            for (int i = avTransmitters.size() - 1; i >= 0; i--) {
                try {
                    ( (AVTransmitter) avTransmitters.elementAt(i)).stop();
                    avTransmitters.removeElementAt(i);
                } //Catch everything that comes out as we wouldn't want
                //Some null pointer prevent us from closing a device and thus
                //render it unusable
                catch (Exception exc) {
                    
                }
            }
        }
        finally {
            
        }
    }

    public void setMute(boolean b){
    	mute=b;
    }
    
    public void setMute(){	
    	for(int i=0;i<avTransmitters.size();i++){
    		AVTransmitter avt=(AVTransmitter)avTransmitters.get(i);
    		for(int j=0;j<avt.sendStreams.size();j++){
    			SendStream sS=(SendStream)avt.sendStreams.get(j);
    			try{
    				if(avt.contents.get(j).equals("audio")){
    					if(!mute){
    						sS.stop();
    					}else{
    						sS.start();
    					}    		
    					mute=!mute;
    				}
    		    }catch(IOException e){
    		    	
    		    }
    		}
    	}	
    }

    public void startVideo(){	
    	for(int i=0;i<avTransmitters.size();i++){
    		AVTransmitter avt=(AVTransmitter)avTransmitters.get(i);
    		avt.setTrack(true);
    	}	
    }

    public void stopVideo(){	
    	for(int i=0;i<avTransmitters.size();i++){
    		AVTransmitter avt=(AVTransmitter)avTransmitters.get(i);
    		avt.setTrack(false);
    	}	
    }
    
    protected void startReceiver(Hashtable remoteTransmissionDetails)
    {
        try {
            

            ArrayList sessions = new ArrayList();
            String mediaType = null;

            AVTransmitter at = (AVTransmitter)this.avTransmitters.get(0);

            int remoteAudio = at.findPortForLocal(Integer.parseInt(getAudioPort()));
            int remoteVideo = at.findPortForLocal(Integer.parseInt(getVideoPort()));
            
            if(remoteAudio==-1)
            	remoteAudio=Integer.parseInt(getAudioPort());
            if(remoteVideo==-1)
            	remoteVideo=Integer.parseInt(getVideoPort());
            
            if(remoteTransmissionDetails.get("audio") != null&&false)
                    sessions.add((String)remoteTransmissionDetails.get("audio")
                                 + "/" + /* audioPort */ getAudioPort() + "/" + remoteAudio + "/1/audio");
            if(remoteTransmissionDetails.get("video") != null&&false)
                    sessions.add((String)remoteTransmissionDetails.get("video")
                                 + "/" + /*videoPort*/ getVideoPort() + "/" + remoteVideo + "/1/video");
            
//            avReceiver = new AVReceiver(sessions);
//            avReceiver.setMediaManager(this);
//            avReceiver.initialize();                       
        }
        finally {
            
        }
    }

    protected void stopReceiver()
    {
        try {
            
/*            if (avReceiver != null) {
                avReceiver.close();
                avReceiver = null;
            }*/
        }
        finally {
            
        }
    }

    /**
     * Only stops the receiver without deleting it. After calling this method
     * one can call softStartReceiver to relauch reception.
     */
    public void softStopReceiver()
    {
        try {
            
/*            if (avReceiver != null) {
            //    avReceiver.close();
            //    this.firePlayerStopped();
            }
            
            else
                console.debug(
                    "Attempt to soft stop reception for a null avReceiver");
                    */
        }
        finally
        {
            
        }
    }


    /**
     * Starts a receiver that has been stopped using softStopReceiver().
     */
    public void softStartReceiver()
    {
        try
        {
            
/*            if (avReceiver != null) {
                avReceiver.initialize();
            }
            else
                console.error(
                    "acReceiver is null. Use softStartReceiver only for receivers "
                    +"that had been stopped using softStopReceiver()");
*/
        }finally
        {
            
        }
    }

    void firePlayerStarting(Player player)
    {
        try {            
            MediaEvent evt = new MediaEvent(player);
            for (int i = listeners.size() - 1; i >= 0; i--) {
                ( (MediaListener) listeners.get(i)).playerStarting(evt);
            }
        }
        finally {
            
        }
    }

    void firePlayerStopped()
    {
        try {
            
            for (int i = listeners.size() - 1; i >= 0; i--) {
                ( (MediaListener) listeners.get(i)).playerStopped();
            }
        }
        finally {
            
        }
    }

    void fireNonFatalMediaError(Throwable cause)
    {
        try {
            
            MediaErrorEvent evt = new MediaErrorEvent(cause);
            for (int i = listeners.size() - 1; i >= 0; i--) {
                ( (MediaListener) listeners.get(i)).nonFatalMediaErrorOccurred(
                    evt);
            }
        }
        finally {
            

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -