Package org.zoolu.sdp

Examples of org.zoolu.sdp.SessionDescriptor


     * @return Return the initial local SDP.
     */
    public static SessionDescriptor createInitialSdp(String userName, String viaAddress,
        int audioPort, int videoPort, String audioCodecsPrecedence) {
       
        SessionDescriptor initialDescriptor = null;
               
        try {           
            log.debug("userName = [" + userName + "], viaAddress = [" + viaAddress +
                    "], audioPort = [" + audioPort + "], videoPort = [" + videoPort +
                    "], audioCodecsPrecedence = [" + audioCodecsPrecedence + "]." );
           
            int audioCodecsNumber = CodecFactory.getInstance().getAvailableAudioCodecsCount();
            int videoCodecsNumber = CodecFactory.getInstance().getAvailableVideoCodecsCount();
           
            if ((audioCodecsNumber == 0) && (videoCodecsNumber == 0)) {               
                log.debug("audioCodecsNumber = [" + audioCodecsNumber +
                        "], videoCodecsNumber = [" + videoCodecsNumber + "].");               
                return null;
            }
           
            //Bug Session descriptor cannot have spaces.. Username is not forced to be compliant with SIP Spec
            /* RFC 2327 - page 8 of April 1998 Version,
                Origin

                   o=<username> <session id> <version> <network type> <address type>
                   <address>

                   The "o=" field gives the originator of the session (their username
                   and the address of the user's host) plus a session id and session
                   version number.

                   <username> is the user's login on the originating host, or it is "-"
                   if the originating host does not support the concept of user ids.
                   <username> must not contain spaces.  <session id> is a numeric string
                   such that the tuple of <username>, <session id>, <network type>,
                   <address type> and <address> form a globally unique identifier for
                   the session.
             */

            String owner = userName.replaceAll(" ", "_");

            initialDescriptor = new SessionDescriptor(owner, viaAddress);
                       
            if (initialDescriptor == null) {               
                log.error("Error instantiating the initialDescriptor!");                
                return null;
            }
           
            if (audioCodecsNumber > 0) {               
                Codec[] audioCodecs;
                Vector<AttributeField> audioAttributes = new Vector<AttributeField>();
               
                if (audioCodecsPrecedence.isEmpty()) {                   
                    audioCodecs = CodecFactory.getInstance().getAvailableAudioCodecs();
                } else {                   
                    audioCodecs = CodecFactory.getInstance().getAvailableAudioCodecsWithPrecedence(audioCodecsPrecedence);
                }
               
                for (int audioIndex = 0; audioIndex < audioCodecsNumber; audioIndex++) {                  
                    String payloadId = String.valueOf(audioCodecs[audioIndex].getCodecId());
                    String rtpmapParamValue = payloadId;
                    rtpmapParamValue += " " + audioCodecs[audioIndex].getCodecName();
                    rtpmapParamValue += "/" + audioCodecs[audioIndex].getSampleRate() + "/1";
                   
                    log.debug("Adding rtpmap for payload [" + payloadId +
                            "] with value = [" + rtpmapParamValue + "]." );
                   
                    audioAttributes.add(new AttributeField(Codec.ATTRIBUTE_RTPMAP, rtpmapParamValue));
                   
                    String[] codecMediaAttributes = audioCodecs[audioIndex].getCodecMediaAttributes();
                   
                    if (codecMediaAttributes != null) {                       
                        log.debug("Adding " + codecMediaAttributes.length +
                                " audio codec media attributes." );
                       
                        for (int attribIndex = 0; attribIndex < codecMediaAttributes.length; attribIndex++) {                           
                           log.debug("Adding audio media attribute [" +
                                    codecMediaAttributes[attribIndex] + "]." );
                           
                            AttributeField newAttribute = parseAttributeField(codecMediaAttributes[attribIndex]);
                           
                            if (newAttribute != null) {                               
                                audioAttributes.add(newAttribute);
                            }
                        }
                    } else {                       
                        log.warn("Audio codec has no especific media attributes." );
                    }
                }
               
                // Calculate the format list to be used on MediaDescriptor creation.
                String formatList = getFormatList(audioAttributes);
               
                for (Enumeration attributesEnum = audioAttributes.elements(); attributesEnum.hasMoreElements();) {                   
                    AttributeField audioAttribute = (AttributeField) attributesEnum.nextElement();
                   
                    if (initialDescriptor.getMediaDescriptor(Codec.MEDIA_TYPE_AUDIO) == null) {                       
                        log.debug("Creating audio media descriptor." );
                       
                      MediaField mf = new MediaField(Codec.MEDIA_TYPE_AUDIO, audioPort, 0, "RTP/AVP", formatList);
                        initialDescriptor.addMedia(mf, audioAttribute);
                    } else {                       
                        log.debug("Just adding attribute.");
                        initialDescriptor.getMediaDescriptor(Codec.MEDIA_TYPE_AUDIO).addAttribute(audioAttribute);
                    }
                }
               
                String[] commonAudioMediaAttributes = CodecFactory.getInstance().getCommonAudioMediaAttributes();
               
                if (commonAudioMediaAttributes != null) {                   
                    log.debug("Adding " + commonAudioMediaAttributes.length + " common audio media attributes." );
                   
                    for (int attribIndex = 0; attribIndex < commonAudioMediaAttributes.length; attribIndex++) {                       
                        log.debug("Adding common audio media attribute [" + commonAudioMediaAttributes[attribIndex] + "].");
                       
                        AttributeField newAttribute = parseAttributeField(commonAudioMediaAttributes[attribIndex]);
                       
                        if (newAttribute != null) {                           
                            initialDescriptor.getMediaDescriptor(Codec.MEDIA_TYPE_AUDIO).addAttribute( newAttribute);
                        }
                    }
                } else {                   
                    log.debug("No common audio media attributes.");
                }
            }
           
            if (videoCodecsNumber > 0) {               
                Codec[] videoCodecs = CodecFactory.getInstance().getAvailableVideoCodecs();
                Vector<AttributeField> videoAttributes = new Vector<AttributeField>();
               
                for (int videoIndex = 0; videoIndex < audioCodecsNumber; videoIndex++) {                   
                    String payloadId = String.valueOf(videoCodecs[videoIndex].getCodecId());
                    String rtpmapParamValue = payloadId;
                    rtpmapParamValue += " " + videoCodecs[videoIndex].getCodecName();
                    rtpmapParamValue += "/" + videoCodecs[videoIndex].getSampleRate() + "/1";
                   
                    log.debug("Adding rtpmap for payload [" + payloadId + "] with value = [" + rtpmapParamValue + "].");
                   
                    videoAttributes.add(new AttributeField(Codec.ATTRIBUTE_RTPMAP, rtpmapParamValue));                   
                    String[] codecMediaAttributes = videoCodecs[videoIndex].getCodecMediaAttributes();
                   
                    if (codecMediaAttributes != null) {                       
                        log.debug("Adding " + codecMediaAttributes.length + " video codec media attributes.");
                       
                        for (int attribIndex = 0; attribIndex < codecMediaAttributes.length; attribIndex++) {                           
                            log.debug("Adding video media attribute [" + codecMediaAttributes[attribIndex] + "].");
                           
                            AttributeField newAttribute = parseAttributeField(codecMediaAttributes[attribIndex]);
                           
                            if (newAttribute != null) {                               
                                videoAttributes.add(newAttribute);
                            }
                        }
                    } else {
                       log.info("Video codec has no especific media attributes.");
                    }
                }
               
                // Calculate the format list to be used on MediaDescriptor creation.
                String formatList = getFormatList(videoAttributes);
               
                for (Enumeration attributesEnum = videoAttributes.elements(); attributesEnum.hasMoreElements();) {                   
                    AttributeField videoAttribute = (AttributeField) attributesEnum.nextElement();
                   
                    if (initialDescriptor.getMediaDescriptor(Codec.MEDIA_TYPE_VIDEO) == null) {   
                      MediaField mf = new MediaField(Codec.MEDIA_TYPE_VIDEO, audioPort, 0, "RTP/AVP", formatList);
                        initialDescriptor.addMedia(mf, videoAttribute);
                    } else {
                        initialDescriptor.getMediaDescriptor(Codec.MEDIA_TYPE_VIDEO).addAttribute(videoAttribute);
                    }
                }
               
                String[] commonVideoMediaAttributes = CodecFactory.getInstance().getCommonAudioMediaAttributes();
               
                if (commonVideoMediaAttributes != null) {                   
                    log.debug("Adding " + commonVideoMediaAttributes.length + " common video media attributes.");
                   
                    for (int attribIndex = 0; attribIndex < commonVideoMediaAttributes.length; attribIndex++) {                       
                        log.debug("Adding common video media attribute [" + commonVideoMediaAttributes[attribIndex] + "]." );
                       
                        AttributeField newAttribute = parseAttributeField(commonVideoMediaAttributes[attribIndex]);
                       
                        if (newAttribute != null) {                           
                            initialDescriptor.getMediaDescriptor(Codec.MEDIA_TYPE_VIDEO).addAttribute(newAttribute);
                        }
                    }
                } else {                   
                    log.info("No common video media attributes.");
                }
View Full Code Here


     *         payloads negotiation.
     */
    public static SessionDescriptor makeMediaPayloadsNegotiation(SessionDescriptor localSdp, SessionDescriptor remoteSdp) {       
      log.debug("makeMediaPayloadsNegotiation");
     
      SessionDescriptor newSdp = null;   
        try {           
            newSdp = new SessionDescriptor(remoteSdp.getOrigin(), remoteSdp.getSessionName(),
                    localSdp.getConnection(), localSdp.getTime());
           
            Vector remoteDescriptors = remoteSdp.getMediaDescriptors();
           
            for (Enumeration descriptorsEnum = remoteDescriptors.elements(); descriptorsEnum.hasMoreElements();) {               
                MediaDescriptor remoteDescriptor = (MediaDescriptor) descriptorsEnum.nextElement();
                MediaDescriptor localDescriptor = localSdp.getMediaDescriptor(remoteDescriptor.getMedia().getMedia() );
               
                if (localDescriptor != null) {                   
                    Vector remoteAttributes = remoteDescriptor.getAttributes(Codec.ATTRIBUTE_RTPMAP);
                    Vector<AttributeField> newSdpAttributes = new Vector<AttributeField>();
                   
                    for (Enumeration attributesEnum = remoteAttributes.elements(); attributesEnum.hasMoreElements();) {                       
                        AttributeField remoteAttribute = (AttributeField) attributesEnum.nextElement();
                       
                        String payloadId = getPayloadIdFromAttribute(remoteAttribute);
                       
                        if ("".equals(payloadId)) {                           
                            log.error("Payload id not found on attribute: Name = [" +
                                    remoteAttribute.getAttributeName() + "], Value = [" +
                                    remoteAttribute.getAttributeValue() + "]." );
                        } else if (findAttributeByPayloadId(remoteAttribute.getAttributeName(),
                            payloadId, localDescriptor) != null) {                           
                            newSdpAttributes.add(remoteAttribute);
                        }
                    }
                   
                    // Calculate the format list to be used on MediaDescriptor creation.
                    String formatList = getFormatList(newSdpAttributes);
                   
                    for (Enumeration attributesEnum = newSdpAttributes.elements(); attributesEnum.hasMoreElements();) {                       
                        AttributeField mediaAttribute = (AttributeField) attributesEnum.nextElement();
                       
                        if (newSdp.getMediaDescriptors().size() == 0) { 
                          MediaField mf = new MediaField(localDescriptor.getMedia().getMedia(),
                                                localDescriptor.getMedia().getPort(),
                                                0, localDescriptor.getMedia().getTransport(),
                                                formatList);
                            newSdp.addMediaDescriptor(new MediaDescriptor(mf, localDescriptor.getConnection()));
                        }
                       
                        newSdp.getMediaDescriptor(localDescriptor.getMedia().getMedia()).addAttribute( mediaAttribute );
                    }
                }
            }
        } catch (Exception exception) {           
            log.error("Failure creating initial SDP: " + exception.toString());
View Full Code Here

     * @return Return the initial local SDP.
     */
    public static SessionDescriptor createInitialSdp(String userName, String viaAddress,
        int audioPort, int videoPort, String audioCodecsPrecedence) {
       
        SessionDescriptor initialDescriptor = null;
               
        try {           
//            log.debug("userName = [" + userName + "], viaAddress = [" + viaAddress +
//                    "], audioPort = [" + audioPort + "], videoPort = [" + videoPort +
//                    "], audioCodecsPrecedence = [" + audioCodecsPrecedence + "]." );
           
            int audioCodecsNumber = CodecFactory.getInstance().getAvailableAudioCodecsCount();
            int videoCodecsNumber = CodecFactory.getInstance().getAvailableVideoCodecsCount();
           
            if ((audioCodecsNumber == 0) && (videoCodecsNumber == 0)) {               
                log.debug("audioCodecsNumber = [" + audioCodecsNumber +
                        "], videoCodecsNumber = [" + videoCodecsNumber + "].");               
                return null;
            }
           
            initialDescriptor = new SessionDescriptor(userName, viaAddress);
           
            if (initialDescriptor == null) {               
                log.error("Error instantiating the initialDescriptor!");                
                return null;
            }
           
            if (audioCodecsNumber > 0) {               
                Codec[] audioCodecs;
                Vector audioAttributes = new Vector();
               
                if (audioCodecsPrecedence.isEmpty()) {                   
                    audioCodecs = CodecFactory.getInstance().getAvailableAudioCodecs();
                } else {                   
                    audioCodecs = CodecFactory.getInstance().getAvailableAudioCodecsWithPrecedence(audioCodecsPrecedence);
                }
               
                for (int audioIndex = 0; audioIndex < audioCodecsNumber; audioIndex++) {                  
                    String payloadId = String.valueOf(audioCodecs[audioIndex].getCodecId());
                    String rtpmapParamValue = payloadId;
                    rtpmapParamValue += " " + audioCodecs[audioIndex].getCodecName();
                    rtpmapParamValue += "/" + audioCodecs[audioIndex].getSampleRate() + "/1";
                   
//                    log.debug("Adding rtpmap for payload [" + payloadId +
//                            "] with value = [" + rtpmapParamValue + "]." );
                   
                    audioAttributes.add(new AttributeField(Codec.ATTRIBUTE_RTPMAP, rtpmapParamValue));
                   
                    String[] codecMediaAttributes = audioCodecs[audioIndex].getCodecMediaAttributes();
                   
                    if (codecMediaAttributes != null) {                       
//                        log.debug("Adding " + codecMediaAttributes.length +
//                                " audio codec media attributes." );
                       
                        for (int attribIndex = 0; attribIndex < codecMediaAttributes.length; attribIndex++) {                           
//                            log.debug("Adding audio media attribute [" +
//                                    codecMediaAttributes[attribIndex] + "]." );
                           
                            AttributeField newAttribute = parseAttributeField(codecMediaAttributes[attribIndex]);
                           
                            if (newAttribute != null) {                               
                                audioAttributes.add(newAttribute);
                            }
                        }
                    } else {                       
                        log.warn("Audio codec has no especific media attributes." );
                    }
                }
               
                // Calculate the format list to be used on MediaDescriptor creation.
                String formatList = getFormatList(audioAttributes);
               
                for (Enumeration attributesEnum = audioAttributes.elements(); attributesEnum.hasMoreElements();) {                   
                    AttributeField audioAttribute = (AttributeField) attributesEnum.nextElement();
                   
                    if (initialDescriptor.getMediaDescriptor(Codec.MEDIA_TYPE_AUDIO) == null) {                       
//                        log.debug("Creating audio media descriptor." );
                       
                      MediaField mf = new MediaField(Codec.MEDIA_TYPE_AUDIO, audioPort, 0, "RTP/AVP", formatList);
                        initialDescriptor.addMedia(mf, audioAttribute);
                    } else {                       
//                        log.debug("Just adding attribute.");
                        initialDescriptor.getMediaDescriptor(Codec.MEDIA_TYPE_AUDIO).addAttribute(audioAttribute);
                    }
                }
               
                String[] commonAudioMediaAttributes = CodecFactory.getInstance().getCommonAudioMediaAttributes();
               
                if (commonAudioMediaAttributes != null) {                   
//                    log.debug("Adding " + commonAudioMediaAttributes.length + " common audio media attributes." );
                   
                    for (int attribIndex = 0; attribIndex < commonAudioMediaAttributes.length; attribIndex++) {                       
//                        log.debug("Adding common audio media attribute [" + commonAudioMediaAttributes[attribIndex] + "].");
                       
                        AttributeField newAttribute = parseAttributeField(commonAudioMediaAttributes[attribIndex]);
                       
                        if (newAttribute != null) {                           
                            initialDescriptor.getMediaDescriptor(Codec.MEDIA_TYPE_AUDIO).addAttribute( newAttribute);
                        }
                    }
                } else {                   
                    log.debug("No common audio media attributes.");
                }
            }
           
            if (videoCodecsNumber > 0) {               
                Codec[] videoCodecs = CodecFactory.getInstance().getAvailableVideoCodecs();
                Vector videoAttributes = new Vector();
               
                for (int videoIndex = 0; videoIndex < audioCodecsNumber; videoIndex++) {                   
                    String payloadId = String.valueOf(videoCodecs[videoIndex].getCodecId());
                    String rtpmapParamValue = payloadId;
                    rtpmapParamValue += " " + videoCodecs[videoIndex].getCodecName();
                    rtpmapParamValue += "/" + videoCodecs[videoIndex].getSampleRate() + "/1";
                   
//                    log.debug("Adding rtpmap for payload [" + payloadId + "] with value = [" + rtpmapParamValue + "].");
                   
                    videoAttributes.add(new AttributeField(Codec.ATTRIBUTE_RTPMAP, rtpmapParamValue));                   
                    String[] codecMediaAttributes = videoCodecs[videoIndex].getCodecMediaAttributes();
                   
                    if (codecMediaAttributes != null) {                       
//                        log.debug("Adding " + codecMediaAttributes.length + " video codec media attributes.");
                       
                        for (int attribIndex = 0; attribIndex < codecMediaAttributes.length; attribIndex++) {                           
//                            log.debug("Adding video media attribute [" + codecMediaAttributes[attribIndex] + "].");
                           
                            AttributeField newAttribute = parseAttributeField(codecMediaAttributes[attribIndex]);
                           
                            if (newAttribute != null) {                               
                                videoAttributes.add(newAttribute);
                            }
                        }
                    } else {
                       log.info("Video codec has no especific media attributes.");
                    }
                }
               
                // Calculate the format list to be used on MediaDescriptor creation.
                String formatList = getFormatList(videoAttributes);
               
                for (Enumeration attributesEnum = videoAttributes.elements(); attributesEnum.hasMoreElements();) {                   
                    AttributeField videoAttribute = (AttributeField) attributesEnum.nextElement();
                   
                    if (initialDescriptor.getMediaDescriptor(Codec.MEDIA_TYPE_VIDEO) == null) {   
                      MediaField mf = new MediaField(Codec.MEDIA_TYPE_VIDEO, audioPort, 0, "RTP/AVP", formatList);
                        initialDescriptor.addMedia(mf, videoAttribute);
                    } else {
                        initialDescriptor.getMediaDescriptor(Codec.MEDIA_TYPE_VIDEO).addAttribute(videoAttribute);
                    }
                }
               
                String[] commonVideoMediaAttributes = CodecFactory.getInstance().getCommonAudioMediaAttributes();
               
                if (commonVideoMediaAttributes != null) {                   
//                    log.debug("Adding " + commonVideoMediaAttributes.length + " common video media attributes.");
                   
                    for (int attribIndex = 0; attribIndex < commonVideoMediaAttributes.length; attribIndex++) {                       
//                        log.debug("Adding common video media attribute [" + commonVideoMediaAttributes[attribIndex] + "]." );
                       
                        AttributeField newAttribute = parseAttributeField(commonVideoMediaAttributes[attribIndex]);
                       
                        if (newAttribute != null) {                           
                            initialDescriptor.getMediaDescriptor(Codec.MEDIA_TYPE_VIDEO).addAttribute(newAttribute);
                        }
                    }
                } else {                   
                    log.info("No common video media attributes.");
                }
View Full Code Here

     *         payloads negotiation.
     */
    public static SessionDescriptor makeMediaPayloadsNegotiation(SessionDescriptor localSdp, SessionDescriptor remoteSdp) {       
      log.debug("makeMediaPayloadsNegotiation");
     
      SessionDescriptor newSdp = null;   
        try {           
            newSdp = new SessionDescriptor(remoteSdp.getOrigin(), remoteSdp.getSessionName(),
                    localSdp.getConnection(), localSdp.getTime());
           
            Vector remoteDescriptors = remoteSdp.getMediaDescriptors();
           
            for (Enumeration descriptorsEnum = remoteDescriptors.elements(); descriptorsEnum.hasMoreElements();) {               
                MediaDescriptor remoteDescriptor = (MediaDescriptor) descriptorsEnum.nextElement();
                MediaDescriptor localDescriptor = localSdp.getMediaDescriptor(remoteDescriptor.getMedia().getMedia() );
               
                if (localDescriptor != null) {                   
                    Vector remoteAttributes = remoteDescriptor.getAttributes(Codec.ATTRIBUTE_RTPMAP);
                    Vector newSdpAttributes = new Vector();
                   
                    for (Enumeration attributesEnum = remoteAttributes.elements(); attributesEnum.hasMoreElements();) {                       
                        AttributeField remoteAttribute = (AttributeField) attributesEnum.nextElement();
                       
                        String payloadId = getPayloadIdFromAttribute(remoteAttribute);
                       
                        if ("".equals(payloadId)) {                           
                            log.error("Payload id not found on attribute: Name = [" +
                                    remoteAttribute.getAttributeName() + "], Value = [" +
                                    remoteAttribute.getAttributeValue() + "]." );
                        } else if (findAttributeByPayloadId(remoteAttribute.getAttributeName(),
                            payloadId, localDescriptor) != null) {                           
                            newSdpAttributes.add(remoteAttribute);
                        }
                    }
                   
                    // Calculate the format list to be used on MediaDescriptor creation.
                    String formatList = getFormatList(newSdpAttributes);
                   
                    for (Enumeration attributesEnum = newSdpAttributes.elements(); attributesEnum.hasMoreElements();) {                       
                        AttributeField mediaAttribute = (AttributeField) attributesEnum.nextElement();
                       
                        if (newSdp.getMediaDescriptors().size() == 0) { 
                          MediaField mf = new MediaField(localDescriptor.getMedia().getMedia(),
                                                localDescriptor.getMedia().getPort(),
                                                0, localDescriptor.getMedia().getTransport(),
                                                formatList);
                            newSdp.addMediaDescriptor(new MediaDescriptor(mf, localDescriptor.getConnection()));
                        }
                       
                        newSdp.getMediaDescriptor(localDescriptor.getMedia().getMedia()).addAttribute( mediaAttribute );
                    }
                }
            }
        } catch (Exception exception) {           
            log.error("Failure creating initial SDP: " + exception.toString());
View Full Code Here

TOP

Related Classes of org.zoolu.sdp.SessionDescriptor

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.