Class: BaseRtpEndpoint

(abstract) core/abstracts.BaseRtpEndpoint()

Handles RTP communications.

All endpoints that rely on the RTP protocol, like the RtpEndpoint or the WebRtcEndpoint, inherit from this class. The endpoint provides information about the connection state and the media state, which can be consulted at any time through the module:core/abstracts.BaseRtpEndpoint#mediaState and the module:core/abstracts.BaseRtpEndpoint#connectionState properties. It is also possible subscribe to events fired when these properties change.

  • ConnectionStateChangedEvent: This event is raised when the connection between two peers changes. It can have two values:
    • CONNECTED
    • DISCONNECTED
  • MediaStateChangedEvent: Based on RTCP packet flow, this event provides more reliable information about the state of media flow. Since RTCP packets are not flowing at a constant rate (minimizing a browser with an RTCPeerConnection might affect this interval, for instance), there is a guard period of about 5s. This traduces in a period where there might be media flowing, but the event hasn't been fired yet. Nevertheless, this is the most reliable and useful way of knowing what the state of media exchange is. Possible values are:
    • CONNECTED: There is an RTCP packet flow between peers.
    • DISCONNECTED: No RTCP packets have been received, or at least 5s have passed since the last packet arrived.

Part of the bandwidth control of the video component of the media session is done here:

  • Input bandwidth: Configuration value used to inform remote peers about the bitrate that can be pushed into this endpoint.
    • {get,set}MinVideoRecvBandwidth: Minimum bitrate requested on the received video stream.
    • {get,set}Max{Audio,Video}RecvBandwidth: Maximum bitrate expected for the received stream.
  • Output bandwidth: Configuration values used to control bitrate of the output video stream sent to remote peers. It is important to keep in mind that pushed bitrate depends on network and remote peer capabilities. Remote peers can also announce bandwidth limitation in their SDPs (through the b={modifier}:{value} tag). Kurento will always enforce bitrate limitations specified by the remote peer over internal configurations.
    • {get,set}MinVideoSendBandwidth: Minimum video bitrate sent to remote peer.
    • {get,set}MaxVideoSendBandwidth: Maximum video bitrate sent to remote peer.
    • RembParams.rembOnConnect: Initial local REMB bandwidth estimation that gets propagated when a new endpoint is connected.

All bandwidth control parameters must be changed before the SDP negotiation takes place, and can't be changed afterwards.

Extends

Members

(static) constructorParams

Source:

(static) events

Source:

Methods

getChildren(callbackopt) → {external:Promise}

Children of this MediaObject.
Parameters:
Name Type Attributes Description
callback module:core/abstracts.MediaObject~getChildrenCallback <optional>
Inherited From:
Source:
Returns:
Type
external:Promise

getChilds(callbackopt) → {external:Promise}

Children of this MediaObject.
Parameters:
Name Type Attributes Description
callback module:core/abstracts.MediaObject~getChildsCallback <optional>
Inherited From:
Deprecated:
  • Use children instead.
Source:
Returns:
Type
external:Promise

getConnectionState(callbackopt) → {external:Promise}

Connection state.
  • CONNECTED
  • DISCONNECTED
Parameters:
Name Type Attributes Description
callback module:core/abstracts.BaseRtpEndpoint~getConnectionStateCallback <optional>
Source:
Returns:
Type
external:Promise

getCreationTime(callbackopt) → {external:Promise}

MediaObject creation time in seconds since Epoch.
Parameters:
Name Type Attributes Description
callback module:core/abstracts.MediaObject~getCreationTimeCallback <optional>
Inherited From:
Source:
Returns:
Type
external:Promise

getMaxAudioRecvBandwidth(callbackopt) → {external:Promise}

Maximum bitrate expected for the received audio stream.

This is used to put a limit on the bitrate that the remote peer will send to this endpoint. The net effect of setting this parameter is that when Kurento generates an SDP Offer, an 'Application Specific' (AS) maximum bandwidth attribute will be added to the SDP media section: b=AS:{value}.

