public interface WebRtcEndpoint extends BaseRtpEndpoint
This endpoint is one side of a peer-to-peer WebRTC communication, being the other peer a WebRTC capable browser -using the RTCPeerConnection API-, a native WebRTC app or even another Kurento Media Server.
In order to establish a WebRTC communication, peers engage in an SDP negotiation process, where one of the peers (the offerer) sends an offer, while the other peer (the offeree) responds with an answer. This endpoint can function in both situations
generateOffer
method. This offer must then be sent
to the remote peer (the offeree) through the signaling channel, for
processing.
processAnswer
method.
processOffer
method. The result of this method will be a
string, containing an SDP answer.
SDPs are sent without ICE candidates, following the Trickle ICE optimization. Once the SDP negotiation is completed, both peers proceed with the ICE discovery process, intended to set up a bidirectional media connection. During this process, each peer
Once a suitable pair of candidates (one for each peer) is discovered, the
media session can start. The harvesting process in Kurento, begins with the
invocation of the gatherCandidates
method. Since the whole
Trickle ICE purpose is to speed-up connectivity, candidates are generated
asynchronously. Therefore, in order to capture the candidates, the user must
subscribe to the event IceCandidateFound
. It is important that
the event listener is bound before invoking gatherCandidates
,
otherwise a suitable candidate might be lost, and connection might not be
established.
It's important to keep in mind that WebRTC connection is an asynchronous process, when designing interactions between different MediaElements. For example, it would be pointless to start recording before media is flowing. In order to be notified of state changes, the application can subscribe to events generated by the WebRtcEndpoint. Following is a full list of events generated by WebRtcEndpoint:
IceComponentStateChange
: This event informs only about changes
in the ICE connection state. Possible values are:
DISCONNECTED
: No activity scheduledGATHERING
: Gathering local candidatesCONNECTING
: Establishing connectivityCONNECTED
: At least one working candidate pairREADY
: ICE concluded, candidate pair selection is now final
FAILED
: Connectivity checks have been completed, but media
connection was not established
CONNECTED
, there might be no media flowing between the peers.
This makes this event useful only to receive low-level information about the
connection between peers. Even more, while other events might leave a
graceful period of time before firing, this event fires immediately after
the state change is detected.
IceCandidateFound
: Raised when a new candidate is discovered.
ICE candidates must be sent to the remote peer of the connection. Failing to
do so for some or all of the candidates might render the connection
unusable.
IceGatheringDone
: Raised when the ICE harvesting process is
completed. This means that all candidates have already been discovered.
NewCandidatePairSelected
: Raised when a new ICE candidate pair
gets selected. The pair contains both local and remote candidates being used
for a component. This event can be raised during a media session, if a new
pair of candidates with higher priority in the link are found.
DataChannelOpen
: Raised when a data channel is open.DataChannelClose
: Raised when a data channel is closed.Registering to any of above events requires the application to provide a callback function. Each event provides different information, so it is recommended to consult the signature of the event listeners.
Flow control and congestion management is one of the most important features of WebRTC. WebRTC connections start with the lowest bandwidth configured and slowly ramps up to the maximum available bandwidth, or to the higher limit of the exploration range in case no bandwidth limitation is detected. Notice that WebRtcEndpoints in Kurento are designed in a way that multiple WebRTC connections fed by the same stream share quality. When a new connection is added, as it requires to start with low bandwidth, it will cause the rest of connections to experience a transient period of degraded quality, until it stabilizes its bitrate. This doesn't apply when transcoding is involved. Transcoders will adjust their output bitrate based in bandwidth requirements, but it won't affect the original stream. If an incoming WebRTC stream needs to be transcoded, for whatever reason, all WebRtcEndpoints fed from transcoder output will share a separate quality than the ones connected directly to the original stream.
The default bandwidth range of the endpoint is [100 kbps, 500 kbps], but it can be changed separately for input/output directions and for audio/video streams.
Check the extended documentation of these parameters in
SdpEndpoint
, BaseRtpEndpoint
, and
RembParams
.
b={modifier}:{value}
tag). Kurento will always enforce bitrate
limitations specified by the remote peer over internal configurations.
All bandwidth control parameters must be changed before the SDP negotiation takes place, and can't be changed afterwards.
DataChannels allow other media elements that make use of the DataPad, to send arbitrary data. For instance, if there is a filter that publishes event information, it'll be sent to the remote peer through the channel. There is no API available for programmers to make use of this feature in the WebRtcElement. DataChannels can be configured to provide the following:
Unreliable, out-of-order delivery is equivalent to raw UDP semantics. The message may make it, or it may not, and order is not important. However, the channel can be configured to be partially reliable by specifying the maximum number of retransmissions or setting a time limit for retransmissions: the WebRTC stack will handle the acknowledgments and timeouts.
The possibility to create DataChannels in a WebRtcEndpoint must be explicitly enabled when creating the endpoint, as this feature is disabled by default. If this is the case, they can be created invoking the createDataChannel method. The arguments for this method, all of them optional, provide the necessary configuration:
label
: assigns a label to the DataChannel. This can help
identify each possible channel separately.
ordered
: specifies if the DataChannel guarantees order, which
is the default mode. If maxPacketLifetime and maxRetransmits have not been
set, this enables reliable mode.
maxPacketLifeTime
: The time window in milliseconds, during
which transmissions and retransmissions may take place in unreliable mode.
This forces unreliable mode, even if ordered
has been
activated.
maxRetransmits
: maximum number of retransmissions that are
attempted in unreliable mode. This forces unreliable mode, even if
ordered
has been activated.
Protocol
: Name of the subprotocol used for data communication.
Modifier and Type | Interface and Description |
---|---|
static class |
WebRtcEndpoint.Builder |
addConnectionStateChangedListener, addConnectionStateChangedListener, addMediaStateChangedListener, addMediaStateChangedListener, getConnectionState, getConnectionState, getConnectionState, getMaxVideoSendBandwidth, getMaxVideoSendBandwidth, getMaxVideoSendBandwidth, getMediaState, getMediaState, getMediaState, getMinVideoRecvBandwidth, getMinVideoRecvBandwidth, getMinVideoRecvBandwidth, getMinVideoSendBandwidth, getMinVideoSendBandwidth, getMinVideoSendBandwidth, getMtu, getMtu, getMtu, getRembParams, getRembParams, getRembParams, removeConnectionStateChangedListener, removeConnectionStateChangedListener, removeMediaStateChangedListener, removeMediaStateChangedListener, setMaxVideoSendBandwidth, setMaxVideoSendBandwidth, setMaxVideoSendBandwidth, setMinVideoRecvBandwidth, setMinVideoRecvBandwidth, setMinVideoRecvBandwidth, setMinVideoSendBandwidth, setMinVideoSendBandwidth, setMinVideoSendBandwidth, setMtu, setMtu, setMtu, setRembParams, setRembParams, setRembParams
generateOffer, generateOffer, generateOffer, getLocalSessionDescriptor, getLocalSessionDescriptor, getLocalSessionDescriptor, getMaxAudioRecvBandwidth, getMaxAudioRecvBandwidth, getMaxAudioRecvBandwidth, getMaxVideoRecvBandwidth, getMaxVideoRecvBandwidth, getMaxVideoRecvBandwidth, getRemoteSessionDescriptor, getRemoteSessionDescriptor, getRemoteSessionDescriptor, processAnswer, processAnswer, processAnswer, processOffer, processOffer, processOffer, setMaxAudioRecvBandwidth, setMaxAudioRecvBandwidth, setMaxAudioRecvBandwidth, setMaxVideoRecvBandwidth, setMaxVideoRecvBandwidth, setMaxVideoRecvBandwidth
addMediaSessionStartedListener, addMediaSessionStartedListener, addMediaSessionTerminatedListener, addMediaSessionTerminatedListener, removeMediaSessionStartedListener, removeMediaSessionStartedListener, removeMediaSessionTerminatedListener, removeMediaSessionTerminatedListener
addElementConnectedListener, addElementConnectedListener, addElementDisconnectedListener, addElementDisconnectedListener, addMediaFlowInStateChangeListener, addMediaFlowInStateChangeListener, addMediaFlowOutStateChangeListener, addMediaFlowOutStateChangeListener, addMediaTranscodingStateChangeListener, addMediaTranscodingStateChangeListener, connect, connect, connect, connect, connect, connect, connect, connect, connect, connect, connect, connect, disconnect, disconnect, disconnect, disconnect, disconnect, disconnect, disconnect, disconnect, disconnect, disconnect, disconnect, disconnect, getGstreamerDot, getGstreamerDot, getGstreamerDot, getGstreamerDot, getGstreamerDot, getGstreamerDot, getMaxOuputBitrate, getMaxOuputBitrate, getMaxOuputBitrate, getMaxOutputBitrate, getMaxOutputBitrate, getMaxOutputBitrate, getMinOuputBitrate, getMinOuputBitrate, getMinOuputBitrate, getMinOutputBitrate, getMinOutputBitrate, getMinOutputBitrate, getSinkConnections, getSinkConnections, getSinkConnections, getSinkConnections, getSinkConnections, getSinkConnections, getSinkConnections, getSinkConnections, getSinkConnections, getSourceConnections, getSourceConnections, getSourceConnections, getSourceConnections, getSourceConnections, getSourceConnections, getSourceConnections, getSourceConnections, getSourceConnections, getStats, getStats, getStats, getStats, getStats, getStats, isMediaFlowingIn, isMediaFlowingIn, isMediaFlowingIn, isMediaFlowingIn, isMediaFlowingIn, isMediaFlowingIn, isMediaFlowingOut, isMediaFlowingOut, isMediaFlowingOut, isMediaFlowingOut, isMediaFlowingOut, isMediaFlowingOut, isMediaTranscoding, isMediaTranscoding, isMediaTranscoding, isMediaTranscoding, isMediaTranscoding, isMediaTranscoding, removeElementConnectedListener, removeElementConnectedListener, removeElementDisconnectedListener, removeElementDisconnectedListener, removeMediaFlowInStateChangeListener, removeMediaFlowInStateChangeListener, removeMediaFlowOutStateChangeListener, removeMediaFlowOutStateChangeListener, removeMediaTranscodingStateChangeListener, removeMediaTranscodingStateChangeListener, setAudioFormat, setAudioFormat, setAudioFormat, setMaxOuputBitrate, setMaxOuputBitrate, setMaxOuputBitrate, setMaxOutputBitrate, setMaxOutputBitrate, setMaxOutputBitrate, setMinOuputBitrate, setMinOuputBitrate, setMinOuputBitrate, setMinOutputBitrate, setMinOutputBitrate, setMinOutputBitrate, setOutputBitrate, setOutputBitrate, setOutputBitrate, setVideoFormat, setVideoFormat, setVideoFormat
addErrorListener, addErrorListener, addTag, addTag, addTag, getChildren, getChildren, getChildren, getChilds, getChilds, getChilds, getCreationTime, getCreationTime, getCreationTime, getId, getId, getId, getMediaPipeline, getMediaPipeline, getMediaPipeline, getName, getName, getName, getParent, getParent, getParent, getSendTagsInEvents, getSendTagsInEvents, getSendTagsInEvents, getTag, getTag, getTag, getTags, getTags, getTags, removeErrorListener, removeErrorListener, removeTag, removeTag, removeTag, setName, setName, setName, setSendTagsInEvents, setSendTagsInEvents, setSendTagsInEvents
isCommited, release, release, release, waitCommited, whenCommited, whenCommited
String getNetworkInterfaces()
If you know which network interfaces should be used to perform ICE (for WebRTC connectivity), you can define them here. Doing so has several advantages:
docker0
) the ICE process ends up choosing the wrong local IP.
networkInterfaces
is a comma-separated list of network interface
names.
Examples:
networkInterfaces=eth0
networkInterfaces=eth0,enp0s25
void getNetworkInterfaces(Continuation<String> cont)
If you know which network interfaces should be used to perform ICE (for WebRTC connectivity), you can define them here. Doing so has several advantages:
docker0
) the ICE process ends up choosing the wrong local IP.
networkInterfaces
is a comma-separated list of network interface
names.
Examples:
networkInterfaces=eth0
networkInterfaces=eth0,enp0s25
TFuture<String> getNetworkInterfaces(Transaction tx)
If you know which network interfaces should be used to perform ICE (for WebRTC connectivity), you can define them here. Doing so has several advantages:
docker0
) the ICE process ends up choosing the wrong local IP.
networkInterfaces
is a comma-separated list of network interface
names.
Examples:
networkInterfaces=eth0
networkInterfaces=eth0,enp0s25
void setNetworkInterfaces(String networkInterfaces)
If you know which network interfaces should be used to perform ICE (for WebRTC connectivity), you can define them here. Doing so has several advantages:
docker0
) the ICE process ends up choosing the wrong local IP.
networkInterfaces
is a comma-separated list of network interface
names.
Examples:
networkInterfaces=eth0
networkInterfaces=eth0,enp0s25
void setNetworkInterfaces(String networkInterfaces, Continuation<Void> cont)
If you know which network interfaces should be used to perform ICE (for WebRTC connectivity), you can define them here. Doing so has several advantages:
docker0
) the ICE process ends up choosing the wrong local IP.
networkInterfaces
is a comma-separated list of network interface
names.
Examples:
networkInterfaces=eth0
networkInterfaces=eth0,enp0s25
void setNetworkInterfaces(String networkInterfaces, Transaction tx)
If you know which network interfaces should be used to perform ICE (for WebRTC connectivity), you can define them here. Doing so has several advantages:
docker0
) the ICE process ends up choosing the wrong local IP.
networkInterfaces
is a comma-separated list of network interface
names.
Examples:
networkInterfaces=eth0
networkInterfaces=eth0,enp0s25
String getStunServerAddress()
The ICE process uses STUN to punch holes through NAT firewalls.
stunServerAddress
MUST be an IP address; domain names are NOT
supported.
You need to use a well-working STUN server. Use this to check if it works:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
From that check, you should get at least one Server-Reflexive Candidate (type
srflx
).
void getStunServerAddress(Continuation<String> cont)
The ICE process uses STUN to punch holes through NAT firewalls.
stunServerAddress
MUST be an IP address; domain names are NOT
supported.
You need to use a well-working STUN server. Use this to check if it works:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
From that check, you should get at least one Server-Reflexive Candidate (type
srflx
).
TFuture<String> getStunServerAddress(Transaction tx)
The ICE process uses STUN to punch holes through NAT firewalls.
stunServerAddress
MUST be an IP address; domain names are NOT
supported.
You need to use a well-working STUN server. Use this to check if it works:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
From that check, you should get at least one Server-Reflexive Candidate (type
srflx
).
void setStunServerAddress(String stunServerAddress)
The ICE process uses STUN to punch holes through NAT firewalls.
stunServerAddress
MUST be an IP address; domain names are NOT
supported.
You need to use a well-working STUN server. Use this to check if it works:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
From that check, you should get at least one Server-Reflexive Candidate (type
srflx
).
void setStunServerAddress(String stunServerAddress, Continuation<Void> cont)
The ICE process uses STUN to punch holes through NAT firewalls.
stunServerAddress
MUST be an IP address; domain names are NOT
supported.
You need to use a well-working STUN server. Use this to check if it works:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
From that check, you should get at least one Server-Reflexive Candidate (type
srflx
).
void setStunServerAddress(String stunServerAddress, Transaction tx)
The ICE process uses STUN to punch holes through NAT firewalls.
stunServerAddress
MUST be an IP address; domain names are NOT
supported.
You need to use a well-working STUN server. Use this to check if it works:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
From that check, you should get at least one Server-Reflexive Candidate (type
srflx
).
int getStunServerPort()
void getStunServerPort(Continuation<Integer> cont)
TFuture<Integer> getStunServerPort(Transaction tx)
void setStunServerPort(int stunServerPort)
void setStunServerPort(int stunServerPort, Continuation<Void> cont)
void setStunServerPort(int stunServerPort, Transaction tx)
String getTurnUrl()
When STUN is not enough to open connections through some NAT firewalls, using TURN is the remaining alternative.
Note that TURN is a superset of STUN, so you don't need to configure STUN if you are using TURN.
The provided URL should follow one of these formats:
user:password@ipaddress:port
user:password@ipaddress:port?transport=[udp|tcp|tls]
ipaddress
MUST be an IP address; domain names are NOT supported.
transport
is OPTIONAL. Possible values: udp, tcp, tls. Default: udp.
You need to use a well-working TURN server. Use this to check if it works:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
From that check, you should get at least one Server-Reflexive Candidate (type
srflx
) AND one Relay Candidate (type relay
).
void getTurnUrl(Continuation<String> cont)
When STUN is not enough to open connections through some NAT firewalls, using TURN is the remaining alternative.
Note that TURN is a superset of STUN, so you don't need to configure STUN if you are using TURN.
The provided URL should follow one of these formats:
user:password@ipaddress:port
user:password@ipaddress:port?transport=[udp|tcp|tls]
ipaddress
MUST be an IP address; domain names are NOT supported.
transport
is OPTIONAL. Possible values: udp, tcp, tls. Default: udp.
You need to use a well-working TURN server. Use this to check if it works:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
From that check, you should get at least one Server-Reflexive Candidate (type
srflx
) AND one Relay Candidate (type relay
).
TFuture<String> getTurnUrl(Transaction tx)
When STUN is not enough to open connections through some NAT firewalls, using TURN is the remaining alternative.
Note that TURN is a superset of STUN, so you don't need to configure STUN if you are using TURN.
The provided URL should follow one of these formats:
user:password@ipaddress:port
user:password@ipaddress:port?transport=[udp|tcp|tls]
ipaddress
MUST be an IP address; domain names are NOT supported.
transport
is OPTIONAL. Possible values: udp, tcp, tls. Default: udp.
You need to use a well-working TURN server. Use this to check if it works:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
From that check, you should get at least one Server-Reflexive Candidate (type
srflx
) AND one Relay Candidate (type relay
).
void setTurnUrl(String turnUrl)
When STUN is not enough to open connections through some NAT firewalls, using TURN is the remaining alternative.
Note that TURN is a superset of STUN, so you don't need to configure STUN if you are using TURN.
The provided URL should follow one of these formats:
user:password@ipaddress:port
user:password@ipaddress:port?transport=[udp|tcp|tls]
ipaddress
MUST be an IP address; domain names are NOT supported.
transport
is OPTIONAL. Possible values: udp, tcp, tls. Default: udp.
You need to use a well-working TURN server. Use this to check if it works:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
From that check, you should get at least one Server-Reflexive Candidate (type
srflx
) AND one Relay Candidate (type relay
).
void setTurnUrl(String turnUrl, Continuation<Void> cont)
When STUN is not enough to open connections through some NAT firewalls, using TURN is the remaining alternative.
Note that TURN is a superset of STUN, so you don't need to configure STUN if you are using TURN.
The provided URL should follow one of these formats:
user:password@ipaddress:port
user:password@ipaddress:port?transport=[udp|tcp|tls]
ipaddress
MUST be an IP address; domain names are NOT supported.
transport
is OPTIONAL. Possible values: udp, tcp, tls. Default: udp.
You need to use a well-working TURN server. Use this to check if it works:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
From that check, you should get at least one Server-Reflexive Candidate (type
srflx
) AND one Relay Candidate (type relay
).
void setTurnUrl(String turnUrl, Transaction tx)
When STUN is not enough to open connections through some NAT firewalls, using TURN is the remaining alternative.
Note that TURN is a superset of STUN, so you don't need to configure STUN if you are using TURN.
The provided URL should follow one of these formats:
user:password@ipaddress:port
user:password@ipaddress:port?transport=[udp|tcp|tls]
ipaddress
MUST be an IP address; domain names are NOT supported.
transport
is OPTIONAL. Possible values: udp, tcp, tls. Default: udp.
You need to use a well-working TURN server. Use this to check if it works:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
From that check, you should get at least one Server-Reflexive Candidate (type
srflx
) AND one Relay Candidate (type relay
).
String getExternalAddress()
This setting is normally NOT needed. Only use it if you know what you're doing, and understand 100% WHY you want it. For the majority of cases, you should prefer configuring STUN or TURN servers over using this setting.
This setting implements a hack that will mangle all local ICE candidates so that their candidate address is replaced with the provided external address, even for candidates of type 'host'. In doing so, this KMS will not need a STUN or TURN server, but remote peers will still be able to contact it.
You can try using this setting if KMS is deployed on a publicly accessible server, without NAT, and with a static public IP address. But if it doesn't work for you, just go back to using the STUN or TURN settings above.
externalAddress
is an IPv4 or IPv6 address.
Examples:
externalAddress=10.70.35.2
externalAddress=2001:0db8:85a3:0000:0000:8a2e:0370:7334
void getExternalAddress(Continuation<String> cont)
This setting is normally NOT needed. Only use it if you know what you're doing, and understand 100% WHY you want it. For the majority of cases, you should prefer configuring STUN or TURN servers over using this setting.
This setting implements a hack that will mangle all local ICE candidates so that their candidate address is replaced with the provided external address, even for candidates of type 'host'. In doing so, this KMS will not need a STUN or TURN server, but remote peers will still be able to contact it.
You can try using this setting if KMS is deployed on a publicly accessible server, without NAT, and with a static public IP address. But if it doesn't work for you, just go back to using the STUN or TURN settings above.
externalAddress
is an IPv4 or IPv6 address.
Examples:
externalAddress=10.70.35.2
externalAddress=2001:0db8:85a3:0000:0000:8a2e:0370:7334
TFuture<String> getExternalAddress(Transaction tx)
This setting is normally NOT needed. Only use it if you know what you're doing, and understand 100% WHY you want it. For the majority of cases, you should prefer configuring STUN or TURN servers over using this setting.
This setting implements a hack that will mangle all local ICE candidates so that their candidate address is replaced with the provided external address, even for candidates of type 'host'. In doing so, this KMS will not need a STUN or TURN server, but remote peers will still be able to contact it.
You can try using this setting if KMS is deployed on a publicly accessible server, without NAT, and with a static public IP address. But if it doesn't work for you, just go back to using the STUN or TURN settings above.
externalAddress
is an IPv4 or IPv6 address.
Examples:
externalAddress=10.70.35.2
externalAddress=2001:0db8:85a3:0000:0000:8a2e:0370:7334
void setExternalAddress(String externalAddress)
This setting is normally NOT needed. Only use it if you know what you're doing, and understand 100% WHY you want it. For the majority of cases, you should prefer configuring STUN or TURN servers over using this setting.
This setting implements a hack that will mangle all local ICE candidates so that their candidate address is replaced with the provided external address, even for candidates of type 'host'. In doing so, this KMS will not need a STUN or TURN server, but remote peers will still be able to contact it.
You can try using this setting if KMS is deployed on a publicly accessible server, without NAT, and with a static public IP address. But if it doesn't work for you, just go back to using the STUN or TURN settings above.
externalAddress
is an IPv4 or IPv6 address.
Examples:
externalAddress=10.70.35.2
externalAddress=2001:0db8:85a3:0000:0000:8a2e:0370:7334
void setExternalAddress(String externalAddress, Continuation<Void> cont)
This setting is normally NOT needed. Only use it if you know what you're doing, and understand 100% WHY you want it. For the majority of cases, you should prefer configuring STUN or TURN servers over using this setting.
This setting implements a hack that will mangle all local ICE candidates so that their candidate address is replaced with the provided external address, even for candidates of type 'host'. In doing so, this KMS will not need a STUN or TURN server, but remote peers will still be able to contact it.
You can try using this setting if KMS is deployed on a publicly accessible server, without NAT, and with a static public IP address. But if it doesn't work for you, just go back to using the STUN or TURN settings above.
externalAddress
is an IPv4 or IPv6 address.
Examples:
externalAddress=10.70.35.2
externalAddress=2001:0db8:85a3:0000:0000:8a2e:0370:7334
void setExternalAddress(String externalAddress, Transaction tx)
This setting is normally NOT needed. Only use it if you know what you're doing, and understand 100% WHY you want it. For the majority of cases, you should prefer configuring STUN or TURN servers over using this setting.
This setting implements a hack that will mangle all local ICE candidates so that their candidate address is replaced with the provided external address, even for candidates of type 'host'. In doing so, this KMS will not need a STUN or TURN server, but remote peers will still be able to contact it.
You can try using this setting if KMS is deployed on a publicly accessible server, without NAT, and with a static public IP address. But if it doesn't work for you, just go back to using the STUN or TURN settings above.
externalAddress
is an IPv4 or IPv6 address.
Examples:
externalAddress=10.70.35.2
externalAddress=2001:0db8:85a3:0000:0000:8a2e:0370:7334
List<IceCandidatePair> getICECandidatePairs()
void getICECandidatePairs(Continuation<List<IceCandidatePair>> cont)
TFuture<List<IceCandidatePair>> getICECandidatePairs(Transaction tx)
List<IceConnection> getIceConnectionState()
void getIceConnectionState(Continuation<List<IceConnection>> cont)
TFuture<List<IceConnection>> getIceConnectionState(Transaction tx)
void gatherCandidates()
It must be called after SdpEndpoint::generateOffer
or
SdpEndpoint::processOffer
for Trickle ICE. If
invoked before generating or processing an SDP offer, the candidates gathered
will be added to the SDP processed.
void gatherCandidates(Continuation<Void> cont)
Continuation.onSuccess(F)
is called when the action is
done. If an error occurs, Continuation.onError(java.lang.Throwable)
is called.gatherCandidates()
void gatherCandidates(Transaction tx)
It must be called after SdpEndpoint::generateOffer
or
SdpEndpoint::processOffer
for Trickle ICE. If
invoked before generating or processing an SDP offer, the candidates gathered
will be added to the SDP processed.
void addIceCandidate(IceCandidate candidate)
candidate
- Remote ICE candidatevoid addIceCandidate(IceCandidate candidate, Continuation<Void> cont)
Continuation.onSuccess(F)
is called when the action is
done. If an error occurs, Continuation.onError(java.lang.Throwable)
is called.candidate
- Remote ICE candidateaddIceCandidate(org.kurento.client.IceCandidate)
void addIceCandidate(Transaction tx, IceCandidate candidate)
candidate
- Remote ICE candidatevoid createDataChannel(String label, boolean ordered, int maxPacketLifeTime, int maxRetransmits, String protocol)
Being supported means that the WebRtcEndpoint has been created with data channel support, the client also supports data channels, and they have been negotiated in the SDP exchange. Otherwise, the method throws an exception, indicating that the operation is not possible.
Data channels can work in either unreliable mode (analogous to User Datagram Protocol or UDP) or reliable mode (analogous to Transmission Control Protocol or TCP). The two modes have a simple distinction:
If data channels are not supported, this method throws an exception.
label
- Channel's labelordered
- If the data channel should guarantee order or not. If true, and maxPacketLifeTime and maxRetransmits have not been provided, reliable mode is activated.maxPacketLifeTime
- The time window (in milliseconds) during which transmissions and retransmissions may take place in unreliable mode.
Note that this forces unreliable mode, even if ordered
has been activated.maxRetransmits
- maximum number of retransmissions that are attempted in unreliable mode.
Note that this forces unreliable mode, even if ordered
has been activated.protocol
- Name of the subprotocol used for data communicationvoid createDataChannel(String label, boolean ordered, int maxPacketLifeTime, int maxRetransmits, String protocol, Continuation<Void> cont)
Continuation.onSuccess(F)
is called when the action is
done. If an error occurs, Continuation.onError(java.lang.Throwable)
is called.label
- Channel's labelordered
- If the data channel should guarantee order or not. If true, and maxPacketLifeTime and maxRetransmits have not been provided, reliable mode is activated.maxPacketLifeTime
- The time window (in milliseconds) during which transmissions and retransmissions may take place in unreliable mode.
Note that this forces unreliable mode, even if ordered
has been activated.maxRetransmits
- maximum number of retransmissions that are attempted in unreliable mode.
Note that this forces unreliable mode, even if ordered
has been activated.protocol
- Name of the subprotocol used for data communicationcreateDataChannel(java.lang.String, boolean, int, int, java.lang.String)
void createDataChannel(Transaction tx, String label, boolean ordered, int maxPacketLifeTime, int maxRetransmits, String protocol)
Being supported means that the WebRtcEndpoint has been created with data channel support, the client also supports data channels, and they have been negotiated in the SDP exchange. Otherwise, the method throws an exception, indicating that the operation is not possible.
Data channels can work in either unreliable mode (analogous to User Datagram Protocol or UDP) or reliable mode (analogous to Transmission Control Protocol or TCP). The two modes have a simple distinction:
If data channels are not supported, this method throws an exception.
label
- Channel's labelordered
- If the data channel should guarantee order or not. If true, and maxPacketLifeTime and maxRetransmits have not been provided, reliable mode is activated.maxPacketLifeTime
- The time window (in milliseconds) during which transmissions and retransmissions may take place in unreliable mode.
Note that this forces unreliable mode, even if ordered
has been activated.maxRetransmits
- maximum number of retransmissions that are attempted in unreliable mode.
Note that this forces unreliable mode, even if ordered
has been activated.protocol
- Name of the subprotocol used for data communicationvoid closeDataChannel(int channelId)
channelId
- The channel identifiervoid closeDataChannel(int channelId, Continuation<Void> cont)
Continuation.onSuccess(F)
is called when the action is
done. If an error occurs, Continuation.onError(java.lang.Throwable)
is called.channelId
- The channel identifiercloseDataChannel(int)
void closeDataChannel(Transaction tx, int channelId)
channelId
- The channel identifiervoid createDataChannel()
Being supported means that the WebRtcEndpoint has been created with data channel support, the client also supports data channels, and they have been negotiated in the SDP exchange. Otherwise, the method throws an exception, indicating that the operation is not possible.
Data channels can work in either unreliable mode (analogous to User Datagram Protocol or UDP) or reliable mode (analogous to Transmission Control Protocol or TCP). The two modes have a simple distinction:
If data channels are not supported, this method throws an exception.
void createDataChannel(Continuation<Void> cont)
Continuation.onSuccess(F)
is called when the action is
done. If an error occurs, Continuation.onError(java.lang.Throwable)
is called.void createDataChannel(Transaction tx)
Being supported means that the WebRtcEndpoint has been created with data channel support, the client also supports data channels, and they have been negotiated in the SDP exchange. Otherwise, the method throws an exception, indicating that the operation is not possible.
Data channels can work in either unreliable mode (analogous to User Datagram Protocol or UDP) or reliable mode (analogous to Transmission Control Protocol or TCP). The two modes have a simple distinction:
If data channels are not supported, this method throws an exception.
void createDataChannel(String label)
Being supported means that the WebRtcEndpoint has been created with data channel support, the client also supports data channels, and they have been negotiated in the SDP exchange. Otherwise, the method throws an exception, indicating that the operation is not possible.
Data channels can work in either unreliable mode (analogous to User Datagram Protocol or UDP) or reliable mode (analogous to Transmission Control Protocol or TCP). The two modes have a simple distinction:
If data channels are not supported, this method throws an exception.
label
- Channel's labelvoid createDataChannel(String label, Continuation<Void> cont)
Continuation.onSuccess(F)
is called when the action is
done. If an error occurs, Continuation.onError(java.lang.Throwable)
is called.label
- Channel's labelcreateDataChannel(java.lang.String, boolean, int, int, java.lang.String)
void createDataChannel(Transaction tx, String label)
Being supported means that the WebRtcEndpoint has been created with data channel support, the client also supports data channels, and they have been negotiated in the SDP exchange. Otherwise, the method throws an exception, indicating that the operation is not possible.
Data channels can work in either unreliable mode (analogous to User Datagram Protocol or UDP) or reliable mode (analogous to Transmission Control Protocol or TCP). The two modes have a simple distinction:
If data channels are not supported, this method throws an exception.
label
- Channel's labelvoid createDataChannel(String label, boolean ordered)
Being supported means that the WebRtcEndpoint has been created with data channel support, the client also supports data channels, and they have been negotiated in the SDP exchange. Otherwise, the method throws an exception, indicating that the operation is not possible.
Data channels can work in either unreliable mode (analogous to User Datagram Protocol or UDP) or reliable mode (analogous to Transmission Control Protocol or TCP). The two modes have a simple distinction:
If data channels are not supported, this method throws an exception.
label
- Channel's labelordered
- If the data channel should guarantee order or not. If true, and maxPacketLifeTime and maxRetransmits have not been provided, reliable mode is activated.void createDataChannel(String label, boolean ordered, Continuation<Void> cont)
Continuation.onSuccess(F)
is called when the action is
done. If an error occurs, Continuation.onError(java.lang.Throwable)
is called.label
- Channel's labelordered
- If the data channel should guarantee order or not. If true, and maxPacketLifeTime and maxRetransmits have not been provided, reliable mode is activated.createDataChannel(java.lang.String, boolean, int, int, java.lang.String)
void createDataChannel(Transaction tx, String label, boolean ordered)
Being supported means that the WebRtcEndpoint has been created with data channel support, the client also supports data channels, and they have been negotiated in the SDP exchange. Otherwise, the method throws an exception, indicating that the operation is not possible.
Data channels can work in either unreliable mode (analogous to User Datagram Protocol or UDP) or reliable mode (analogous to Transmission Control Protocol or TCP). The two modes have a simple distinction:
If data channels are not supported, this method throws an exception.
label
- Channel's labelordered
- If the data channel should guarantee order or not. If true, and maxPacketLifeTime and maxRetransmits have not been provided, reliable mode is activated.void createDataChannel(String label, boolean ordered, int maxPacketLifeTime)
Being supported means that the WebRtcEndpoint has been created with data channel support, the client also supports data channels, and they have been negotiated in the SDP exchange. Otherwise, the method throws an exception, indicating that the operation is not possible.
Data channels can work in either unreliable mode (analogous to User Datagram Protocol or UDP) or reliable mode (analogous to Transmission Control Protocol or TCP). The two modes have a simple distinction:
If data channels are not supported, this method throws an exception.
label
- Channel's labelordered
- If the data channel should guarantee order or not. If true, and maxPacketLifeTime and maxRetransmits have not been provided, reliable mode is activated.maxPacketLifeTime
- The time window (in milliseconds) during which transmissions and retransmissions may take place in unreliable mode.
Note that this forces unreliable mode, even if ordered
has been activated.void createDataChannel(String label, boolean ordered, int maxPacketLifeTime, Continuation<Void> cont)
Continuation.onSuccess(F)
is called when the action is
done. If an error occurs, Continuation.onError(java.lang.Throwable)
is called.label
- Channel's labelordered
- If the data channel should guarantee order or not. If true, and maxPacketLifeTime and maxRetransmits have not been provided, reliable mode is activated.maxPacketLifeTime
- The time window (in milliseconds) during which transmissions and retransmissions may take place in unreliable mode.
Note that this forces unreliable mode, even if ordered
has been activated.createDataChannel(java.lang.String, boolean, int, int, java.lang.String)
void createDataChannel(Transaction tx, String label, boolean ordered, int maxPacketLifeTime)
Being supported means that the WebRtcEndpoint has been created with data channel support, the client also supports data channels, and they have been negotiated in the SDP exchange. Otherwise, the method throws an exception, indicating that the operation is not possible.
Data channels can work in either unreliable mode (analogous to User Datagram Protocol or UDP) or reliable mode (analogous to Transmission Control Protocol or TCP). The two modes have a simple distinction:
If data channels are not supported, this method throws an exception.
label
- Channel's labelordered
- If the data channel should guarantee order or not. If true, and maxPacketLifeTime and maxRetransmits have not been provided, reliable mode is activated.maxPacketLifeTime
- The time window (in milliseconds) during which transmissions and retransmissions may take place in unreliable mode.
Note that this forces unreliable mode, even if ordered
has been activated.void createDataChannel(String label, boolean ordered, int maxPacketLifeTime, int maxRetransmits)
Being supported means that the WebRtcEndpoint has been created with data channel support, the client also supports data channels, and they have been negotiated in the SDP exchange. Otherwise, the method throws an exception, indicating that the operation is not possible.
Data channels can work in either unreliable mode (analogous to User Datagram Protocol or UDP) or reliable mode (analogous to Transmission Control Protocol or TCP). The two modes have a simple distinction:
If data channels are not supported, this method throws an exception.
label
- Channel's labelordered
- If the data channel should guarantee order or not. If true, and maxPacketLifeTime and maxRetransmits have not been provided, reliable mode is activated.maxPacketLifeTime
- The time window (in milliseconds) during which transmissions and retransmissions may take place in unreliable mode.
Note that this forces unreliable mode, even if ordered
has been activated.maxRetransmits
- maximum number of retransmissions that are attempted in unreliable mode.
Note that this forces unreliable mode, even if ordered
has been activated.void createDataChannel(String label, boolean ordered, int maxPacketLifeTime, int maxRetransmits, Continuation<Void> cont)
Continuation.onSuccess(F)
is called when the action is
done. If an error occurs, Continuation.onError(java.lang.Throwable)
is called.label
- Channel's labelordered
- If the data channel should guarantee order or not. If true, and maxPacketLifeTime and maxRetransmits have not been provided, reliable mode is activated.maxPacketLifeTime
- The time window (in milliseconds) during which transmissions and retransmissions may take place in unreliable mode.
Note that this forces unreliable mode, even if ordered
has been activated.maxRetransmits
- maximum number of retransmissions that are attempted in unreliable mode.
Note that this forces unreliable mode, even if ordered
has been activated.createDataChannel(java.lang.String, boolean, int, int, java.lang.String)
void createDataChannel(Transaction tx, String label, boolean ordered, int maxPacketLifeTime, int maxRetransmits)
Being supported means that the WebRtcEndpoint has been created with data channel support, the client also supports data channels, and they have been negotiated in the SDP exchange. Otherwise, the method throws an exception, indicating that the operation is not possible.
Data channels can work in either unreliable mode (analogous to User Datagram Protocol or UDP) or reliable mode (analogous to Transmission Control Protocol or TCP). The two modes have a simple distinction:
If data channels are not supported, this method throws an exception.
label
- Channel's labelordered
- If the data channel should guarantee order or not. If true, and maxPacketLifeTime and maxRetransmits have not been provided, reliable mode is activated.maxPacketLifeTime
- The time window (in milliseconds) during which transmissions and retransmissions may take place in unreliable mode.
Note that this forces unreliable mode, even if ordered
has been activated.maxRetransmits
- maximum number of retransmissions that are attempted in unreliable mode.
Note that this forces unreliable mode, even if ordered
has been activated.ListenerSubscription addOnIceCandidateListener(EventListener<OnIceCandidateEvent> listener)
EventListener
for event OnIceCandidateEvent
. Synchronous call.listener
- Listener to be called on OnIceCandidateEventvoid addOnIceCandidateListener(EventListener<OnIceCandidateEvent> listener, Continuation<ListenerSubscription> cont)
EventListener
for event OnIceCandidateEvent
. Asynchronous call.
Calls Continuation<ListenerSubscription> when it has been added.listener
- Listener to be called on OnIceCandidateEventcont
- Continuation to be called when the listener is registeredvoid removeOnIceCandidateListener(ListenerSubscription listenerSubscription)
ListenerSubscription
for event OnIceCandidateEvent
. Synchronous call.listenerSubscription
- Listener subscription to be removedvoid removeOnIceCandidateListener(ListenerSubscription listenerSubscription, Continuation<Void> cont)
ListenerSubscription
for event OnIceCandidateEvent
. Asynchronous call.
Calls Continuation<Void> when it has been removed.listenerSubscription
- Listener subscription to be removedcont
- Continuation to be called when the listener is removedListenerSubscription addIceCandidateFoundListener(EventListener<IceCandidateFoundEvent> listener)
EventListener
for event IceCandidateFoundEvent
. Synchronous call.listener
- Listener to be called on IceCandidateFoundEventvoid addIceCandidateFoundListener(EventListener<IceCandidateFoundEvent> listener, Continuation<ListenerSubscription> cont)
EventListener
for event IceCandidateFoundEvent
. Asynchronous call.
Calls Continuation<ListenerSubscription> when it has been added.listener
- Listener to be called on IceCandidateFoundEventcont
- Continuation to be called when the listener is registeredvoid removeIceCandidateFoundListener(ListenerSubscription listenerSubscription)
ListenerSubscription
for event IceCandidateFoundEvent
. Synchronous call.listenerSubscription
- Listener subscription to be removedvoid removeIceCandidateFoundListener(ListenerSubscription listenerSubscription, Continuation<Void> cont)
ListenerSubscription
for event IceCandidateFoundEvent
. Asynchronous call.
Calls Continuation<Void> when it has been removed.listenerSubscription
- Listener subscription to be removedcont
- Continuation to be called when the listener is removedListenerSubscription addOnIceGatheringDoneListener(EventListener<OnIceGatheringDoneEvent> listener)
EventListener
for event OnIceGatheringDoneEvent
. Synchronous call.listener
- Listener to be called on OnIceGatheringDoneEventvoid addOnIceGatheringDoneListener(EventListener<OnIceGatheringDoneEvent> listener, Continuation<ListenerSubscription> cont)
EventListener
for event OnIceGatheringDoneEvent
. Asynchronous call.
Calls Continuation<ListenerSubscription> when it has been added.listener
- Listener to be called on OnIceGatheringDoneEventcont
- Continuation to be called when the listener is registeredvoid removeOnIceGatheringDoneListener(ListenerSubscription listenerSubscription)
ListenerSubscription
for event OnIceGatheringDoneEvent
. Synchronous call.listenerSubscription
- Listener subscription to be removedvoid removeOnIceGatheringDoneListener(ListenerSubscription listenerSubscription, Continuation<Void> cont)
ListenerSubscription
for event OnIceGatheringDoneEvent
. Asynchronous call.
Calls Continuation<Void> when it has been removed.listenerSubscription
- Listener subscription to be removedcont
- Continuation to be called when the listener is removedListenerSubscription addIceGatheringDoneListener(EventListener<IceGatheringDoneEvent> listener)
EventListener
for event IceGatheringDoneEvent
. Synchronous call.listener
- Listener to be called on IceGatheringDoneEventvoid addIceGatheringDoneListener(EventListener<IceGatheringDoneEvent> listener, Continuation<ListenerSubscription> cont)
EventListener
for event IceGatheringDoneEvent
. Asynchronous call.
Calls Continuation<ListenerSubscription> when it has been added.listener
- Listener to be called on IceGatheringDoneEventcont
- Continuation to be called when the listener is registeredvoid removeIceGatheringDoneListener(ListenerSubscription listenerSubscription)
ListenerSubscription
for event IceGatheringDoneEvent
. Synchronous call.listenerSubscription
- Listener subscription to be removedvoid removeIceGatheringDoneListener(ListenerSubscription listenerSubscription, Continuation<Void> cont)
ListenerSubscription
for event IceGatheringDoneEvent
. Asynchronous call.
Calls Continuation<Void> when it has been removed.listenerSubscription
- Listener subscription to be removedcont
- Continuation to be called when the listener is removedListenerSubscription addOnIceComponentStateChangedListener(EventListener<OnIceComponentStateChangedEvent> listener)
EventListener
for event OnIceComponentStateChangedEvent
. Synchronous call.listener
- Listener to be called on OnIceComponentStateChangedEventvoid addOnIceComponentStateChangedListener(EventListener<OnIceComponentStateChangedEvent> listener, Continuation<ListenerSubscription> cont)
EventListener
for event OnIceComponentStateChangedEvent
. Asynchronous call.
Calls Continuation<ListenerSubscription> when it has been added.listener
- Listener to be called on OnIceComponentStateChangedEventcont
- Continuation to be called when the listener is registeredvoid removeOnIceComponentStateChangedListener(ListenerSubscription listenerSubscription)
ListenerSubscription
for event OnIceComponentStateChangedEvent
. Synchronous call.listenerSubscription
- Listener subscription to be removedvoid removeOnIceComponentStateChangedListener(ListenerSubscription listenerSubscription, Continuation<Void> cont)
ListenerSubscription
for event OnIceComponentStateChangedEvent
. Asynchronous call.
Calls Continuation<Void> when it has been removed.listenerSubscription
- Listener subscription to be removedcont
- Continuation to be called when the listener is removedListenerSubscription addIceComponentStateChangeListener(EventListener<IceComponentStateChangeEvent> listener)
EventListener
for event IceComponentStateChangeEvent
. Synchronous call.listener
- Listener to be called on IceComponentStateChangeEventvoid addIceComponentStateChangeListener(EventListener<IceComponentStateChangeEvent> listener, Continuation<ListenerSubscription> cont)
EventListener
for event IceComponentStateChangeEvent
. Asynchronous call.
Calls Continuation<ListenerSubscription> when it has been added.listener
- Listener to be called on IceComponentStateChangeEventcont
- Continuation to be called when the listener is registeredvoid removeIceComponentStateChangeListener(ListenerSubscription listenerSubscription)
ListenerSubscription
for event IceComponentStateChangeEvent
. Synchronous call.listenerSubscription
- Listener subscription to be removedvoid removeIceComponentStateChangeListener(ListenerSubscription listenerSubscription, Continuation<Void> cont)
ListenerSubscription
for event IceComponentStateChangeEvent
. Asynchronous call.
Calls Continuation<Void> when it has been removed.listenerSubscription
- Listener subscription to be removedcont
- Continuation to be called when the listener is removedListenerSubscription addOnDataChannelOpenedListener(EventListener<OnDataChannelOpenedEvent> listener)
EventListener
for event OnDataChannelOpenedEvent
. Synchronous call.listener
- Listener to be called on OnDataChannelOpenedEventvoid addOnDataChannelOpenedListener(EventListener<OnDataChannelOpenedEvent> listener, Continuation<ListenerSubscription> cont)
EventListener
for event OnDataChannelOpenedEvent
. Asynchronous call.
Calls Continuation<ListenerSubscription> when it has been added.listener
- Listener to be called on OnDataChannelOpenedEventcont
- Continuation to be called when the listener is registeredvoid removeOnDataChannelOpenedListener(ListenerSubscription listenerSubscription)
ListenerSubscription
for event OnDataChannelOpenedEvent
. Synchronous call.listenerSubscription
- Listener subscription to be removedvoid removeOnDataChannelOpenedListener(ListenerSubscription listenerSubscription, Continuation<Void> cont)
ListenerSubscription
for event OnDataChannelOpenedEvent
. Asynchronous call.
Calls Continuation<Void> when it has been removed.listenerSubscription
- Listener subscription to be removedcont
- Continuation to be called when the listener is removedListenerSubscription addDataChannelOpenListener(EventListener<DataChannelOpenEvent> listener)
EventListener
for event DataChannelOpenEvent
. Synchronous call.listener
- Listener to be called on DataChannelOpenEventvoid addDataChannelOpenListener(EventListener<DataChannelOpenEvent> listener, Continuation<ListenerSubscription> cont)
EventListener
for event DataChannelOpenEvent
. Asynchronous call.
Calls Continuation<ListenerSubscription> when it has been added.listener
- Listener to be called on DataChannelOpenEventcont
- Continuation to be called when the listener is registeredvoid removeDataChannelOpenListener(ListenerSubscription listenerSubscription)
ListenerSubscription
for event DataChannelOpenEvent
. Synchronous call.listenerSubscription
- Listener subscription to be removedvoid removeDataChannelOpenListener(ListenerSubscription listenerSubscription, Continuation<Void> cont)
ListenerSubscription
for event DataChannelOpenEvent
. Asynchronous call.
Calls Continuation<Void> when it has been removed.listenerSubscription
- Listener subscription to be removedcont
- Continuation to be called when the listener is removedListenerSubscription addOnDataChannelClosedListener(EventListener<OnDataChannelClosedEvent> listener)
EventListener
for event OnDataChannelClosedEvent
. Synchronous call.listener
- Listener to be called on OnDataChannelClosedEventvoid addOnDataChannelClosedListener(EventListener<OnDataChannelClosedEvent> listener, Continuation<ListenerSubscription> cont)
EventListener
for event OnDataChannelClosedEvent
. Asynchronous call.
Calls Continuation<ListenerSubscription> when it has been added.listener
- Listener to be called on OnDataChannelClosedEventcont
- Continuation to be called when the listener is registeredvoid removeOnDataChannelClosedListener(ListenerSubscription listenerSubscription)
ListenerSubscription
for event OnDataChannelClosedEvent
. Synchronous call.listenerSubscription
- Listener subscription to be removedvoid removeOnDataChannelClosedListener(ListenerSubscription listenerSubscription, Continuation<Void> cont)
ListenerSubscription
for event OnDataChannelClosedEvent
. Asynchronous call.
Calls Continuation<Void> when it has been removed.listenerSubscription
- Listener subscription to be removedcont
- Continuation to be called when the listener is removedListenerSubscription addDataChannelCloseListener(EventListener<DataChannelCloseEvent> listener)
EventListener
for event DataChannelCloseEvent
. Synchronous call.listener
- Listener to be called on DataChannelCloseEventvoid addDataChannelCloseListener(EventListener<DataChannelCloseEvent> listener, Continuation<ListenerSubscription> cont)
EventListener
for event DataChannelCloseEvent
. Asynchronous call.
Calls Continuation<ListenerSubscription> when it has been added.listener
- Listener to be called on DataChannelCloseEventcont
- Continuation to be called when the listener is registeredvoid removeDataChannelCloseListener(ListenerSubscription listenerSubscription)
ListenerSubscription
for event DataChannelCloseEvent
. Synchronous call.listenerSubscription
- Listener subscription to be removedvoid removeDataChannelCloseListener(ListenerSubscription listenerSubscription, Continuation<Void> cont)
ListenerSubscription
for event DataChannelCloseEvent
. Asynchronous call.
Calls Continuation<Void> when it has been removed.listenerSubscription
- Listener subscription to be removedcont
- Continuation to be called when the listener is removedListenerSubscription addNewCandidatePairSelectedListener(EventListener<NewCandidatePairSelectedEvent> listener)
EventListener
for event NewCandidatePairSelectedEvent
. Synchronous call.listener
- Listener to be called on NewCandidatePairSelectedEventvoid addNewCandidatePairSelectedListener(EventListener<NewCandidatePairSelectedEvent> listener, Continuation<ListenerSubscription> cont)
EventListener
for event NewCandidatePairSelectedEvent
. Asynchronous call.
Calls Continuation<ListenerSubscription> when it has been added.listener
- Listener to be called on NewCandidatePairSelectedEventcont
- Continuation to be called when the listener is registeredvoid removeNewCandidatePairSelectedListener(ListenerSubscription listenerSubscription)
ListenerSubscription
for event NewCandidatePairSelectedEvent
. Synchronous call.listenerSubscription
- Listener subscription to be removedvoid removeNewCandidatePairSelectedListener(ListenerSubscription listenerSubscription, Continuation<Void> cont)
ListenerSubscription
for event NewCandidatePairSelectedEvent
. Asynchronous call.
Calls Continuation<Void> when it has been removed.listenerSubscription
- Listener subscription to be removedcont
- Continuation to be called when the listener is removedCopyright © 2020 Kurento. All rights reserved.