如果单纯的捕捉语音然后通过UDP进行传送,就可以用SOCKET就可以做到。用SIP进行简单文本通信,我在网上看到的一个例子,也能看明白,但是我不会通过SIP进行语音的传送。SIP服务器用的SERVLET,客户端继承自SipListener。
- Java code
*/ public void sendMessage(String to, String message) throws ParseException, InvalidArgumentException, SipException { SipURI from = addressFactory.createSipURI(getUsername(), getHost() + ":" + getPort()); Address fromNameAddress = addressFactory.createAddress(from); fromNameAddress.setDisplayName(getUsername()); FromHeader fromHeader = headerFactory.createFromHeader(fromNameAddress, "textclientv1.0"); String username = to.substring(to.indexOf(":") + 1, to.indexOf("@")); String address = to.substring(to.indexOf("@") + 1); SipURI toAddress = addressFactory.createSipURI(username, address); Address toNameAddress = addressFactory.createAddress(toAddress); toNameAddress.setDisplayName(username); ToHeader toHeader = headerFactory.createToHeader(toNameAddress, null); SipURI requestURI = addressFactory.createSipURI(username, address); requestURI.setTransportParam("udp"); ArrayList viaHeaders = new ArrayList(); ViaHeader viaHeader = headerFactory.createViaHeader(getHost(), getPort(), "udp", null); viaHeaders.add(viaHeader); CallIdHeader callIdHeader = sipProvider.getNewCallId(); CSeqHeader cSeqHeader = headerFactory.createCSeqHeader(1, Request.MESSAGE); MaxForwardsHeader maxForwards = headerFactory .createMaxForwardsHeader(70); Request request = messageFactory.createRequest(requestURI, Request.MESSAGE, callIdHeader, cSeqHeader, fromHeader, toHeader, viaHeaders, maxForwards); SipURI contactURI = addressFactory.createSipURI(getUsername(), getHost()); contactURI.setPort(getPort()); Address contactAddress = addressFactory.createAddress(contactURI); contactAddress.setDisplayName(getUsername()); ContactHeader contactHeader = headerFactory .createContactHeader(contactAddress); request.addHeader(contactHeader); ContentTypeHeader contentTypeHeader = headerFactory .createContentTypeHeader("text", "plain"); request.setContent(message, contentTypeHeader); sipProvider.sendRequest(request); }
这是发送文本的代码,如何发送语音块呢。还有SIP SERVLET端要做什么处理。谢谢谢谢!
------解决方案--------------------
这个主要看服务器是怎么实现的,但是sip 的作用是通信的建立,和语音传输没有关系,
图示: sip
server <----------------> server
^ ^
| |
| |
| sip |sip
| rtp |
agent <----------------> agent
sip的作用是获得对方的地址建立通信,和通信结束后结束呼叫!
------解决方案--------------------
有两种方式,一种是经过服务器转发,一种是p2p传输。
当A、B之间一个通话建立之后,开通一个RTP通道。这个RTP通道里传输的是UDP数据包。显然A、B都要打开UDP端口用来接收对方发送过来的数据。
关于语音数据的传送可以使用jrtp协议栈。
给你例子:RTP/RTCP协议的语音聊天程序