当前位置: 代码迷 >> VOIP >> SIP怎么封装语音包,并进行传输
  详细解决方案

SIP怎么封装语音包,并进行传输

热度:2851   发布时间:2013-02-26 00:00:00.0
SIP如何封装语音包,并进行传输
如果单纯的捕捉语音然后通过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协议的语音聊天程序
  相关解决方案