Adds the basis of the support for RTP based DTMF transmission

cusax-fix
Emil Ivov 16 years ago
parent d401fe9893
commit 8667333758

@ -12,6 +12,7 @@
import net.java.sip.communicator.impl.neomedia.codec.*;
import net.java.sip.communicator.impl.neomedia.device.*;
import net.java.sip.communicator.impl.neomedia.transform.dtmf.*;
import net.java.sip.communicator.service.neomedia.*;
import net.java.sip.communicator.service.neomedia.device.*;
import net.java.sip.communicator.service.neomedia.event.*;
@ -36,6 +37,11 @@ public class AudioMediaStreamImpl
private static final Logger logger
= Logger.getLogger(AudioMediaStreamImpl.class);
/**
* The transformer that we use for sending and receiving DTMF packets.
*/
private final DtmfTransformEngine dtmfTransfrmEngine ;
/**
* List of RTP format strings which are supported by SIP Communicator in
* addition to the JMF standard formats.
@ -82,12 +88,28 @@ public class AudioMediaStreamImpl
* both capture and playback of audio exchanged via the specified
* <tt>StreamConnector</tt>
* @param zrtpControl a control which is already created, used to control
* the zrtp operations.
* the zrtp operations.
*/
public AudioMediaStreamImpl(StreamConnector connector, MediaDevice device,
ZrtpControlImpl zrtpControl)
public AudioMediaStreamImpl(StreamConnector connector,
MediaDevice device,
ZrtpControlImpl zrtpControl)
{
super(connector, device, zrtpControl);
this.dtmfTransfrmEngine = new DtmfTransformEngine(this);
}
/**
* A stub that allows audio oriented streams to create and keep a reference
* to a <tt>DtmfTransformEngine</tt>.
*
* @return a <tt>DtmfTransformEngine</tt> if this is an audio oriented
* stream and <tt>null</tt> otherwise.
*/
@Override
protected DtmfTransformEngine createDtmfTransformEngine()
{
return dtmfTransfrmEngine;
}
/**

@ -23,6 +23,7 @@
import net.java.sip.communicator.impl.neomedia.format.*;
import net.java.sip.communicator.impl.neomedia.transform.*;
import net.java.sip.communicator.impl.neomedia.transform.csrc.*;
import net.java.sip.communicator.impl.neomedia.transform.dtmf.*;
import net.java.sip.communicator.impl.neomedia.transform.zrtp.*;
import net.java.sip.communicator.service.neomedia.*;
import net.java.sip.communicator.service.neomedia.device.*;
@ -192,7 +193,7 @@ else if (MediaDeviceSession
* The engine that we are using in order to add CSRC lists in conference
* calls, send CSRC sound levels, and handle incoming levels and CSRC lists.
*/
private final CsrcTransformEngine csrcEngine;
private CsrcTransformEngine csrcEngine;
/**
* Initializes a new <tt>MediaStreamImpl</tt> instance which will use the
@ -205,7 +206,7 @@ else if (MediaDeviceSession
* both capture and playback of media exchanged via the specified
* <tt>StreamConnector</tt>
* @param zrtpControl a control which is already created, used to control
* the zrtp operations.
* the zrtp operations.
*/
public MediaStreamImpl(StreamConnector connector, MediaDevice device,
ZrtpControlImpl zrtpControl)
@ -228,10 +229,52 @@ public MediaStreamImpl(StreamConnector connector, MediaDevice device,
this.zrtpControl.setConnector(rtpConnector);
//register the transform engines that we will be using in this stream.
TransformEngineChain engineChain = createTransformEngineChain();
rtpConnector.setEngine(engineChain);
}
/**
* Creates a chain of transform engines for use with this stream. Note
* that this is the only place where the <tt>TransformEngineChain</tt> is
* and should be manipulated to avoid problems with the order of the
* transformers.
*
* @return the <tt>TransformEngineChain</tt> that this stream should be
* using.
*/
private TransformEngineChain createTransformEngineChain()
{
ArrayList<TransformEngine> engineChain
= new ArrayList<TransformEngine>(3);
//ZRTP
engineChain.add(zrtpControl.getZrtpEngine());
//DTMF
DtmfTransformEngine dtmfEngine = createDtmfTransformEngine();
if(dtmfEngine != null)
engineChain.add(dtmfEngine);
//CSRCs and audio levels
csrcEngine = new CsrcTransformEngine(this);
engineChain.add(csrcEngine);
return new TransformEngineChain( engineChain.toArray(
new TransformEngine[engineChain.size()]));
}
rtpConnector.setEngine(new TransformEngineChain(
csrcEngine, this.zrtpControl.getZrtpEngine()));
/**
* A stub that allows audio oriented streams to create and keep a reference
* to a <tt>DtmfTransformEngine</tt>.
*
* @return a <tt>DtmfTransformEngine</tt> if this is an audio oriented
* stream and <tt>null</tt> otherwise.
*/
protected DtmfTransformEngine createDtmfTransformEngine()
{
return null;
}
/**

@ -19,7 +19,7 @@
/**
* Implements static utility methods used by media classes.
*
*
* @author Emil Ivov
* @author Lubomir Marinov
*/
@ -126,6 +126,12 @@ public class MediaUtils
MediaType.AUDIO,
AudioFormat.G729_RTP,
8000);
addMediaFormats(
MediaFormat.RTP_PAYLOAD_TYPE_UNKNOWN,
"telephone-event",
MediaType.AUDIO,
Constants.TELEPHONE_EVENT,
8000);
addMediaFormats(
(byte) SdpConstants.H263,

@ -13,7 +13,7 @@
* in order to get the constants define in
* <tt>net.java.sip.communicator.impl.neomedia.codec.Constants</tt> without star
* import of <tt>net.java.sip.communicator.impl.neomedia.codec</tt>.
*
*
* @author Lubomir Marinov
*/
public class Constants
@ -24,6 +24,11 @@ public class Constants
public static final String ILBC_RTP = "ilbc/rtp";
public static final String ILBC = "ilbc";
/**
* Pseudo format representing DTMF tones sent over RTP.
*/
public static final String TELEPHONE_EVENT = "telephone-event";
public static final String H264_RTP = "h264/rtp";
public static final String H264 = "h264";
public static final int H264_RTP_SDP = 99;

@ -47,7 +47,7 @@ public class TransformEngineChain
* @param engineChain an array containing <tt>TransformEngine</tt>s in the
* order that they are to be applied on outgoing packets.
*/
public TransformEngineChain(TransformEngine... engineChain)
public TransformEngineChain(TransformEngine[] engineChain)
{
this.engineChain = engineChain.clone();

Loading…
Cancel
Save