Skip to end of metadata
Go to start of metadata


Streams, at their core are logical flows of media. They can be unidirectional or bidirectional and are comprised of media formats. The media formats also contain a type. To simplify things streams only carry a single type of media. Streams can also carry an identifier in the form of a name.  For a simple voice call, the stream concept adds no additional value.  For video, and specifically WebRTC, streams are essential for things like multi-party video conferencing where a single client may have 8 video streams coming in, 1 video stream going out and 1 bi-directional audio stream.

Prior to version 15, Asterisk had no explicit interface for streams and simply had a single pipe that frames are written to and read from. The negotiated formats are scoped to the entire channel as a result. Interfaces that needed to manipulate media had to inject themselves into this single pipe and had to take special care to not manipulate frames they do not need to. This same pipe also carries control frames and other signaling related operations.  The result was a very loose stream implementation.  For Asterisk 15, the stream concept has been codified with a new set of capabilities designed specifically for manipulating streams and stream topologies that can be used by any channel driver.


To simplify configuration for users a new option, webrtc, has been created which controls configuration options that are required for WebRTC. If the webrtc option is set to "yes" then all options required for WebRTC are enabled. This does still require that DTLS certificates be manually created and configured.

BUNDLE support has been added which improves call setup time. BUNDLE allows multiple streams (for example audio and video) to use the same underlying transport. Since in WebRTC a transport has to go through ICE negotiation and DTLS negotiation this reduces each of those to only happening once. If additional streams are added to a call this also removes the need to do ICE negotiation and DTLS negotiation allowing the media to flow immediately.

Bundled pjproject

Starting with Asterisk 15, the bundled version of pjproject will be used by default.  To use an external (or no) pjproject, add the --without-pjproject-bundled option to your ./configure command line.  Some enhancements were made to the download process to make it easier to use the bundled pjproject on a build machine with no internet access.  See PJSIP-pjproject for more information.

Other New Features

 Add support for systemd socket activation
(Reported by Corey Farrell)
 core: Add support for timelen parsing to ast_parse_arg and ACO.
(Reported by Corey Farrell)
 ast_waitfordigit_full: add support for filtering DTMF keys which can break the wait.
(Reported by Corey Farrell)
 Add QUEUE_FLOAT_PENALTY to app_queue
(Reported by Steve Davies)
 func_channel: Add ability to get the callid so dialplan has access to it.
(Reported by Richard Mudgett)
 res_pjsip: Add endpoint identification scheme based on a configured SIP header/value
(Reported by Matt Jordan)
 [patch] Allow "Comedian Mail" branding to be removed
(Reported by John Covert)
 [patch] RTCP feedback for codec modules
(Reported by Lorenzo Miniero)
 app_queue: Update Data of Queues (use queues as outbound calls container)
(Reported by scgm11)
 Make logging PJPROJECT messages a bit easier
(Reported by Richard Mudgett)
 app_originate: Add option to execute gosub prior to dial
(Reported by dkerr)
 ARI: Add the ability to control the source of video in a multi-party mixing bridge
(Reported by Matt Jordan)
 ARI: Add ability to specify channel variables on websocket events
(Reported by Mark Michelson)
 ARI: Add an 'asterisk_id' field to outgoing events
(Reported by Matt Jordan)
 Add dialplan function PJSIP_SEND_SESSION_REFRESH that sends a session refresh to update formats on a channel after session establishment
(Reported by Matt Jordan)
  • No labels