@@ -9376,6 +9376,121 @@ provisional cluster ContentAppObserver = 1296 {
9376
9376
command ContentAppMessage(ContentAppMessageRequest): ContentAppMessageResponse = 0;
9377
9377
}
9378
9378
9379
+ /** The WebRTC transport provider cluster provides a way for stream providers (e.g. Cameras) to stream or receive their data through WebRTC. */
9380
+ provisional cluster WebRTCTransportProvider = 1363 {
9381
+ revision 1;
9382
+
9383
+ enum StreamTypeEnum : enum8 {
9384
+ kInternal = 0;
9385
+ kRecording = 1;
9386
+ kAnalysis = 2;
9387
+ kLiveView = 3;
9388
+ }
9389
+
9390
+ enum WebRTCEndReasonEnum : enum8 {
9391
+ kICEFAILED = 1;
9392
+ kICETIMEOUT = 2;
9393
+ kUSERHANGUP = 3;
9394
+ kUSERBUSY = 4;
9395
+ kREPLACED = 5;
9396
+ kNOUSERMEDIA = 6;
9397
+ kINVITETIMEOUT = 7;
9398
+ kANSWEREDELSEWHERE = 8;
9399
+ kOUTOFRESOURCES = 9;
9400
+ kMEDIATIMEOUT = 10;
9401
+ kLOWPOWER = 11;
9402
+ kUNKNOWNERROR = 12;
9403
+ }
9404
+
9405
+ bitmap WebRTCMetadataOptions : bitmap8 {
9406
+ kDataTLV = 0x1;
9407
+ }
9408
+
9409
+ struct ICEServerStruct {
9410
+ char_string urls[] = 1;
9411
+ optional char_string username = 2;
9412
+ optional char_string credential = 3;
9413
+ optional int16u caid = 4;
9414
+ }
9415
+
9416
+ struct WebRTCSessionStruct {
9417
+ int16u id = 1;
9418
+ node_id peerNodeId = 2;
9419
+ fabric_idx peerFabricIndex = 3;
9420
+ StreamTypeEnum streamType = 4;
9421
+ nullable int16u videoStreamID = 5;
9422
+ nullable int16u audioStreamID = 6;
9423
+ WebRTCMetadataOptions metadataOptions = 7;
9424
+ }
9425
+
9426
+ readonly attribute WebRTCSessionStruct currentSessions[] = 0;
9427
+ readonly attribute command_id generatedCommandList[] = 65528;
9428
+ readonly attribute command_id acceptedCommandList[] = 65529;
9429
+ readonly attribute event_id eventList[] = 65530;
9430
+ readonly attribute attrib_id attributeList[] = 65531;
9431
+ readonly attribute bitmap32 featureMap = 65532;
9432
+ readonly attribute int16u clusterRevision = 65533;
9433
+
9434
+ request struct WebRTCSolicitOfferRequest {
9435
+ StreamTypeEnum streamType = 0;
9436
+ optional nullable int16u videoStreamID = 1;
9437
+ optional nullable int16u audioStreamID = 2;
9438
+ optional ICEServerStruct ICEServers[] = 3;
9439
+ optional char_string ICETransportPolicy = 4;
9440
+ optional WebRTCMetadataOptions metadataOptions = 5;
9441
+ }
9442
+
9443
+ response struct WebRTCSolicitOfferResponse = 2 {
9444
+ int16u webRTCSessionID = 0;
9445
+ boolean deferredOffer = 1;
9446
+ optional nullable int16u videoStreamID = 2;
9447
+ optional nullable int16u audioStreamID = 3;
9448
+ }
9449
+
9450
+ request struct WebRTCProvideOfferRequest {
9451
+ nullable int16u webRTCSessionID = 0;
9452
+ char_string sdp = 1;
9453
+ StreamTypeEnum streamType = 2;
9454
+ optional nullable int16u videoStreamID = 3;
9455
+ optional nullable int16u audioStreamID = 4;
9456
+ optional ICEServerStruct ICEServers[] = 5;
9457
+ optional char_string ICETransportPolicy = 6;
9458
+ optional WebRTCMetadataOptions metadataOptions = 7;
9459
+ }
9460
+
9461
+ response struct WebRTCProvideOfferResponse = 4 {
9462
+ int16u webRTCSessionID = 0;
9463
+ int16u videoStreamID = 1;
9464
+ int16u audioStreamID = 2;
9465
+ }
9466
+
9467
+ request struct WebRTCProvideAnswerRequest {
9468
+ int16u webRTCSessionID = 0;
9469
+ char_string sdp = 1;
9470
+ }
9471
+
9472
+ request struct WebRTCProvideICECandidateRequest {
9473
+ int16u webRTCSessionID = 0;
9474
+ char_string ICECandidate = 1;
9475
+ }
9476
+
9477
+ request struct WebRTCEndSessionRequest {
9478
+ int16u webRTCSessionID = 0;
9479
+ WebRTCEndReasonEnum reason = 1;
9480
+ }
9481
+
9482
+ /** Requests that the Provider initiates a new session with the Offer / Answer flow in a way that allows for options to be passed and work with devices needing the standby flow. */
9483
+ command WebRTCSolicitOffer(WebRTCSolicitOfferRequest): WebRTCSolicitOfferResponse = 1;
9484
+ /** This command allows an SDP Offer to be set and start a new session. */
9485
+ command WebRTCProvideOffer(WebRTCProvideOfferRequest): WebRTCProvideOfferResponse = 3;
9486
+ /** This command will be initiated from a local Node as a response to an offer that was previously provided by the remote peer. */
9487
+ command WebRTCProvideAnswer(WebRTCProvideAnswerRequest): DefaultSuccess = 5;
9488
+ /** This command allows for https://www.rfc-editor.org/rfc/rfc8839#section-4.2.1.2 nominated after the initial Offer / Answer exchange to be added to a session during the gathering phase. */
9489
+ command WebRTCProvideICECandidate(WebRTCProvideICECandidateRequest): DefaultSuccess = 6;
9490
+ /** This command instructs the stream provider to end the WebRTC session. */
9491
+ command WebRTCEndSession(WebRTCEndSessionRequest): DefaultSuccess = 7;
9492
+ }
9493
+
9379
9494
/** Provides extended device information for all the logical devices represented by a Bridged Node. */
9380
9495
provisional cluster EcosystemInformation = 1872 {
9381
9496
revision 1;
0 commit comments