Note: This parameter has to be set before the SDP is generated.

  • Unit: kbps (kilobits per second).
  • Default: 0.
  • 0 = unconstrained.
Parameters:
Name Type Attributes Description
callback module:core/abstracts.SdpEndpoint~getMaxAudioRecvBandwidthCallback <optional>
Inherited From:
Source:
Returns:
Type
external:Promise

getMaxOuputBitrate(callbackopt) → {external:Promise}

Maximum video bandwidth for transcoding.
Parameters:
Name Type Attributes Description
callback module:core/abstracts.MediaElement~getMaxOuputBitrateCallback <optional>
Inherited From:
Deprecated:
  • Deprecated due to a typo. Use module:core/abstracts.MediaElement#maxOutputBitrate instead of this function.
Source:
Returns:
Type
external:Promise

getMaxOutputBitrate(callbackopt) → {external:Promise}

Maximum video bitrate for transcoding.
  • Unit: bps (bits per second).
  • Default: MAXINT.
  • 0 = unlimited.
Parameters:
Name Type Attributes Description
callback module:core/abstracts.MediaElement~getMaxOutputBitrateCallback <optional>
Inherited From:
Source:
Returns:
Type
external:Promise

getMaxVideoRecvBandwidth(callbackopt) → {external:Promise}

Maximum bitrate expected for the received video stream.

This is used to put a limit on the bitrate that the remote peer will send to this endpoint. The net effect of setting this parameter is that when Kurento generates an SDP Offer, an 'Application Specific' (AS) maximum bandwidth attribute will be added to the SDP media section: b=AS:{value}.

Note: This parameter has to be set before the SDP is generated.

  • Unit: kbps (kilobits per second).
  • Default: 0.
  • 0 = unconstrained.
Parameters:
Name Type Attributes Description
callback module:core/abstracts.SdpEndpoint~getMaxVideoRecvBandwidthCallback <optional>
Inherited From:
Source:
Returns:
Type
external:Promise

getMaxVideoSendBandwidth(callbackopt) → {external:Promise}

Maximum video bitrate sent to remote peer.

With this parameter you can control the maximum video quality that will be sent when reacting to good network conditions. Setting this parameter to a high value permits the video quality to raise when the network conditions get better.

This parameter provides a way to limit the bitrate requested by remote REMB bandwidth estimations: the bitrate sent will be always equal or less than this parameter, even if the remote peer requests higher bitrates.

Note that the default value of 500 kbps is a VERY conservative one, and leads to a low maximum video quality. Most applications will probably want to increase this parameter to higher values such as 2000 mbps) or even 10000 (10 mbps).

The REMB congestion control algorithm works by gradually increasing the output video bitrate, until the available bandwidth is fully used or the maximum send bitrate has been reached. This is a slow, progressive change, which starts at 300 kbps by default. You can change the default starting point of REMB estimations, by setting RembParams.rembOnConnect.

  • Unit: kbps (kilobits per second).
  • Default: 500.
  • 0 = unconstrained: the video bitrate will grow until all the available network bandwidth is used by the stream.
    Note that this might have a bad effect if more than one stream is running (as all of them would try to raise the video bitrate indefinitely, until the network gets saturated).
Parameters:
Name Type Attributes Description
callback module:core/abstracts.BaseRtpEndpoint~getMaxVideoSendBandwidthCallback <optional>
Source:
Returns:
Type
external:Promise

getMediaPipeline(callbackopt) → {external:Promise}

MediaPipeline to which this MediaObject belongs. It returns itself when invoked for a pipeline object.
Parameters:
Name Type Attributes Description
callback module:core/abstracts.MediaObject~getMediaPipelineCallback <optional>
Inherited From:
Source:
Returns:
Type
external:Promise

getMediaState(callbackopt) → {external:Promise}

