ICE, SDP Parse исключение
Я пытаюсь внедрить Ice4J в свое приложение для Android, но я застрял в следующем фрагменте кода:
NistSdpFactory factory = new NistSdpFactory();
SessionDescription sd = null;
try {
sd=factory.createSessionDescription();
/* put some random longs here as seen in examples */
/* leaving next line would result in o=ice4j.org 0 0 IN null null */
sd.setOrigin(factory.createOrigin("phone",1235435654721342455L,3521512531241L,"IN","IP4",null));
IceSdpUtils.initSessionDescription(sd, agent);
Log.e("ICE","SDP: "+sd.toString()); //this actually works
/* so far no problems */
SessionDescription reversed=new SDPAnnounceParser(sd.toString()).parse(); //and this suddenly throws an exception!!!
Log.e("ICE","Reversed... "+reversed.toString());
} catch (Exception ex){
Log.e("ICE","Failed to init session description", ex);
ex.printStackTrace();
}
Вот как агент запускается:
Agent agent=new Agent();
String[] hostnames = new String[] {"jitsi.org","numb.viagenie.ca","stun.ekiga.net"};
for(String hostname: hostnames){
try {
TransportAddress ta = new TransportAddress(InetAddress.getByName(hostname), 3478, Transport.UDP);
agent.addCandidateHarvester(new StunCandidateHarvester(ta));
} catch (Exception e) { Log.e("ICE","Failed to add candidate", e); }
}
try {
IceMediaStream stream = agent.createMediaStream("audio");
IceMediaStream streamVideo = agent.createMediaStream("video");
int port = 5000;
agent.createComponent(stream, Transport.UDP, port, port, port + 100);
agent.createComponent(streamVideo, Transport.UDP, port+100, port+100, port + 200);
} catch (Exception ex){
Log.e("ICE","Failed to create component",ex);
}
Так что этот код довольно прост, и все, что я делаю, - это создаю описание сеанса, а затем воссоздаю его из строки, что не должно создавать никаких проблем, верно? К сожалению, здесь мы идем:
SDP: v=0
o=phone 1235435654721342455 3521512531241 IN IP4 123.45.67.89
s=-
t=0 0
a=ice-options:trickle
a=ice-ufrag:datbs1al0pu6l0
a=ice-pwd:74gk6of5iedc4h5uug7nvmrdis
m=audio 30783 RTP/AVP 0
c=IN 123.45.67.89 IP4
a=mid:audio
a=candidate:1 1 udp 2130706431 fe80::4adb:50ff:fe47:f8ab 5000 typ host
a=candidate:2 1 udp 2130706431 192.168.1.104 5000 typ host
a=candidate:3 1 udp 1677724415 123.45.67.89 30783 typ srflx raddr 192.168.1.104 rport 5000
m=video 30784 RTP/AVP 0
c=IN 123.45.67.89 IP4
a=mid:video
a=candidate:1 1 udp 2130706431 fe80::4adb:50ff:fe47:f8ab 5100 typ host
a=candidate:2 1 udp 2130706431 192.168.1.104 5100 typ host
a=candidate:3 1 udp 1677724415 123.45.67.89 30784 typ srflx raddr 192.168.1.104 rport 5100
Это первый Log.e, а после.parse():
Failed to init session description
java.text.ParseException: o=phone 1235435654721342455 3521512531241 IN IP4 123.45.67.89 (at offset 7)
at gov.nist.javax.sdp.parser.OriginFieldParser.originField(OriginFieldParser.java:103)
at gov.nist.javax.sdp.parser.OriginFieldParser.parse(OriginFieldParser.java:108)
at gov.nist.javax.sdp.parser.SDPAnnounceParser.parse(SDPAnnounceParser.java:113)
at com.example.app.CallActivity$1.run(CallActivity.java:105)
at java.lang.Thread.run(Thread.java:831)
java.text.ParseException: o=phone 1235435654721342455 3521512531241 IN IP4 123.45.67.89 (at offset 7)
at gov.nist.javax.sdp.parser.OriginFieldParser.originField(OriginFieldParser.java:103)
at gov.nist.javax.sdp.parser.OriginFieldParser.parse(OriginFieldParser.java:108)
at gov.nist.javax.sdp.parser.SDPAnnounceParser.parse(SDPAnnounceParser.java:113)
at com.example.app.CallActivity$1.run(CallActivity.java:105)
at java.lang.Thread.run(Thread.java:831)
Любая помощь? Я борюсь за это уже часами и не нахожу решения...
РЕДАКТИРОВАТЬ: после долгого времени выяснения, почему, кажется, ошибка в LexerCore.java
от gov.nist.javax.sdp.parser
, Map<Token> currentLexer
никогда не выделяется как OriginParseField.java
вызывает неправильный конструктор, который оставляет currentLexer
как null
, так что вопрос, как я могу исправить файл, как это?