📄 rtpurlparser.java
字号:
package net.sf.fmj.media.datasink.rtp;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * Parses JMF RTP URLs into ParsedRTPUrl. * May only contain 1 or 2 elements (see examples). An element is like: 192.168.1.4:8000/audio/16 * * @author Ken Larson * */public class RTPUrlParser{ // example URL 1: rtp://224.2.231.36:22224/video&224.2.231.36:22226/audio // example URL 2: rtp://192.168.1.4:8000/audio/16 private static final Pattern pattern = Pattern.compile( "rtp://" + "([a-zA-Z_/\\.0-9]+)" + // host "(:([0-9]+))" + // port "(/(audio|video)" + // audio or video "(/([0-9]+))?)" + // ttl - optional "(\\&" + // same pattern again, but this one is optional "([a-zA-Z_/\\.0-9]+)" + // host "(:([0-9]+))" + // port "(/(audio|video)" + // audio or video "(/([0-9]+))?)" + // ttl - optional ")?" ); public static ParsedRTPUrl parse(String url) throws RTPUrlParserException { Matcher m = pattern.matcher(url); if (!m.matches()) throw new RTPUrlParserException("URL does not match regular expression for RTP URLs"); ParsedRTPUrlElement e = extract(m, 0); if (m.group(9) == null) // if only 1 element return new ParsedRTPUrl(e); ParsedRTPUrlElement e2 = extract(m, 8); if (e2.type.equals(e.type)) throw new RTPUrlParserException("Both elements of the RTP URL have type " + e.type); return new ParsedRTPUrl(e, e2); } private static ParsedRTPUrlElement extract(Matcher m, int offset) throws RTPUrlParserException { ParsedRTPUrlElement e = new ParsedRTPUrlElement(); try { e.host = m.group(offset + 1); e.port = Integer.parseInt(m.group(offset + 3)); e.type = m.group(offset + 5); if (m.group(offset + 7) != null) // optional e.ttl = Integer.parseInt(m.group(offset + 7)); } catch (NumberFormatException ex) { throw new RTPUrlParserException(ex); } return e; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -