Skip to content

Add support for SIP configuration#782

Open
jflevesque-genetec wants to merge 11 commits into
developmentfrom
video/sip
Open

Add support for SIP configuration#782
jflevesque-genetec wants to merge 11 commits into
developmentfrom
video/sip

Conversation

@jflevesque-genetec

Copy link
Copy Markdown
Contributor

New API specifications for configuring some settings related to SIP.

SipServerConfiguration: How a SIP device can connect to a SIP registrar
NatConfiguration: If a device needs STUN/TURN servers to reach a SIP registrar (for example in a cloud setup)
CallConfiguration: Settings related to establish a call, for example which recipient are you calling when pressing on a button on an intercom
StreamingConfiguration: Configuration to be used when streaming through a SIP call.

@jflevesque-genetec

jflevesque-genetec commented Jun 3, 2026

Copy link
Copy Markdown
Contributor Author

Suggestion to move these new APIs into a SIP specification. Will be working on that shortly.
Update: Changes have been applied on the branch

Comment thread doc/Media2.xml
Comment thread wsdl/ver10/device/wsdl/devicemgmt.wsdl
<!--===============================-->
<xs:complexType name="ServerConfiguration">
<xs:sequence>
<xs:element name="Registrar" type="xs:anyURI" minOccurs="1" maxOccurs="unbounded"/>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we need to support either multiple ServerConfiguration entries, or replace the Registrar array with an array of Registrar structs (or SIPAccount/SIPServer) and put the Authentication config within that struct.
Possibly some of the config in CallConfiguration such as AllowIncomingCalls and AutoAnswer belongs within that struct as well?
Also make it possible to support peer-to-peer accounts that does not use a registrar.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What would be the use cases of having multiple SIP server configurations? As it is currently defined, we already have redundancy and resilience using the multiple registrar URIs within the configuration.

<xs:documentation>The user info/extension of the Address of Record (AoR) in SIP, identifying the recipient on the registrar.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Order" minOccurs="1">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggest replacing this with a "CallTrigger" string,which should be one of the values returned from a new GetCallTriggers call or similar so there is a clear way to see if a call is triggered from what physical button or I/O, e.g: "Callbutton 1", "Callbutton 2", "External IO1", "External IO2", "TouchDisplay"
For calls triggered by a touch display, the value could be e.g "TouchDisplay" could be part of the supported CallTriggers.
And let the order in the array control the order of display based call triggers. Ok to have multiple recipients that share the same CallTrigger.

<xs:documentation></xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="VideoEncoder" type="tt:VideoEncoder2Configuration" minOccurs="0" maxOccurs="1">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You typically want to offer multiple codecs and profiles of a codec.
Same for AudioEncoder and AudioDecoder.

@johado johado left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Like the idea in general. Hard to balance making it simple enough without make it to limited and hard to map to our current implementation.

<!--===============================-->
<xs:complexType name="ServerConfiguration">
<xs:sequence>
<xs:element name="Registrar" type="xs:anyURI" minOccurs="1" maxOccurs="unbounded"/>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the following configuration should be added as part of registrar configuration.

  1. Transport protocol [UDP, TCP, TLS, SIPS] ==> Mandatory field
  2. Outbound proxy server (I think is important for Multitenant SIP platforms, Service provider routing,Security and policy enforcement, NAT traversal) ==> Optional field.
  3. Is it important for the client to know the registration status of the SIP configuration? I think we can add it as event or part of the get configuration response, to notify the client on registered, failed to register state.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. We will propose something for this
  2. I don't mind adding this, what other than a URI would be needed for the proxy config?
  3. It is great idea to add this event. Do you already have a suggestion for which fields to include in the event?

</xs:complexType>
</xs:element>
<!--===============================-->
<xs:complexType name="CallRecipient">

@toa-kumalija toa-kumalija Jun 4, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DTMF can be added as part of CallRecipient configuration.
DTMF can be used to trigger actions like lock or open the door. I am not very clear of the use-case.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We weren't initially planning to add DTMFs in the specification. I know that ONVIF already supports relay outputs which seems to be what would be used to trigger the door opening. Wouldn't that specification work better than plugging it here with recipients?

<xs:documentation></xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="AudioDecoder" type="tt:AudioDecoderConfiguration" minOccurs="0" maxOccurs="1">

@toa-kumalija toa-kumalija Jun 4, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This can be multiple codecs.
The codecs can be in order of priority, which is common in SIP.
I am not sure if SIP supports decoder only codecs and encoder only codecs.

<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> <!-- first ONVIF then Vendor -->
</xs:sequence>
</xs:complexType>
<xs:complexType name="StreamingConfigurationOptions">

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In streamingConfiguration media encryption options can be added.
Like SRTP mandatory, best-effort or just plain RTP without encryption.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

True. It doesn't really match the way the configuration models in ONVIF operate, but maybe we could add a global SIP config to this model to have these types of settings?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've checked the SipStreamingConfiguration model and Srtp configuration is already part of it in the VideoEncoder configuration, the field is named SecureStreamingProtocolAlgorithm

@ocampana-videotec ocampana-videotec added this to the 27.06 milestone Jun 5, 2026
<xs:complexType name="ServerConfiguration">
<xs:sequence>
<xs:element name="Registrar" type="xs:anyURI" minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="UserId" type="xs:string">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this the sip address and the AuthenticationId use the UserName in Authentication/Credential below?
Or can the sip address be part of the Registrar uri?
(In SIP those could be two different things)
Does use of AuthorizationServer require a special AuthenticationId if it is not the UsertId?

<xs:element name="Credential" type="tsip:BasicCredential" minOccurs="0" maxOccurs="1"/>
<xs:element name="AuthorizationServer" type="tt:ReferenceToken" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>AuthorizationServer token referring to the server that provides access tokens to authorize with the renewal endpoint.</xs:documentation>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add doc on where the AuthorizationServers are defined.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants