2012-09-28 2 views
8

RTP를 사용하는 SIP 통화에서 새로 생겼습니다. 이제는 SIP 호출을 위해 RTP를 사용하여 음성 스트림을 보내고 받으려고합니다. 두 개의 에뮬레이터 을 연결하고 jain sip을 사용하여 INVITE 및 INVITE-ACK를 보낼 수 있습니다.RTP를 사용하여 음성 스트림을 보내고받는 방법

byte Version; 
boolean Padding; 
boolean Extension; 
byte CC; 
boolean Marker; 
byte PayloadType; 
short SequenceNumber; 
int TimeStamp; 
: 나는 미디어 스트리밍을위한 RTP를 시작하려는 ACK를 얻었다 후

, 나는 보내고 나는이 같은 모든 RTP 헤더로 미디어를 보낼 RtpFunction를 사용

를받을 수 RtpPacket 기능을 사용

답변을 찾을 수있는 몇 가지 아이디어와 실제 링크를 제공해주세요.

+1

을 찾을 수 있습니다

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); 

간단한 방식으로 달성 될 수있다 얘들은 나에게 몇 가지 아이디어를 적어주세요 가능 한 한 모금을 통해 RTP를 사용하여 음성 스트림을 보내려면, 나는 Sipdroid RTPsender 및 수신기 클래스와 함께 노력하고 있지만 성공하지 못합니다 .. – Satyam

답변

2
*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, 
         "[email protected]", 
         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 
    } 
    } 
    }* 
+1

약간의 설명이 도움이 될 것입니다 – totten

관련 문제