Hi folks,

For those of you following along at home, I recently published review https://gerrit.asterisk.org/#/c/5760/ , which is step one towards making chan_pjsip multistream, i.e. supporting more than one stream of a given media type. This initial review does not actually introduce multistream support so much as it just makes use of multistream structures under the hood to ease the transition.

Continuing on, one of the next steps we need to determine is how a user of chan_pjsip should configure a channel that supports multiple streams of a particular type.

To refresh everyone on how things currently work in pjsip.conf, you set an "allow" option in order to determine what codecs a particular endpoint supports.

[Alice]
type = endpoint
allow = ulaw,opus,h264

In the above example, the endpoint "Alice" supports the ulaw and opus audio codecs and the H.264 video codec. Given that information, when Asterisk creates an offer to Alice, Asterisk may offer at most one audio stream and one video stream. Most commonly, the determination of what to offer is based on whatever incoming call results in the call to Alice. So if Bob called in and only offered audio, then Asterisk would offer one audio stream to Alice and no video (even though Alice is configured to allow video). If Carol called in and offered both audio and video, then Asterisk would offer one audio stream and one video stream on the resulting outgoing call to Alice.

Consider now that Alice is an endpoint that is capable of supporting more than one audio or video stream. For instance, Alice may be a browser that can support multiple video streams being displayed at once. The above configuration does not convey Alice's capabilities clearly. Asterisk has no way of knowing how many streams Alice would prefer to have offered to her, and Asterisk has no idea what Alice's limitations are with regards to number of streams.


I propose the following configuration options to move forward.

offered_audio_streams = 1
offered_video_streams = 2

The offered_audio_streams and offered_video_streams options will determine how many streams Asterisk will offer to Alice when no other hints are available to dictate how many streams to offer. This would be used most commonly when originating a call to Alice from Asterisk. With the options specified above, Asterisk would offer one audio stream and two video streams when originating a call to Alice. This option would not be consulted if the outgoing call to Alice were the result of an incoming call from someone else. For instance, an incoming call from Carol might offer only one audio and one video stream. In that case, Asterisk would mirror Carol's capabilities by only offering one audio and one video stream in the outgoing call to Alice. To maintain behavior of previous versions of Asterisk, the default value for both options would be 1.


max_audio_streams = 1
max_video_streams = 5

The max_audio_streams and max_video_streams options will determine the maximum number of streams Asterisk may offer to Alice. This option would come into play most commonly because an application (such as ConfBridge) may wish to expand the number of video streams configured on an endpoint further and further. The option would also come into play on basic one-to-one calls. These options would make it so that Asterisk would not attempt to offer an "unreasonable" number of streams to a particular endpoint. Say that Bob calls into Asterisk on some crazy device that offers three audio streams and six video streams. Given the options specified above, Asterisk would only offer one audio stream and five video streams to Alice. The rest of Bob's offered streams would be rejected. To maintain behavior of previous Asterisk versions, the default value for both options would be 1.


minimum_audio_streams = 1
minimum_video_streams = 0

This determines the minimum number of audio and video streams that must be present before Asterisk will attempt a call to Alice. Let's say that Bob calls Alice and offers one audio and one video stream. The audio stream is compatible with Alice's audio codecs, but the video codecs offered are not compatible with Alice's video. The result is that Asterisk is only capable of offering one audio stream to Alice and no video. Should Asterisk attempt to call Alice? According to the configuration above, yes. If Alice had configured the minimum_video_streams to be 1 instead of 0, though, Asterisk would have rejected the incoming call from Bob instead. To maintain compatibility with previous versions of Asterisk, the default values for these options would be 1 for minimum_audio_streams and 0 for minimum_video_streams.


With these options, Asterisk can reasonably have multistream support for PJSIP channels. Configuration from previous Asterisk versions would continue to work and behave the same after an upgrade. The only potential downside I see is that if you wanted to be able to configure separate capabilities for different streams, then that is not possible with this configuration scheme.

What are people's thoughts on this? Got better configuration ideas? Can you think of something I'm not thinking of? For the time being, I'd like to focus on the configuration file/realtime options moreso than dialplan functions that would pertain to a single call. We can get to that discussion after this part gets settled.

Thanks,
Mark Michelson

--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
  http://lists.digium.com/mailman/listinfo/asterisk-dev

Reply via email to