Media flow state.
  • CONNECTED: There is an RTCP flow.
  • DISCONNECTED: No RTCP packets have been received for at least 5 sec.
Parameters:
Name Type Attributes Description
callback module:core/abstracts.BaseRtpEndpoint~getMediaStateCallback <optional>
Source:
Returns:
Type
external:Promise

getMinOuputBitrate(callbackopt) → {external:Promise}

Minimum video bandwidth for transcoding.
Parameters:
Name Type Attributes Description
callback module:core/abstracts.MediaElement~getMinOuputBitrateCallback <optional>
Inherited From:
Deprecated:
  • Deprecated due to a typo. Use module:core/abstracts.MediaElement#minOutputBitrate instead of this function.
Source:
Returns:
Type
external:Promise

getMinOutputBitrate(callbackopt) → {external:Promise}

Minimum video bitrate for transcoding.
  • Unit: bps (bits per second).
  • Default: 0.
Parameters:
Name Type Attributes Description
callback module:core/abstracts.MediaElement~getMinOutputBitrateCallback <optional>
Inherited From:
Source:
Returns:
Type
external:Promise

getMinVideoRecvBandwidth(callbackopt) → {external:Promise}

Minimum bitrate requested on the received video stream.

This is used to set a minimum value of local REMB during bandwidth estimation, if supported by the implementing class. The REMB estimation will then be sent to remote peers, requesting them to send at least the indicated video bitrate. It follows that min values will only have effect in remote peers that support this congestion control mechanism, such as Chrome.

  • Unit: kbps (kilobits per second).
  • Default: 0.
  • Note: The absolute minimum REMB value is 30 kbps, even if a lower value is set here.
Parameters:
Name Type Attributes Description
callback module:core/abstracts.BaseRtpEndpoint~getMinVideoRecvBandwidthCallback <optional>
Source:
Returns:
Type
external:Promise

getMinVideoSendBandwidth(callbackopt) → {external:Promise}

Minimum video bitrate sent to remote peer.

With this parameter you can control the minimum video quality that will be sent when reacting to bad network conditions. Setting this parameter to a low value permits the video quality to drop when the network conditions get worse.

This parameter provides a way to override the bitrate requested by remote REMB bandwidth estimations: the bitrate sent will be always equal or greater than this parameter, even if the remote peer requests even lower bitrates.

Note that if you set this parameter too high (trying to avoid bad video quality altogether), you would be limiting the adaptation ability of the congestion control algorithm, and your stream might be unable to ever recover from adverse network conditions.

  • Unit: kbps (kilobits per second).
  • Default: 100.
  • 0 = unconstrained: the video bitrate will drop as needed, even to the lowest possible quality, which might make the video completely blurry and pixelated.
Parameters:
Name Type Attributes Description
callback module:core/abstracts.BaseRtpEndpoint~getMinVideoSendBandwidthCallback <optional>
Source:
Returns:
Type
external:Promise

getMtu(callbackopt) → {external:Promise}

Maximum Transmission Unit (MTU) used for RTP.

This setting affects the maximum size that will be used by RTP payloads. You can change it from the default, if you think that a different value would be beneficial for the typical network settings of your application.

The default value is 1200 Bytes. This is the same as in libwebrtc (from webrtc.org), as used by Firefox or Chrome . You can read more about this value in Why RTP max packet size is 1200 in WebRTC? .

WARNING: Change this value ONLY if you really know what you are doing and you have strong reasons to do so. Do NOT change this parameter just because it seems to work better for some reduced scope tests. The default value is a consensus chosen by people who have deep knowledge about network optimization.

  • Unit: Bytes.
  • Default: 1200.
Parameters:
Name Type Attributes Description
callback module:core/abstracts.BaseRtpEndpoint~getMtuCallback <optional>
Source:
Returns:
Type
external:Promise

getName(callbackopt) → {external:Promise}

This MediaObject's name.

This is just sugar to simplify developers' life debugging, it is not used internally for indexing nor identifying the objects. By default, it's the object's ID.

Parameters:
Name Type Attributes Description
callback module:core/abstracts.MediaObject~getNameCallback <optional>
Inherited From:
Source:
Returns:
Type
external:Promise

getParent(callbackopt) → {external:Promise}

Parent of this MediaObject.

The parent of a Hub or a MediaElement is its MediaPipeline. A MediaPipeline has no parent, so this property will be null.

Parameters:
Name Type Attributes Description
callback module:core/abstracts.MediaObject~getParentCallback <optional>
Inherited From:
Source:
Returns:
Type
external:Promise

getRembParams(callbackopt) → {external:Promise}

Advanced parameters to configure the congestion control algorithm.
Parameters:
Name Type Attributes Description
callback module:core/abstracts.BaseRtpEndpoint~getRembParamsCallback <optional>
Source:
Returns:
Type
external:Promise

getSendTagsInEvents(callbackopt) → {external:Promise}

Flag activating or deactivating sending the element's tags in fired events.
Parameters:
Name Type Attributes Description
callback module:core/abstracts.MediaObject~getSendTagsInEventsCallback <optional>
Inherited From:
Source:
Returns:
Type
external:Promise

setMaxAudioRecvBandwidth(maxAudioRecvBandwidth, callbackopt) → {external:Promise}

Maximum bitrate expected for the received audio stream.

This is used to put a limit on the bitrate that the remote peer will send to this endpoint. The net effect of setting this parameter is that when Kurento generates an SDP Offer, an 'Application Specific' (AS) maximum bandwidth attribute will be added to the SDP media section: b=AS:{value}.

Note: This parameter has to be set before the SDP is generated.

  • Unit: kbps (kilobits per second).
  • Default: 0.
  • 0 = unconstrained.
Parameters:
Name Type Attributes Description
maxAudioRecvBandwidth external:Integer
callback module:core/abstracts.SdpEndpoint~setMaxAudioRecvBandwidthCallback <optional>
Inherited From:
Source:
Returns:
Type
external:Promise

setMaxOuputBitrate(maxOuputBitrate, callbackopt) → {external:Promise}

Maximum video bandwidth for transcoding.
Parameters:
Name Type Attributes Description
maxOuputBitrate external:Integer
callback module:core/abstracts.MediaElement~setMaxOuputBitrateCallback <optional>
Inherited From:
Deprecated:
  • Deprecated due to a typo. Use module:core/abstracts.MediaElement#maxOutputBitrate instead of this function.
Source:
Returns:
Type
external:Promise

setMaxOutputBitrate(maxOutputBitrate, callbackopt) → {external:Promise}

Maximum video bitrate for transcoding.
  • Unit: bps (bits per second).
  • Default: MAXINT.
  • 0 = unlimited.
Parameters:
Name Type Attributes Description
maxOutputBitrate external:Integer
callback module:core/abstracts.MediaElement~setMaxOutputBitrateCallback <optional>
Inherited From:
Source:
Returns:
Type
external:Promise

setMaxVideoRecvBandwidth(maxVideoRecvBandwidth, callbackopt) → {external:Promise}

Maximum bitrate expected for the received video stream.

This is used to put a limit on the bitrate that the remote peer will send to this endpoint. The net effect of setting this parameter is that when Kurento generates an SDP Offer, an 'Application Specific' (AS) maximum bandwidth attribute will be added to the SDP media section: b=AS:{value}.

Note: This parameter has to be set before the SDP is generated.

  • Unit: kbps (kilobits per second).
  • Default: 0.
  • 0 = unconstrained.
Parameters:
Name Type Attributes Description
maxVideoRecvBandwidth external:Integer
callback module:core/abstracts.SdpEndpoint~setMaxVideoRecvBandwidthCallback <optional>
Inherited From:
Source:
Returns:
Type
external:Promise

setMaxVideoSendBandwidth(maxVideoSendBandwidth, callbackopt) → {external:Promise}

Maximum video bitrate sent to remote peer.

With this parameter you can control the maximum video quality that will be sent when reacting to good network conditions. Setting this parameter to a high value permits the video quality to raise when the network conditions get better.

This parameter provides a way to limit the bitrate requested by remote REMB bandwidth estimations: the bitrate sent will be always equal or less than this parameter, even if the remote peer requests higher bitrates.

Note that the default value of 500 kbps is a VERY conservative one, and leads to a low maximum video quality. Most applications will probably want to increase this parameter to higher values such as 2000 mbps) or even 10000 (10 mbps).

The REMB congestion control algorithm works by gradually increasing the output video bitrate, until the available bandwidth is fully used or the maximum send bitrate has been reached. This is a slow, progressive change, which starts at 300 kbps by default. You can change the default starting point of REMB estimations, by setting RembParams.rembOnConnect.

  • Unit: kbps (kilobits per second).
  • Default: 500.
  • 0 = unconstrained: the video bitrate will grow until all the available network bandwidth is used by the stream.
    Note that this might have a bad effect if more than one stream is running (as all of them would try to raise the video bitrate indefinitely, until the network gets saturated).
Parameters:
Name Type Attributes Description
maxVideoSendBandwidth external:Integer
callback module:core/abstracts.BaseRtpEndpoint~setMaxVideoSendBandwidthCallback <optional>
Source:
Returns:
Type
external:Promise

setMinOuputBitrate(minOuputBitrate, callbackopt) → {external:Promise}

Minimum video bandwidth for transcoding.
Parameters:
Name Type Attributes Description
minOuputBitrate external:Integer
callback module:core/abstracts.MediaElement~setMinOuputBitrateCallback <optional>
Inherited From:
Deprecated:
  • Deprecated due to a typo. Use module:core/abstracts.MediaElement#minOutputBitrate instead of this function.
Source:
Returns:
Type
external:Promise

setMinOutputBitrate(minOutputBitrate, callbackopt) → {external:Promise}

Minimum video bitrate for transcoding.
  • Unit: bps (bits per second).
  • Default: 0.
Parameters:
Name Type Attributes Description
minOutputBitrate external:Integer
callback module:core/abstracts.MediaElement~setMinOutputBitrateCallback <optional>
Inherited From:
Source:
Returns:
Type
external:Promise

setMinVideoRecvBandwidth(minVideoRecvBandwidth, callbackopt) → {external:Promise}

Minimum bitrate requested on the received video stream.

This is used to set a minimum value of local REMB during bandwidth estimation, if supported by the implementing class. The REMB estimation will then be sent to remote peers, requesting them to send at least the indicated video bitrate. It follows that min values will only have effect in remote peers that support this congestion control mechanism, such as Chrome.

  • Unit: kbps (kilobits per second).
  • Default: 0.
  • Note: The absolute minimum REMB value is 30 kbps, even if a lower value is set here.
Parameters:
Name Type Attributes Description
minVideoRecvBandwidth external:Integer
callback module:core/abstracts.BaseRtpEndpoint~setMinVideoRecvBandwidthCallback <optional>
Source:
Returns:
Type
external:Promise

setMinVideoSendBandwidth(minVideoSendBandwidth, callbackopt) → {external:Promise}

Minimum video bitrate sent to remote peer.

With this parameter you can control the minimum video quality that will be sent when reacting to bad network conditions. Setting this parameter to a low value permits the video quality to drop when the network conditions get worse.

This parameter provides a way to override the bitrate requested by remote REMB bandwidth estimations: the bitrate sent will be always equal or greater than this parameter, even if the remote peer requests even lower bitrates.

Note that if you set this parameter too high (trying to avoid bad video quality altogether), you would be limiting the adaptation ability of the congestion control algorithm, and your stream might be unable to ever recover from adverse network conditions.

  • Unit: kbps (kilobits per second).
  • Default: 100.
  • 0 = unconstrained: the video bitrate will drop as needed, even to the lowest possible quality, which might make the video completely blurry and pixelated.
