首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

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

2012-03-07 
SIP如何封装语音包,并进行传输如果单纯的捕捉语音然后通过UDP进行传送,就可以用SOCKET就可以做到。用SIP进

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协议的语音聊天程序

热点排行