Search in sources :

Example 1 with AttributeField

use of org.zoolu.sdp.AttributeField in project bigbluebutton by bigbluebutton.

the class SdpUtils method completeSdpNegotiation.

/**
     * Parameter "newSdp" must be the returning value from method's 
     * "makeMediaPayloadsNegotiation" execution.
     * Here the pending attributes will be negotiated as well.
     * 
     * @param newSdp
     * @param localSdp
     * @param remoteSdp
     * 
     */
public static void completeSdpNegotiation(SessionDescriptor newSdp, SessionDescriptor localSdp, SessionDescriptor remoteSdp) {
    try {
        if (newSdp.getMediaDescriptors().size() == 0) {
            // Something is wrong.
            // We should have at least a "audio" media descriptor with 
            // all audio payloads suported.
            log.error("No media descriptors after \"makeMediaPayloadsNegotiation\".");
            return;
        }
        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) {
                // First we make the negotiation of remote attributes with 
                // local ones to generate the new SDP "newSdp".
                Vector remoteAttributes = remoteDescriptor.getAttributes();
                for (Enumeration atributesEnum = remoteAttributes.elements(); atributesEnum.hasMoreElements(); ) {
                    AttributeField remoteAttribute = (AttributeField) atributesEnum.nextElement();
                    makeAttributeNegotiation(newSdp, localDescriptor, remoteAttribute);
                }
                // Now we add to "newSdp" all the local attributes that 
                // were not negotiated yet.
                Vector localAttributes = localDescriptor.getAttributes();
                for (Enumeration atributesEnum = localAttributes.elements(); atributesEnum.hasMoreElements(); ) {
                    AttributeField localAttribute = (AttributeField) atributesEnum.nextElement();
                    MediaDescriptor newLocalDescriptor = newSdp.getMediaDescriptor(localDescriptor.getMedia().getMedia());
                    if (isPayloadRelatedAttribute(localAttribute)) {
                        String payloadId = getPayloadIdFromAttribute(localAttribute);
                        if (findAttributeByPayloadId(localAttribute.getAttributeName(), payloadId, newLocalDescriptor) == null) {
                            newLocalDescriptor.addAttribute(localAttribute);
                        }
                    } else if (newLocalDescriptor.getAttribute(localAttribute.getAttributeName()) == null) {
                        newLocalDescriptor.addAttribute(localAttribute);
                    }
                }
            }
        }
    } catch (Exception exception) {
        log.error("Failure creating initial SDP: " + exception.toString());
    }
}
Also used : Enumeration(java.util.Enumeration) AttributeField(org.zoolu.sdp.AttributeField) MediaDescriptor(org.zoolu.sdp.MediaDescriptor) Vector(java.util.Vector)

Example 2 with AttributeField

use of org.zoolu.sdp.AttributeField in project bigbluebutton by bigbluebutton.

the class SdpUtils method getFormatList.

private static String getFormatList(Vector mediaAttributes) {
    AttributeField mediaAttribute = null;
    String formatList = "";
    for (Enumeration attributeEnum = mediaAttributes.elements(); attributeEnum.hasMoreElements(); ) {
        mediaAttribute = (AttributeField) attributeEnum.nextElement();
        if (mediaAttribute.getAttributeName().equalsIgnoreCase(Codec.ATTRIBUTE_RTPMAP)) {
            if (!formatList.isEmpty()) {
                formatList += " ";
            }
            formatList += getPayloadIdFromAttribute(mediaAttribute);
        }
    }
    return formatList;
}
Also used : Enumeration(java.util.Enumeration) AttributeField(org.zoolu.sdp.AttributeField)

Example 3 with AttributeField

use of org.zoolu.sdp.AttributeField in project bigbluebutton by bigbluebutton.

the class SdpUtils method makeAttributeNegotiation.

/**
     * Here we make the negotiation of all attributes besides "rtpmap" (
     * these are negotiated on "makeMediaPayloadsNegotiation" method).
     * 
     * @param newSdp
     * @param localMedia
     * @param remoteAttribute
     */