Parameters:
Name Type Attributes Description
minVideoSendBandwidth external:Integer
callback module:core/abstracts.BaseRtpEndpoint~setMinVideoSendBandwidthCallback <optional>
Source:
Returns:
Type
external:Promise

setMtu(mtu, callbackopt) → {external:Promise}

Maximum Transmission Unit (MTU) used for RTP.

This setting affects the maximum size that will be used by RTP payloads. You can change it from the default, if you think that a different value would be beneficial for the typical network settings of your application.

The default value is 1200 Bytes. This is the same as in libwebrtc (from webrtc.org), as used by Firefox or Chrome . You can read more about this value in Why RTP max packet size is 1200 in WebRTC? .

WARNING: Change this value ONLY if you really know what you are doing and you have strong reasons to do so. Do NOT change this parameter just because it seems to work better for some reduced scope tests. The default value is a consensus chosen by people who have deep knowledge about network optimization.

  • Unit: Bytes.
  • Default: 1200.
Parameters:
Name Type Attributes Description
mtu external:Integer
callback module:core/abstracts.BaseRtpEndpoint~setMtuCallback <optional>
Source:
Returns:
Type
external:Promise

setName(name, callbackopt) → {external:Promise}

This MediaObject's name.

This is just sugar to simplify developers' life debugging, it is not used internally for indexing nor identifying the objects. By default, it's the object's ID.

Parameters:
Name Type Attributes Description
name external:String
callback module:core/abstracts.MediaObject~setNameCallback <optional>
Inherited From:
Source:
Returns:
Type
external:Promise

setRembParams(rembParams, callbackopt) → {external:Promise}

Advanced parameters to configure the congestion control algorithm.
Parameters:
Name Type Attributes Description
rembParams module:core/complexTypes.RembParams
callback module:core/abstracts.BaseRtpEndpoint~setRembParamsCallback <optional>
Source:
Returns:
Type
external:Promise

setSendTagsInEvents(sendTagsInEvents, callbackopt) → {external:Promise}

Flag activating or deactivating sending the element's tags in fired events.
Parameters:
Name Type Attributes Description
sendTagsInEvents external:Boolean
callback module:core/abstracts.MediaObject~setSendTagsInEventsCallback <optional>
Inherited From:
Source:
Returns:
Type
external:Promise

Type Definitions

getConnectionStateCallback(error, result)

Parameters:
Name Type Description
error external:Error
result module:core/complexTypes.ConnectionState
Source:

getMaxVideoSendBandwidthCallback(error, result)

Parameters:
Name Type Description
error external:Error
result external:Integer
Source:

getMediaStateCallback(error, result)

Parameters:
Name Type Description
error external:Error
result module:core/complexTypes.MediaState
Source:

getMinVideoRecvBandwidthCallback(error, result)

Parameters:
Name Type Description
error external:Error
result external:Integer
Source:

getMinVideoSendBandwidthCallback(error, result)

Parameters:
Name Type Description
error external:Error
result external:Integer
Source:

getMtuCallback(error, result)

Parameters:
Name Type Description
error external:Error
result external:Integer
Source:

getRembParamsCallback(error, result)

Parameters:
Name Type Description
error external:Error
result module:core/complexTypes.RembParams
Source:

setMaxVideoSendBandwidthCallback(error)

Parameters:
Name Type Description
error external:Error
Source:

setMinVideoRecvBandwidthCallback(error)

Parameters:
Name Type Description
error external:Error
Source:

setMinVideoSendBandwidthCallback(error)

Parameters:
Name Type Description
error external:Error
Source:

setMtuCallback(error)

Parameters:
Name Type Description
error external:Error
Source:

setRembParamsCallback(error)

Parameters:
Name Type Description
error external:Error
Source: