Cómo enviar y recibir Voice Stream utilizando RTP

Soy nuevo en la llamada SIP usando RTP, ahora estoy tratando de enviar y recibir flujos de voz utilizando RTP para llamada sip. Estoy hecho con la conexión de dos emuladores y capaz de enviar INVITAR y INVITAR-ACK usando jain sip.

Después de que tengo un Ack quiero iniciar RTP para la transmisión de medios, uso la función RtpPacket para enviar y recibir

Utilizo RtpFunction para enviar medios con toda la cabecera de RTP como esto:

 byte Version; boolean Padding; boolean Extension; byte CC; boolean Marker; byte PayloadType; short SequenceNumber; int TimeStamp; 

Por favor, dé algunas ideas y enlaces reales donde puedo encontrar una respuesta.

2 Solutions collect form web for “Cómo enviar y recibir Voice Stream utilizando RTP”

Esto se puede lograr de una manera más sencilla

 AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audio.setMode(AudioManager.MODE_IN_COMMUNICATION); audioGroup = new AudioGroup(); audioGroup.setMode(AudioGroup.MODE_ECHO_SUPPRESSION); audioStream = new AudioStream(InetAddress.getByAddress(getLocalIPAddress())); audioStream.setCodec(AudioCodec.PCMU); audioStream.setMode(RtpStream.MODE_NORMAL); audioStream.associate(InetAddress.getByName(SipStackAndroid.getRemoteIp()), REMOTE_PORT); audioStream.join(audioGroup); 

Un simple proyecto de teléfono sip que utiliza JAIN SIP como un protocolo de señalización se puede encontrar aquí https://github.com/Mobicents/restcomm-android-sdk/tree/master/Examples/JAIN%20SIP

  *We send and receive RTP data using RTPpacket. import javax.media.rtp.*; import javax.media.rtp.rtcp.*; import javax.media.rtp.event.*; import javax.media.*; import javax.media.protocol.*; import java.net.InetAddress; import javax.media.format.AudioFormat; import com.sun.media.ui.*; import java.util.Vector; public class RTPSourceStream<RTPPlayerWindow> implements ReceiveStreamListener, ControllerListener { @SuppressWarnings("rawtypes") Vector playerlist = new Vector(); @SuppressWarnings("deprecation") SessionManager mgr = null; boolean terminatedbyClose = false; @SuppressWarnings("deprecation") public SessionManager createManager(String address, String sport, String sttl, boolean listener, boolean sendlistener) { return createManager(address, new Integer(sport).intValue(), new Integer(sttl).intValue(), listener, sendlistener); } @SuppressWarnings("deprecation") public SessionManager createManager(String address, int port, int ttl, boolean listener, boolean sendlistener) { mgr = (SessionManager)new com.sun.media.rtp.RTPSessionMgr(); if (mgr == null) return null; mgr.addFormat(new AudioFormat(AudioFormat.DVI_RTP,44100, 4,1),18); if (listener) mgr.addReceiveStreamListener(this); // if (sendlistener) new RTPSendStreamWindow(mgr); // ask RTPSM to generate the local participants CNAME String cname = mgr.generateCNAME(); String username = null; try { username = System.getProperty("user.name"); } catch (SecurityException e){ username = "jmf-user"; } // create our local Session Address SessionAddress localaddr = new SessionAddress(); try{ InetAddress destaddr = InetAddress.getByName(address); SessionAddress sessaddr = new SessionAddress(destaddr, port, destaddr, port + 1); SourceDescription[] userdesclist= new SourceDescription[] { new SourceDescription(SourceDescription .SOURCE_DESC_EMAIL, "jmf-user@sun.com", 1, false), new SourceDescription(SourceDescription .SOURCE_DESC_CNAME, cname, 1, false), new SourceDescription(SourceDescription.SOURCE_DESC_TOOL,"JMF RTP Player v2.0", 1, false) }; mgr.initSession(localaddr, userdesclist, 0.05, 0.25); mgr.startSession(sessaddr,ttl,null); } catch (Exception e) { System.err.println(e.getMessage()); return null; } return mgr; } public void update( ReceiveStreamEvent event) { Player newplayer = null; RTPPacket playerWindow = null; // find the sourceRTPSM for this event SessionManager source = (SessionManager)event.getSource(); // create a new player if a new recvstream is detected if (event instanceof NewReceiveStreamEvent) { String cname = "Java Media Player"; ReceiveStream stream = null; try { // get a handle over the ReceiveStream stream =((NewReceiveStreamEvent)event) .getReceiveStream(); Participant part = stream.getParticipant(); if (part != null) cname = part.getCNAME(); // get a handle over the ReceiveStream datasource DataSource dsource = stream.getDataSource(); // create a player by passing datasource to the // Media Manager newplayer = Manager.createPlayer(dsource); System.out.println("created player " + newplayer); } catch (Exception e) { System.err.println("NewReceiveStreamEvent exception " + e.getMessage()); return; } if (newplayer == null) return; playerlist.addElement(newplayer); newplayer.addControllerListener(this); // send this player to player GUI playerWindow = new RTPPacket( newplayer, cname); } } public void controllerUpdate( ControllerEvent evt) { // get a handle over controller, remove it from the player // list. // if player list is empty, close the sesssion manager. if ((evt instanceof ControllerClosedEvent) || (evt instanceof ControllerErrorEvent) || (evt instanceof DeallocateEvent)){ Player p = (Player)evt.getSourceController(); if (!terminatedbyClose){ if (playerlist.contains(p)) playerlist.removeElement(p); if ((playerlist.size() == 0) && (mgr != null)) mgr.closeSession("All players are closed"); } } } public void closeManager() { terminatedbyClose = true; // first close all the players for (int i = 0; i < playerlist.size(); i++) { ((Player)playerlist.elementAt(i)).close(); } if (mgr != null) { mgr.closeSession("RTP Session Terminated"); mgr = null; } } class RTPPacket extends RTPSourceStream { public RTPPacket(Player newplayer, String cname) { // TODO Auto-generated constructor stub } } }* 
  • Configuración de cancelación de eco de Speex
  • Cómo implementar la aplicación VOIP utilizando el paquete android.net.rtp
  • ¿Realizar llamadas de voz y video a través de Internet con nuestra aplicación?
  • Peer-to-peer llamada SIP con Android SIP Stack?
  • Cómo implementar el chat de voz y video
  • ¿Se recomienda Android para la plataforma del procesador Atom?
  • Biblioteca VoIP para Android
  • SipManager.isApiSupported () y SipManager.isVoipSupported () devuelve false
  • Chat y aplicación VOIP
  • ¿Es factible la adición de una dependencia libjitsi a un proyecto Android?
  • Sip stack para iphone y android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.