public static void main(String[] args) throws SdpParseException, SdpException { String sdpFields = "v=0\r\n" + "o=4855 13760799956958020 13760799956958020 IN IP4 166.35.224.216\r\n" + "s=nortelnetworks\r\n" + "p=+1 972 684 1000\r\n" + "c=IN IP4 166.35.224.216\r\n" + "t=0 0\r\n" + "m=audio 50006 RTP/AVP 0 8 4 18\r\n" + "a=rtpmap:0 PCMU/8000\r\n" + "a=rtpmap:8 PCMA/8000\r\n" + "a=rtpmap:4 G723/8000\r\n" + "a=rtpmap:18 G729A/8000\r\n" + "a=ptime:30\r\n"; SdpFactory sdpFactory = new SdpFactory(); SessionDescription sessionDescription = sdpFactory.createSessionDescription(sdpFields); System.out.println("sessionDescription = " + sessionDescription); Vector mediaDescriptions = sessionDescription.getMediaDescriptions(true); for (int i = 0; i < mediaDescriptions.size(); i++) { MediaDescription m = (MediaDescription) mediaDescriptions.elementAt(i); System.out.println("m = " + m.toString()); Media media = m.getMedia(); Vector formats = media.getMediaFormats(false); System.out.println("formats = " + formats); } }
public MediaDestination getMediaDestination(SessionDescription sessionDescription) throws NoCodecException { InetAddress destAddress = sessionDescription.getIpAddress(); List<MediaDescription> mediaDescriptions = sessionDescription.getMediaDescriptions(); for (MediaDescription mediaDescription : mediaDescriptions) { if (RFC4566.MEDIA_AUDIO.equals(mediaDescription.getType())) { for (Codec offerCodec : mediaDescription.getCodecs()) { if (supportedCodecs.contains(offerCodec)) { String offerCodecName = offerCodec.getName(); if (offerCodecName.equalsIgnoreCase(RFC3551.PCMU) || offerCodecName.equalsIgnoreCase(RFC3551.PCMA)) { int destPort = mediaDescription.getPort(); if (mediaDescription.getIpAddress() != null) { destAddress = mediaDescription.getIpAddress(); } MediaDestination mediaDestination = new MediaDestination(); mediaDestination.setDestination(destAddress.getHostAddress()); mediaDestination.setPort(destPort); mediaDestination.setCodec(offerCodec); return mediaDestination; } } } } } throw new NoCodecException(); }
public SessionDescription createSessionDescription(SessionDescription offer, int localRtpPort) throws IOException { SessionDescription sessionDescription = new SessionDescription(); sessionDescription.setUsername("user1"); sessionDescription.setId(random.nextInt(Integer.MAX_VALUE)); sessionDescription.setVersion(random.nextInt(Integer.MAX_VALUE)); Config config = userAgent.getConfig(); InetAddress inetAddress = config.getPublicInetAddress(); if (inetAddress == null) { inetAddress = config.getLocalInetAddress(); } sessionDescription.setIpAddress(inetAddress); sessionDescription.setName("-"); sessionDescription.setAttributes(new Hashtable<String, String>()); List<Codec> codecs; if (offer == null) { codecs = supportedCodecs; } else { codecs = new ArrayList<Codec>(); for (MediaDescription mediaDescription : offer.getMediaDescriptions()) { if (RFC4566.MEDIA_AUDIO.equals(mediaDescription.getType())) { for (Codec codec : mediaDescription.getCodecs()) { if (supportedCodecs.contains(codec)) { codecs.add(codec); } } } } } MediaDescription mediaDescription = new MediaDescription(); Hashtable<String, String> attributes = new Hashtable<String, String>(); attributes.put(RFC4566.ATTR_SENDRECV, ""); mediaDescription.setAttributes(attributes); mediaDescription.setType(RFC4566.MEDIA_AUDIO); mediaDescription.setPort(localRtpPort); mediaDescription.setCodecs(codecs); List<MediaDescription> mediaDescriptions = new ArrayList<MediaDescription>(); mediaDescriptions.add(mediaDescription); sessionDescription.setMediaDescriptions(mediaDescriptions); return sessionDescription; }