@@ -9415,6 +9415,121 @@ provisional cluster ContentAppObserver = 1296 {
9415
9415
command ContentAppMessage(ContentAppMessageRequest): ContentAppMessageResponse = 0;
9416
9416
}
9417
9417
9418
+ /** The WebRTC transport provider cluster provides a way for stream providers (e.g. Cameras) to stream or receive their data through WebRTC. */
9419
+ provisional cluster WebRTCTransportProvider = 1363 {
9420
+ revision 1;
9421
+
9422
+ enum StreamTypeEnum : enum8 {
9423
+ kInternal = 0;
9424
+ kRecording = 1;
9425
+ kAnalysis = 2;
9426
+ kLiveView = 3;
9427
+ }
9428
+
9429
+ enum WebRTCEndReasonEnum : enum8 {
9430
+ kIceFailed = 0;
9431
+ kIceTimeout = 1;
9432
+ kUserHangup = 2;
9433
+ kUserBusy = 3;
9434
+ kReplaced = 4;
9435
+ kNoUserMedia = 5;
9436
+ kInviteTimeout = 6;
9437
+ kAnsweredElsewhere = 7;
9438
+ kOutOfResources = 8;
9439
+ kMediaTimeout = 9;
9440
+ kLowPower = 10;
9441
+ kUnknownReason = 11;
9442
+ }
9443
+
9444
+ bitmap WebRTCMetadataOptions : bitmap8 {
9445
+ kDataTLV = 0x1;
9446
+ }
9447
+
9448
+ struct ICEServerStruct {
9449
+ char_string urls[] = 1;
9450
+ optional char_string username = 2;
9451
+ optional char_string credential = 3;
9452
+ optional int16u caid = 4;
9453
+ }
9454
+
9455
+ struct WebRTCSessionStruct {
9456
+ int16u id = 1;
9457
+ node_id peerNodeID = 2;
9458
+ fabric_idx peerFabricIndex = 3;
9459
+ StreamTypeEnum streamType = 4;
9460
+ nullable int16u videoStreamID = 5;
9461
+ nullable int16u audioStreamID = 6;
9462
+ WebRTCMetadataOptions metadataOptions = 7;
9463
+ }
9464
+
9465
+ readonly attribute WebRTCSessionStruct currentSessions[] = 0;
9466
+ readonly attribute command_id generatedCommandList[] = 65528;
9467
+ readonly attribute command_id acceptedCommandList[] = 65529;
9468
+ readonly attribute event_id eventList[] = 65530;
9469
+ readonly attribute attrib_id attributeList[] = 65531;
9470
+ readonly attribute bitmap32 featureMap = 65532;
9471
+ readonly attribute int16u clusterRevision = 65533;
9472
+
9473
+ request struct SolicitOfferRequest {
9474
+ StreamTypeEnum streamType = 0;
9475
+ optional nullable int16u videoStreamID = 1;
9476
+ optional nullable int16u audioStreamID = 2;
9477
+ optional ICEServerStruct ICEServers[] = 3;
9478
+ optional char_string ICETransportPolicy = 4;
9479
+ optional WebRTCMetadataOptions metadataOptions = 5;
9480
+ }
9481
+
9482
+ response struct SolicitOfferResponse = 2 {
9483
+ int16u webRTCSessionID = 0;
9484
+ boolean deferredOffer = 1;
9485
+ optional nullable int16u videoStreamID = 2;
9486
+ optional nullable int16u audioStreamID = 3;
9487
+ }
9488
+
9489
+ request struct ProvideOfferRequest {
9490
+ nullable int16u webRTCSessionID = 0;
9491
+ char_string sdp = 1;
9492
+ StreamTypeEnum streamType = 2;
9493
+ optional nullable int16u videoStreamID = 3;
9494
+ optional nullable int16u audioStreamID = 4;
9495
+ optional ICEServerStruct ICEServers[] = 5;
9496
+ optional char_string ICETransportPolicy = 6;
9497
+ optional WebRTCMetadataOptions metadataOptions = 7;
9498
+ }
9499
+
9500
+ response struct ProvideOfferResponse = 4 {
9501
+ int16u webRTCSessionID = 0;
9502
+ int16u videoStreamID = 1;
9503
+ int16u audioStreamID = 2;
9504
+ }
9505
+
9506
+ request struct ProvideAnswerRequest {
9507
+ int16u webRTCSessionID = 0;
9508
+ char_string sdp = 1;
9509
+ }
9510
+
9511
+ request struct ProvideICECandidateRequest {
9512
+ int16u webRTCSessionID = 0;
9513
+ char_string ICECandidate = 1;
9514
+ }
9515
+
9516
+ request struct EndSessionRequest {
9517
+ int16u webRTCSessionID = 0;
9518
+ WebRTCEndReasonEnum reason = 1;
9519
+ }
9520
+
9521
+ /** 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. */
9522
+ command SolicitOffer(SolicitOfferRequest): SolicitOfferResponse = 1;
9523
+ /** This command allows an SDP Offer to be set and start a new session. */
9524
+ command ProvideOffer(ProvideOfferRequest): ProvideOfferResponse = 3;
9525
+ /** This command SHALL be initiated from a Node in response to an Offer that was previously received from a remote peer. */
9526
+ command ProvideAnswer(ProvideAnswerRequest): DefaultSuccess = 5;
9527
+ /** 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. */
9528
+ command ProvideICECandidate(ProvideICECandidateRequest): DefaultSuccess = 6;
9529
+ /** This command instructs the stream provider to end the WebRTC session. */
9530
+ command EndSession(EndSessionRequest): DefaultSuccess = 7;
9531
+ }
9532
+
9418
9533
/** This cluster provides facilities to configure and play Chime sounds, such as those used in a doorbell. */
9419
9534
provisional cluster Chime = 1366 {
9420
9535
revision 1;
0 commit comments