private static void makeAttributeNegotiation(SessionDescriptor newSdp, MediaDescriptor localMedia, AttributeField remoteAttribute) {
    try {
        if (remoteAttribute.getAttributeName().equals(Codec.ATTRIBUTE_RTPMAP)) {
            log.info("\"rtpmap\" attributes were already negotiated.");
        } else if (!isPayloadRelatedAttribute(remoteAttribute)) {
            // We do nothing with attributes that are not payload 
            // related, like: "ptime", "direction", etc.
            // For now, we consider that they don't demand negotiation.                
            log.info("Attribute is not payload related. Do not negotiate it...");
        } else {
            String payloadId = getPayloadIdFromAttribute(remoteAttribute);
            if ("".equals(payloadId)) {
                log.error("Payload id not found on attribute: Name = [" + remoteAttribute.getAttributeName() + "], Value = [" + remoteAttribute.getAttributeValue() + "].");
            } else if (findAttributeByPayloadId(Codec.ATTRIBUTE_RTPMAP, payloadId, newSdp.getMediaDescriptor(localMedia.getMedia().getMedia())) != null) {
                // We must be sure this attribute is related with a payload 
                // already present on newSdp.                    
                //                    log.debug("Payload " + payloadId + " present on newSdp.");
                AttributeField localAttribute = findAttributeByPayloadId(remoteAttribute.getAttributeName(), payloadId, localMedia);
                Codec sipCodec = CodecFactory.getInstance().getSIPAudioCodec(Integer.valueOf(payloadId));
                if (sipCodec != null) {
                    String localAttibuteValue = "";
                    if (localAttribute != null) {
                        localAttibuteValue = localAttribute.getAttributeValue();
                    } else {
                        log.info("Attribute not found on local media.");
                    }
                    String attributeValueResult = sipCodec.codecNegotiateAttribute(remoteAttribute.getAttributeName(), localAttibuteValue, remoteAttribute.getAttributeValue());
                    if ((attributeValueResult != null) && (!"".equals(attributeValueResult))) {
                        AttributeField af = new AttributeField(remoteAttribute.getAttributeName(), attributeValueResult);
                        MediaDescriptor md = newSdp.getMediaDescriptor(localMedia.getMedia().getMedia());
                        md.addAttribute(af);
                    }
                } else {
                    log.warn("Codec not found!");
                }
            }
        }
    } catch (Exception exception) {
        log.error("Failure creating initial SDP: " + exception.toString());
    }
}
Also used : Codec(org.red5.app.sip.codecs.Codec) AttributeField(org.zoolu.sdp.AttributeField) MediaDescriptor(org.zoolu.sdp.MediaDescriptor)

Example 4 with AttributeField

use of org.zoolu.sdp.AttributeField in project bigbluebutton by bigbluebutton.

the class SdpUtils method parseAttributeField.

private static AttributeField parseAttributeField(String codecMediaAttribute) {
    AttributeField newAttribute = null;
    //        log.debug("codecMediaAttribute = [" + codecMediaAttribute + "].");
    String attribName = codecMediaAttribute.substring(0, codecMediaAttribute.indexOf(":"));
    String attribValue = codecMediaAttribute.substring(codecMediaAttribute.indexOf(":") + 1);
    if ((!attribName.isEmpty()) && (!attribValue.isEmpty())) {
        newAttribute = new AttributeField(attribName, attribValue);
    }
    return newAttribute;
}
Also used : AttributeField(org.zoolu.sdp.AttributeField)

Example 5 with AttributeField

use of org.zoolu.sdp.AttributeField in project bigbluebutton by bigbluebutton.

the class SdpUtils method getFormatList.

private static String getFormatList(Vector mediaAttributes) {
    AttributeField mediaAttribute = null;
    String formatList = "";
    for (Enumeration attributeEnum = mediaAttributes.elements(); attributeEnum.hasMoreElements(); ) {
        mediaAttribute = (AttributeField) attributeEnum.nextElement();
        if (mediaAttribute.getAttributeName().equalsIgnoreCase(Codec.ATTRIBUTE_RTPMAP)) {
            if (!formatList.isEmpty()) {
                formatList += " ";
            }
            formatList += getPayloadIdFromAttribute(mediaAttribute);
        }
    }
    return formatList;
}
Also used : Enumeration(java.util.Enumeration) AttributeField(org.zoolu.sdp.AttributeField)

Aggregations

AttributeField (org.zoolu.sdp.AttributeField)15 Enumeration (java.util.Enumeration)10 Vector (java.util.Vector)8 MediaDescriptor (org.zoolu.sdp.MediaDescriptor)6 Codec (org.red5.app.sip.codecs.Codec)4 MediaField (org.zoolu.sdp.MediaField)4 SessionDescriptor (org.zoolu.sdp.SessionDescriptor)4