专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > VOIP

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

发布时间:2011-07-03 07:03:03 文章来源:www.iduyao.cn 采编人员:星星草
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协议的语音聊天程序
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: