java voip server_VoIP RTP从/到服务器(在Java中)与android的流传输

本文探讨了一键通聊天应用在GSM/UMTS/LTE网络中的实现,由于网络不支持组播,转向使用Java服务器进行VoIP数据包的转发。服务器接收来自Android客户端的VoIP RTP数据包,再将其广播到其他多个客户端。问题在于服务器仅简单转发数据包,导致VoIP服务质量下降。提供了Android和Java服务器端的部分代码以供分析。
摘要由CSDN通过智能技术生成

我的目标是在GSM / UMTS /

LTE网络中建立一键通聊天应用程序;最初,我想使用多播地址和对等网络而不会使服务器过载。不幸的是,经过深入的调查,我发现GSM / UMTS /

LTE网络中不允许组播,因此我必须使用服务器来退回VoIP数据包。我不太喜欢这种解决方案,因为我必须使服务器超载,但是没有找到更好的解决方案。如果您有替代解决方案,将非常感激…

因此,我必须将VoIP从Android客户端发送到服务器(PC),反之亦然。服务器采用Java语言,必须先接收VoIP数据包,然后再将VoIP数据包发送到其他N个客户端。服务器是VoIP数据包的保镖。

我开发了代码,但是没有用;我没有任何错误,只是我的VoIP服务非常差:我松了很多东西,听到的​​声音非常杂乱……错误在哪里?我想它应该在服务器代码中;服务器只是获取数据包并重新发送它们,而不知道它们是RTP上的VoIP。

如下请见

预先谢谢你,福斯托

//用于将VOIP发送到服务器的ANDROID代码

//Attribute definition

private static final AudioCodec myAudioCodec_COSTANTE = AudioCodec.PCMU ;

private static final int myAudioGroupTX_COSTANTE = AudioGroup.MODE_NORMAL ;

private static final int myAudioGroupRX_COSTANTE = AudioGroup.MODE_NORMAL ;

private static final int myRtpStreamTX_COSTANTE = RtpStream.MODE_SEND_ONLY ;

private static final int myRtpStreamRX_COSTANTE = RtpStream.MODE_RECEIVE_ONLY ;

private static final int myAudioManagerTX_COSTANTE = AudioManager.MODE_IN_COMMUNICATION;

private static final int myAudioManagerRX_COSTANTE = AudioManager.MODE_IN_COMMUNICATION;

//Method called for VoIP trasmission

myAudioStream = new AudioStream(localClientIP);

myAudioGroup = new AudioGroup();

myAudioManager = (AudioManager) myContext.getSystemService(Context.AUDIO_SERVICE);

myAudioGroup.setMode(myAudioGroupTX_COSTANTE);

myAudioStream.join(null);

myAudioStream.setCodec(myAudioCodec_COSTANTE);

myAudioStream.setMode(myRtpStreamTX_COSTANTE);

myAudioStream.associate(ipaddress_Server, port_Server)

myAudioStream.join(myAudioGroup);

myAudioManager.setMode(myAudioManagerTX_COSTANTE);

myAudioManager.setSpeakerphoneOn(false);

myAudioManager.setMicrophoneMute(false);

// JAVA服务器代码,用于接收来自ANDROID的VOIP并将其重新发送给服务器

DatagramSocket datagramSocket_RX_VoIP= new DatagramSocket();

DatagramSocket datagramSocket_TX_VoIP= new DatagramSocket();

int unicast_port_TX_VoIP = 5000 ;

String unicast_ip_TX_VoIP = "192.168.0.3";

Thread t = new Thread(new Runnable() {

public void run() {

try {

DatagramPacket myPacket;

while (true) {

myPacket = ManagePacket.initializePacket(); //Function to prepare the packe ; the problem is not here!!!

datagramSocket_RX_VoIP.receive(myPacket);

InetAddress ppp = InetAddress.getByName(unicast_ip_TX_VoIP);

myPacket.setAddress(ppp);

myPacket.setPort( unicast_port_TX_VoIP ) ;

datagramSocket_TX_VoIP.send(myPacket);

}

} catch (Exception ex) {

log.debug("Exception: " + ex.getMessage(), ex);

}

}

});

t.start();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值