package org.restcomm.javax.media.mscontrol.networkconnection; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.Vector; import javax.sdp.Attribute; import javax.sdp.Media; import javax.sdp.MediaDescription; import javax.sdp.SdpParseException; public class MediaParser { public final static String AUDIO = "audio"; public final static String VIDEO = "video"; public final static String RTPMAP = "rtpmap"; public final static String FMTP = "fmtp"; public static Map<String, String> payloadVsFormat = new HashMap<String, String>(); static { payloadVsFormat.put("0", "PCMU"); payloadVsFormat.put("3", "GSM"); payloadVsFormat.put("4", "G723"); payloadVsFormat.put("5", "DVI4"); payloadVsFormat.put("6", "DVI4"); payloadVsFormat.put("7", "LPC"); payloadVsFormat.put("8", "PCMA"); payloadVsFormat.put("9", "G722"); payloadVsFormat.put("10", "L16"); payloadVsFormat.put("11", "L16"); payloadVsFormat.put("12", "QCELP"); payloadVsFormat.put("13", "CN"); payloadVsFormat.put("14", "MPA"); payloadVsFormat.put("15", "G728"); payloadVsFormat.put("16", "DVI4"); payloadVsFormat.put("17", "DVI4"); payloadVsFormat.put("18", "G729"); } public static void excludeCodec(MediaDescription md, String[] excludedCodecs) throws SdpParseException { Media media = md.getMedia(); Set<String> excludeFormats = new HashSet<String>(); for (String excludeCodec : excludedCodecs) { for (String standardPayload : payloadVsFormat.keySet()) { String standardCodec = payloadVsFormat.get(standardPayload); if (excludeCodec.equalsIgnoreCase(standardCodec)) { excludeFormats.add(standardPayload); break; } } } Iterator attributes = md.getAttributes(false).iterator(); if (attributes != null) { // rtpmap: while (attributes.hasNext()) { Attribute a = (Attribute) attributes.next(); for (String excludeCodec : excludedCodecs) { if (RTPMAP.equals(a.getName())) { String tokens[] = a.getValue().split(" "); String[] tokens1 = tokens[1].split("/"); String encodingName = tokens1[0]; if (encodingName.equals(excludeCodec)) { excludeFormats.add(tokens[0]); attributes.remove(); } } } } // fmtp: attributes = md.getAttributes(false).iterator(); while (attributes.hasNext()) { Attribute a = (Attribute) attributes.next(); for (String f : excludeFormats) { if (FMTP.equals(a.getName())) { String tokens[] = a.getValue().split(" "); if (tokens[0].equals(f)) { attributes.remove(); } } } } } Vector formats = media.getMediaFormats(false); formats.removeAll(excludeFormats); } public static void RequiredCodec(MediaDescription md, String[] excludedCodecs) throws SdpParseException { } }