-
Notifications
You must be signed in to change notification settings - Fork 28
[Enhancement]Incoming video pause #888
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Conversation
Public Interface+ public struct TrackType: RawRepresentable, Codable, Hashable, ExpressibleByStringLiteral, Sendable
+
+ public let rawValue: String
+
+
+ public init(rawValue: String)
+ public init(stringLiteral value: String)
+ extension TrackType
+
+ public static let audio: Self
+ public static let video: Self
+ public static let screenshare: Self
+ public enum ClientCapability: Hashable, Sendable, CaseIterable
+
+ case subscriberVideoPause
public struct CallParticipant: Identifiable, Sendable, Hashable
- public var userId: String
+ public var pausedTracks: Set<TrackType>
- public var name: String
+ public var userId: String
- public var profileImageURL: URL?
+ public var name: String
- public var isPinned: Bool
+ public var profileImageURL: URL?
- public var isPinnedRemotely: Bool
+ public var isPinned: Bool
- public var shouldDisplayTrack: Bool
+ public var isPinnedRemotely: Bool
-
+ public var shouldDisplayTrack: Bool
-
+
- public init(id: String,userId: String,roles: [String],name: String,profileImageURL: URL?,trackLookupPrefix: String?,hasVideo: Bool,hasAudio: Bool,isScreenSharing: Bool,showTrack: Bool,track: RTCVideoTrack? = nil,trackSize: CGSize = CGSize(width: 1024, height: 720),screenshareTrack: RTCVideoTrack? = nil,isSpeaking: Bool = false,isDominantSpeaker: Bool,sessionId: String,connectionQuality: ConnectionQuality,joinedAt: Date,audioLevel: Float,audioLevels: [Float],pin: PinInfo?)
+
-
+ public init(id: String,userId: String,roles: [String],name: String,profileImageURL: URL?,trackLookupPrefix: String?,hasVideo: Bool,hasAudio: Bool,isScreenSharing: Bool,showTrack: Bool,track: RTCVideoTrack? = nil,trackSize: CGSize = CGSize(width: 1024, height: 720),screenshareTrack: RTCVideoTrack? = nil,isSpeaking: Bool = false,isDominantSpeaker: Bool,sessionId: String,connectionQuality: ConnectionQuality,joinedAt: Date,audioLevel: Float,audioLevels: [Float],pin: PinInfo?,pausedTracks: Set<TrackType>)
-
+
- public static func ==(lhs: CallParticipant,rhs: CallParticipant)-> Bool
+
- public func withUpdated(trackSize: CGSize)-> CallParticipant
+ public static func ==(lhs: CallParticipant,rhs: CallParticipant)-> Bool
- public func withUpdated(track: RTCVideoTrack?)-> CallParticipant
+ public func withUpdated(trackSize: CGSize)-> CallParticipant
- public func withUpdated(screensharingTrack: RTCVideoTrack?)-> CallParticipant
+ public func withUpdated(track: RTCVideoTrack?)-> CallParticipant
- public func withUpdated(audio: Bool)-> CallParticipant
+ public func withUpdated(screensharingTrack: RTCVideoTrack?)-> CallParticipant
- public func withUpdated(video: Bool)-> CallParticipant
+ public func withUpdated(audio: Bool)-> CallParticipant
- public func withUpdated(screensharing: Bool)-> CallParticipant
+ public func withUpdated(video: Bool)-> CallParticipant
- public func withUpdated(showTrack: Bool)-> CallParticipant
+ public func withUpdated(screensharing: Bool)-> CallParticipant
- public func withUpdated(trackLookupPrefix: String)-> CallParticipant
+ public func withUpdated(showTrack: Bool)-> CallParticipant
- public func withUpdated(isSpeaking: Bool,audioLevel: Float)-> CallParticipant
+ public func withUpdated(trackLookupPrefix: String)-> CallParticipant
- public func withUpdated(dominantSpeaker: Bool)-> CallParticipant
+ public func withUpdated(isSpeaking: Bool,audioLevel: Float)-> CallParticipant
- public func withUpdated(connectionQuality: ConnectionQuality)-> CallParticipant
+ public func withUpdated(dominantSpeaker: Bool)-> CallParticipant
- public func withUpdated(pin: PinInfo?)-> CallParticipant
+ public func withUpdated(connectionQuality: ConnectionQuality)-> CallParticipant
+ public func withUpdated(pin: PinInfo?)-> CallParticipant
+ public func withPausedTrack(_ trackType: TrackType)-> CallParticipant
+ public func withUnpausedTrack(_ trackType: TrackType)-> CallParticipant
public class Call: @unchecked Sendable, WSEventsSubscriber
+ public func updateClientCapabilities(_ clientCapabilities: Set<ClientCapability>)async |
Generated by 🚫 Danger |
SDK Size
|
58c8bc0
to
1cc43aa
Compare
Public Interface+ public enum ClientCapability: Hashable, Sendable, CaseIterable
+
+ case subscriberVideoPause
+ public struct TrackType: RawRepresentable, Codable, Hashable, ExpressibleByStringLiteral, Sendable
+
+ public let rawValue: String
+
+
+ public init(rawValue: String)
+ public init(stringLiteral value: String)
+ extension TrackType
+
+ public static let audio: Self
+ public static let video: Self
+ public static let screenshare: Self
public class Call: @unchecked Sendable, WSEventsSubscriber
+ public func updateClientCapabilities(_ clientCapabilities: Set<ClientCapability>)async
public struct CallParticipant: Identifiable, Sendable, Hashable
- public var userId: String
+ public var pausedTracks: Set<TrackType>
- public var name: String
+ public var userId: String
- public var profileImageURL: URL?
+ public var name: String
- public var isPinned: Bool
+ public var profileImageURL: URL?
- public var isPinnedRemotely: Bool
+ public var isPinned: Bool
- public var shouldDisplayTrack: Bool
+ public var isPinnedRemotely: Bool
-
+ public var shouldDisplayTrack: Bool
-
+
- public init(id: String,userId: String,roles: [String],name: String,profileImageURL: URL?,trackLookupPrefix: String?,hasVideo: Bool,hasAudio: Bool,isScreenSharing: Bool,showTrack: Bool,track: RTCVideoTrack? = nil,trackSize: CGSize = CGSize(width: 1024, height: 720),screenshareTrack: RTCVideoTrack? = nil,isSpeaking: Bool = false,isDominantSpeaker: Bool,sessionId: String,connectionQuality: ConnectionQuality,joinedAt: Date,audioLevel: Float,audioLevels: [Float],pin: PinInfo?)
+
-
+ public init(id: String,userId: String,roles: [String],name: String,profileImageURL: URL?,trackLookupPrefix: String?,hasVideo: Bool,hasAudio: Bool,isScreenSharing: Bool,showTrack: Bool,track: RTCVideoTrack? = nil,trackSize: CGSize = CGSize(width: 1024, height: 720),screenshareTrack: RTCVideoTrack? = nil,isSpeaking: Bool = false,isDominantSpeaker: Bool,sessionId: String,connectionQuality: ConnectionQuality,joinedAt: Date,audioLevel: Float,audioLevels: [Float],pin: PinInfo?,pausedTracks: Set<TrackType>)
-
+
- public static func ==(lhs: CallParticipant,rhs: CallParticipant)-> Bool
+
- public func withUpdated(trackSize: CGSize)-> CallParticipant
+ public static func ==(lhs: CallParticipant,rhs: CallParticipant)-> Bool
- public func withUpdated(track: RTCVideoTrack?)-> CallParticipant
+ public func withUpdated(trackSize: CGSize)-> CallParticipant
- public func withUpdated(screensharingTrack: RTCVideoTrack?)-> CallParticipant
+ public func withUpdated(track: RTCVideoTrack?)-> CallParticipant
- public func withUpdated(audio: Bool)-> CallParticipant
+ public func withUpdated(screensharingTrack: RTCVideoTrack?)-> CallParticipant
- public func withUpdated(video: Bool)-> CallParticipant
+ public func withUpdated(audio: Bool)-> CallParticipant
- public func withUpdated(screensharing: Bool)-> CallParticipant
+ public func withUpdated(video: Bool)-> CallParticipant
- public func withUpdated(showTrack: Bool)-> CallParticipant
+ public func withUpdated(screensharing: Bool)-> CallParticipant
- public func withUpdated(trackLookupPrefix: String)-> CallParticipant
+ public func withUpdated(showTrack: Bool)-> CallParticipant
- public func withUpdated(isSpeaking: Bool,audioLevel: Float)-> CallParticipant
+ public func withUpdated(trackLookupPrefix: String)-> CallParticipant
- public func withUpdated(dominantSpeaker: Bool)-> CallParticipant
+ public func withUpdated(isSpeaking: Bool,audioLevel: Float)-> CallParticipant
- public func withUpdated(connectionQuality: ConnectionQuality)-> CallParticipant
+ public func withUpdated(dominantSpeaker: Bool)-> CallParticipant
- public func withUpdated(pin: PinInfo?)-> CallParticipant
+ public func withUpdated(connectionQuality: ConnectionQuality)-> CallParticipant
+ public func withUpdated(pin: PinInfo?)-> CallParticipant
+ public func withPausedTrack(_ trackType: TrackType)-> CallParticipant
+ public func withUnpausedTrack(_ trackType: TrackType)-> CallParticipant |
Public Interface+ public struct TrackType: RawRepresentable, Codable, Hashable, ExpressibleByStringLiteral, Sendable
+
+ public let rawValue: String
+
+
+ public init(rawValue: String)
+ public init(stringLiteral value: String)
+ extension TrackType
+
+ public static let audio: Self
+ public static let video: Self
+ public static let screenshare: Self
+ public enum ClientCapability: Hashable, Sendable, CaseIterable
+
+ case subscriberVideoPause
public struct CallParticipant: Identifiable, Sendable, Hashable
- public var userId: String
+ public var pausedTracks: Set<TrackType>
- public var name: String
+ public var userId: String
- public var profileImageURL: URL?
+ public var name: String
- public var isPinned: Bool
+ public var profileImageURL: URL?
- public var isPinnedRemotely: Bool
+ public var isPinned: Bool
- public var shouldDisplayTrack: Bool
+ public var isPinnedRemotely: Bool
-
+ public var shouldDisplayTrack: Bool
-
+
- public init(id: String,userId: String,roles: [String],name: String,profileImageURL: URL?,trackLookupPrefix: String?,hasVideo: Bool,hasAudio: Bool,isScreenSharing: Bool,showTrack: Bool,track: RTCVideoTrack? = nil,trackSize: CGSize = CGSize(width: 1024, height: 720),screenshareTrack: RTCVideoTrack? = nil,isSpeaking: Bool = false,isDominantSpeaker: Bool,sessionId: String,connectionQuality: ConnectionQuality,joinedAt: Date,audioLevel: Float,audioLevels: [Float],pin: PinInfo?)
+
-
+ public init(id: String,userId: String,roles: [String],name: String,profileImageURL: URL?,trackLookupPrefix: String?,hasVideo: Bool,hasAudio: Bool,isScreenSharing: Bool,showTrack: Bool,track: RTCVideoTrack? = nil,trackSize: CGSize = CGSize(width: 1024, height: 720),screenshareTrack: RTCVideoTrack? = nil,isSpeaking: Bool = false,isDominantSpeaker: Bool,sessionId: String,connectionQuality: ConnectionQuality,joinedAt: Date,audioLevel: Float,audioLevels: [Float],pin: PinInfo?,pausedTracks: Set<TrackType>)
-
+
- public static func ==(lhs: CallParticipant,rhs: CallParticipant)-> Bool
+
- public func withUpdated(trackSize: CGSize)-> CallParticipant
+ public static func ==(lhs: CallParticipant,rhs: CallParticipant)-> Bool
- public func withUpdated(track: RTCVideoTrack?)-> CallParticipant
+ public func withUpdated(trackSize: CGSize)-> CallParticipant
- public func withUpdated(screensharingTrack: RTCVideoTrack?)-> CallParticipant
+ public func withUpdated(track: RTCVideoTrack?)-> CallParticipant
- public func withUpdated(audio: Bool)-> CallParticipant
+ public func withUpdated(screensharingTrack: RTCVideoTrack?)-> CallParticipant
- public func withUpdated(video: Bool)-> CallParticipant
+ public func withUpdated(audio: Bool)-> CallParticipant
- public func withUpdated(screensharing: Bool)-> CallParticipant
+ public func withUpdated(video: Bool)-> CallParticipant
- public func withUpdated(showTrack: Bool)-> CallParticipant
+ public func withUpdated(screensharing: Bool)-> CallParticipant
- public func withUpdated(trackLookupPrefix: String)-> CallParticipant
+ public func withUpdated(showTrack: Bool)-> CallParticipant
- public func withUpdated(isSpeaking: Bool,audioLevel: Float)-> CallParticipant
+ public func withUpdated(trackLookupPrefix: String)-> CallParticipant
- public func withUpdated(dominantSpeaker: Bool)-> CallParticipant
+ public func withUpdated(isSpeaking: Bool,audioLevel: Float)-> CallParticipant
- public func withUpdated(connectionQuality: ConnectionQuality)-> CallParticipant
+ public func withUpdated(dominantSpeaker: Bool)-> CallParticipant
- public func withUpdated(pin: PinInfo?)-> CallParticipant
+ public func withUpdated(connectionQuality: ConnectionQuality)-> CallParticipant
+ public func withUpdated(pin: PinInfo?)-> CallParticipant
+ public func withPausedTrack(_ trackType: TrackType)-> CallParticipant
+ public func withUnpausedTrack(_ trackType: TrackType)-> CallParticipant
public class Call: @unchecked Sendable, WSEventsSubscriber
+ public func updateClientCapabilities(_ clientCapabilities: Set<ClientCapability>)async |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should have this on by default, without it, it breaks the experience on low-end networks. We can offer an opt out if needed.
There is opt-out as integrators can simply pass an empty array for the clientCapabilities. Let me align that with React too. |
fee2556
to
d65a70a
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good codewise ✅ Let's test it a bit and also check the failing tests.
Public Interface+ extension TrackType
+
+ public static let audio: Self
+ public static let video: Self
+ public static let screenshare: Self
+ public struct TrackType: RawRepresentable, Codable, Hashable, ExpressibleByStringLiteral, Sendable
+
+ public let rawValue: String
+
+
+ public init(rawValue: String)
+ public init(stringLiteral value: String)
+ public enum ClientCapability: Hashable, Sendable, CaseIterable
+
+ case subscriberVideoPause
public struct CallParticipant: Identifiable, Sendable, Hashable
- public var userId: String
+ public var pausedTracks: Set<TrackType>
- public var name: String
+ public var userId: String
- public var profileImageURL: URL?
+ public var name: String
- public var isPinned: Bool
+ public var profileImageURL: URL?
- public var isPinnedRemotely: Bool
+ public var isPinned: Bool
- public var shouldDisplayTrack: Bool
+ public var isPinnedRemotely: Bool
-
+ public var shouldDisplayTrack: Bool
-
+
- public init(id: String,userId: String,roles: [String],name: String,profileImageURL: URL?,trackLookupPrefix: String?,hasVideo: Bool,hasAudio: Bool,isScreenSharing: Bool,showTrack: Bool,track: RTCVideoTrack? = nil,trackSize: CGSize = CGSize(width: 1024, height: 720),screenshareTrack: RTCVideoTrack? = nil,isSpeaking: Bool = false,isDominantSpeaker: Bool,sessionId: String,connectionQuality: ConnectionQuality,joinedAt: Date,audioLevel: Float,audioLevels: [Float],pin: PinInfo?)
+
-
+ public init(id: String,userId: String,roles: [String],name: String,profileImageURL: URL?,trackLookupPrefix: String?,hasVideo: Bool,hasAudio: Bool,isScreenSharing: Bool,showTrack: Bool,track: RTCVideoTrack? = nil,trackSize: CGSize = CGSize(width: 1024, height: 720),screenshareTrack: RTCVideoTrack? = nil,isSpeaking: Bool = false,isDominantSpeaker: Bool,sessionId: String,connectionQuality: ConnectionQuality,joinedAt: Date,audioLevel: Float,audioLevels: [Float],pin: PinInfo?,pausedTracks: Set<TrackType>)
-
+
- public static func ==(lhs: CallParticipant,rhs: CallParticipant)-> Bool
+
- public func withUpdated(trackSize: CGSize)-> CallParticipant
+ public static func ==(lhs: CallParticipant,rhs: CallParticipant)-> Bool
- public func withUpdated(track: RTCVideoTrack?)-> CallParticipant
+ public func withUpdated(trackSize: CGSize)-> CallParticipant
- public func withUpdated(screensharingTrack: RTCVideoTrack?)-> CallParticipant
+ public func withUpdated(track: RTCVideoTrack?)-> CallParticipant
- public func withUpdated(audio: Bool)-> CallParticipant
+ public func withUpdated(screensharingTrack: RTCVideoTrack?)-> CallParticipant
- public func withUpdated(video: Bool)-> CallParticipant
+ public func withUpdated(audio: Bool)-> CallParticipant
- public func withUpdated(screensharing: Bool)-> CallParticipant
+ public func withUpdated(video: Bool)-> CallParticipant
- public func withUpdated(showTrack: Bool)-> CallParticipant
+ public func withUpdated(screensharing: Bool)-> CallParticipant
- public func withUpdated(trackLookupPrefix: String)-> CallParticipant
+ public func withUpdated(showTrack: Bool)-> CallParticipant
- public func withUpdated(isSpeaking: Bool,audioLevel: Float)-> CallParticipant
+ public func withUpdated(trackLookupPrefix: String)-> CallParticipant
- public func withUpdated(dominantSpeaker: Bool)-> CallParticipant
+ public func withUpdated(isSpeaking: Bool,audioLevel: Float)-> CallParticipant
- public func withUpdated(connectionQuality: ConnectionQuality)-> CallParticipant
+ public func withUpdated(dominantSpeaker: Bool)-> CallParticipant
- public func withUpdated(pin: PinInfo?)-> CallParticipant
+ public func withUpdated(connectionQuality: ConnectionQuality)-> CallParticipant
+ public func withUpdated(pin: PinInfo?)-> CallParticipant
+ public func withPausedTrack(_ trackType: TrackType)-> CallParticipant
+ public func withUnpausedTrack(_ trackType: TrackType)-> CallParticipant
public class Call: @unchecked Sendable, WSEventsSubscriber
+ public func updateClientCapabilities(_ clientCapabilities: Set<ClientCapability>)async |
d65a70a
to
6d66e1f
Compare
Public Interface+ public struct TrackType: RawRepresentable, Codable, Hashable, ExpressibleByStringLiteral, Sendable
+
+ public let rawValue: String
+
+
+ public init(rawValue: String)
+ public init(stringLiteral value: String)
+ public enum ClientCapability: Hashable, Sendable, CaseIterable
+
+ case subscriberVideoPause
+ extension TrackType
+
+ public static let audio: Self
+ public static let video: Self
+ public static let screenshare: Self
public struct CallParticipant: Identifiable, Sendable, Hashable
- public var userId: String
+ public var pausedTracks: Set<TrackType>
- public var name: String
+ public var userId: String
- public var profileImageURL: URL?
+ public var name: String
- public var isPinned: Bool
+ public var profileImageURL: URL?
- public var isPinnedRemotely: Bool
+ public var isPinned: Bool
- public var shouldDisplayTrack: Bool
+ public var isPinnedRemotely: Bool
-
+ public var shouldDisplayTrack: Bool
-
+
- public init(id: String,userId: String,roles: [String],name: String,profileImageURL: URL?,trackLookupPrefix: String?,hasVideo: Bool,hasAudio: Bool,isScreenSharing: Bool,showTrack: Bool,track: RTCVideoTrack? = nil,trackSize: CGSize = CGSize(width: 1024, height: 720),screenshareTrack: RTCVideoTrack? = nil,isSpeaking: Bool = false,isDominantSpeaker: Bool,sessionId: String,connectionQuality: ConnectionQuality,joinedAt: Date,audioLevel: Float,audioLevels: [Float],pin: PinInfo?)
+
-
+ public init(id: String,userId: String,roles: [String],name: String,profileImageURL: URL?,trackLookupPrefix: String?,hasVideo: Bool,hasAudio: Bool,isScreenSharing: Bool,showTrack: Bool,track: RTCVideoTrack? = nil,trackSize: CGSize = CGSize(width: 1024, height: 720),screenshareTrack: RTCVideoTrack? = nil,isSpeaking: Bool = false,isDominantSpeaker: Bool,sessionId: String,connectionQuality: ConnectionQuality,joinedAt: Date,audioLevel: Float,audioLevels: [Float],pin: PinInfo?,pausedTracks: Set<TrackType>)
-
+
- public static func ==(lhs: CallParticipant,rhs: CallParticipant)-> Bool
+
- public func withUpdated(trackSize: CGSize)-> CallParticipant
+ public static func ==(lhs: CallParticipant,rhs: CallParticipant)-> Bool
- public func withUpdated(track: RTCVideoTrack?)-> CallParticipant
+ public func withUpdated(trackSize: CGSize)-> CallParticipant
- public func withUpdated(screensharingTrack: RTCVideoTrack?)-> CallParticipant
+ public func withUpdated(track: RTCVideoTrack?)-> CallParticipant
- public func withUpdated(audio: Bool)-> CallParticipant
+ public func withUpdated(screensharingTrack: RTCVideoTrack?)-> CallParticipant
- public func withUpdated(video: Bool)-> CallParticipant
+ public func withUpdated(audio: Bool)-> CallParticipant
- public func withUpdated(screensharing: Bool)-> CallParticipant
+ public func withUpdated(video: Bool)-> CallParticipant
- public func withUpdated(showTrack: Bool)-> CallParticipant
+ public func withUpdated(screensharing: Bool)-> CallParticipant
- public func withUpdated(trackLookupPrefix: String)-> CallParticipant
+ public func withUpdated(showTrack: Bool)-> CallParticipant
- public func withUpdated(isSpeaking: Bool,audioLevel: Float)-> CallParticipant
+ public func withUpdated(trackLookupPrefix: String)-> CallParticipant
- public func withUpdated(dominantSpeaker: Bool)-> CallParticipant
+ public func withUpdated(isSpeaking: Bool,audioLevel: Float)-> CallParticipant
- public func withUpdated(connectionQuality: ConnectionQuality)-> CallParticipant
+ public func withUpdated(dominantSpeaker: Bool)-> CallParticipant
- public func withUpdated(pin: PinInfo?)-> CallParticipant
+ public func withUpdated(connectionQuality: ConnectionQuality)-> CallParticipant
+ public func withUpdated(pin: PinInfo?)-> CallParticipant
+ public func withPausedTrack(_ trackType: TrackType)-> CallParticipant
+ public func withUnpausedTrack(_ trackType: TrackType)-> CallParticipant
public class Call: @unchecked Sendable, WSEventsSubscriber
+ public func updateClientCapabilities(_ clientCapabilities: Set<ClientCapability>)async |
Public Interface+ extension TrackType
+
+ public static let audio: Self
+ public static let video: Self
+ public static let screenshare: Self
+ public struct TrackType: RawRepresentable, Codable, Hashable, ExpressibleByStringLiteral, Sendable
+
+ public let rawValue: String
+
+
+ public init(rawValue: String)
+ public init(stringLiteral value: String)
+ public enum ClientCapability: Hashable, Sendable, CaseIterable
+
+ case subscriberVideoPause
public struct CallParticipant: Identifiable, Sendable, Hashable
- public var userId: String
+ public var pausedTracks: Set<TrackType>
- public var name: String
+ public var userId: String
- public var profileImageURL: URL?
+ public var name: String
- public var isPinned: Bool
+ public var profileImageURL: URL?
- public var isPinnedRemotely: Bool
+ public var isPinned: Bool
- public var shouldDisplayTrack: Bool
+ public var isPinnedRemotely: Bool
-
+ public var shouldDisplayTrack: Bool
-
+
- public init(id: String,userId: String,roles: [String],name: String,profileImageURL: URL?,trackLookupPrefix: String?,hasVideo: Bool,hasAudio: Bool,isScreenSharing: Bool,showTrack: Bool,track: RTCVideoTrack? = nil,trackSize: CGSize = CGSize(width: 1024, height: 720),screenshareTrack: RTCVideoTrack? = nil,isSpeaking: Bool = false,isDominantSpeaker: Bool,sessionId: String,connectionQuality: ConnectionQuality,joinedAt: Date,audioLevel: Float,audioLevels: [Float],pin: PinInfo?)
+
-
+ public init(id: String,userId: String,roles: [String],name: String,profileImageURL: URL?,trackLookupPrefix: String?,hasVideo: Bool,hasAudio: Bool,isScreenSharing: Bool,showTrack: Bool,track: RTCVideoTrack? = nil,trackSize: CGSize = CGSize(width: 1024, height: 720),screenshareTrack: RTCVideoTrack? = nil,isSpeaking: Bool = false,isDominantSpeaker: Bool,sessionId: String,connectionQuality: ConnectionQuality,joinedAt: Date,audioLevel: Float,audioLevels: [Float],pin: PinInfo?,pausedTracks: Set<TrackType>)
-
+
- public static func ==(lhs: CallParticipant,rhs: CallParticipant)-> Bool
+
- public func withUpdated(trackSize: CGSize)-> CallParticipant
+ public static func ==(lhs: CallParticipant,rhs: CallParticipant)-> Bool
- public func withUpdated(track: RTCVideoTrack?)-> CallParticipant
+ public func withUpdated(trackSize: CGSize)-> CallParticipant
- public func withUpdated(screensharingTrack: RTCVideoTrack?)-> CallParticipant
+ public func withUpdated(track: RTCVideoTrack?)-> CallParticipant
- public func withUpdated(audio: Bool)-> CallParticipant
+ public func withUpdated(screensharingTrack: RTCVideoTrack?)-> CallParticipant
- public func withUpdated(video: Bool)-> CallParticipant
+ public func withUpdated(audio: Bool)-> CallParticipant
- public func withUpdated(screensharing: Bool)-> CallParticipant
+ public func withUpdated(video: Bool)-> CallParticipant
- public func withUpdated(showTrack: Bool)-> CallParticipant
+ public func withUpdated(screensharing: Bool)-> CallParticipant
- public func withUpdated(trackLookupPrefix: String)-> CallParticipant
+ public func withUpdated(showTrack: Bool)-> CallParticipant
- public func withUpdated(isSpeaking: Bool,audioLevel: Float)-> CallParticipant
+ public func withUpdated(trackLookupPrefix: String)-> CallParticipant
- public func withUpdated(dominantSpeaker: Bool)-> CallParticipant
+ public func withUpdated(isSpeaking: Bool,audioLevel: Float)-> CallParticipant
- public func withUpdated(connectionQuality: ConnectionQuality)-> CallParticipant
+ public func withUpdated(dominantSpeaker: Bool)-> CallParticipant
- public func withUpdated(pin: PinInfo?)-> CallParticipant
+ public func withUpdated(connectionQuality: ConnectionQuality)-> CallParticipant
+ public func withUpdated(pin: PinInfo?)-> CallParticipant
+ public func withPausedTrack(_ trackType: TrackType)-> CallParticipant
+ public func withUnpausedTrack(_ trackType: TrackType)-> CallParticipant
public class Call: @unchecked Sendable, WSEventsSubscriber
+ public func updateClientCapabilities(_ clientCapabilities: Set<ClientCapability>)async |
Public Interface+ public struct TrackType: RawRepresentable, Codable, Hashable, ExpressibleByStringLiteral, Sendable
+
+ public let rawValue: String
+
+
+ public init(rawValue: String)
+ public init(stringLiteral value: String)
+ public enum ClientCapability: Hashable, Sendable, CaseIterable
+
+ case subscriberVideoPause
+ extension TrackType
+
+ public static let audio: Self
+ public static let video: Self
+ public static let screenshare: Self
public class Call: @unchecked Sendable, WSEventsSubscriber
+ public func enableClientCapabilities(_ capabilities: Set<ClientCapability>)async
+ public func disableClientCapabilities(_ capabilities: Set<ClientCapability>)async
public struct CallParticipant: Identifiable, Sendable, Hashable
- public var userId: String
+ public var pausedTracks: Set<TrackType>
- public var name: String
+ public var userId: String
- public var profileImageURL: URL?
+ public var name: String
- public var isPinned: Bool
+ public var profileImageURL: URL?
- public var isPinnedRemotely: Bool
+ public var isPinned: Bool
- public var shouldDisplayTrack: Bool
+ public var isPinnedRemotely: Bool
-
+ public var shouldDisplayTrack: Bool
-
+
- public init(id: String,userId: String,roles: [String],name: String,profileImageURL: URL?,trackLookupPrefix: String?,hasVideo: Bool,hasAudio: Bool,isScreenSharing: Bool,showTrack: Bool,track: RTCVideoTrack? = nil,trackSize: CGSize = CGSize(width: 1024, height: 720),screenshareTrack: RTCVideoTrack? = nil,isSpeaking: Bool = false,isDominantSpeaker: Bool,sessionId: String,connectionQuality: ConnectionQuality,joinedAt: Date,audioLevel: Float,audioLevels: [Float],pin: PinInfo?)
+
-
+ public init(id: String,userId: String,roles: [String],name: String,profileImageURL: URL?,trackLookupPrefix: String?,hasVideo: Bool,hasAudio: Bool,isScreenSharing: Bool,showTrack: Bool,track: RTCVideoTrack? = nil,trackSize: CGSize = CGSize(width: 1024, height: 720),screenshareTrack: RTCVideoTrack? = nil,isSpeaking: Bool = false,isDominantSpeaker: Bool,sessionId: String,connectionQuality: ConnectionQuality,joinedAt: Date,audioLevel: Float,audioLevels: [Float],pin: PinInfo?,pausedTracks: Set<TrackType>)
-
+
- public static func ==(lhs: CallParticipant,rhs: CallParticipant)-> Bool
+
- public func withUpdated(trackSize: CGSize)-> CallParticipant
+ public static func ==(lhs: CallParticipant,rhs: CallParticipant)-> Bool
- public func withUpdated(track: RTCVideoTrack?)-> CallParticipant
+ public func withUpdated(trackSize: CGSize)-> CallParticipant
- public func withUpdated(screensharingTrack: RTCVideoTrack?)-> CallParticipant
+ public func withUpdated(track: RTCVideoTrack?)-> CallParticipant
- public func withUpdated(audio: Bool)-> CallParticipant
+ public func withUpdated(screensharingTrack: RTCVideoTrack?)-> CallParticipant
- public func withUpdated(video: Bool)-> CallParticipant
+ public func withUpdated(audio: Bool)-> CallParticipant
- public func withUpdated(screensharing: Bool)-> CallParticipant
+ public func withUpdated(video: Bool)-> CallParticipant
- public func withUpdated(showTrack: Bool)-> CallParticipant
+ public func withUpdated(screensharing: Bool)-> CallParticipant
- public func withUpdated(trackLookupPrefix: String)-> CallParticipant
+ public func withUpdated(showTrack: Bool)-> CallParticipant
- public func withUpdated(isSpeaking: Bool,audioLevel: Float)-> CallParticipant
+ public func withUpdated(trackLookupPrefix: String)-> CallParticipant
- public func withUpdated(dominantSpeaker: Bool)-> CallParticipant
+ public func withUpdated(isSpeaking: Bool,audioLevel: Float)-> CallParticipant
- public func withUpdated(connectionQuality: ConnectionQuality)-> CallParticipant
+ public func withUpdated(dominantSpeaker: Bool)-> CallParticipant
- public func withUpdated(pin: PinInfo?)-> CallParticipant
+ public func withUpdated(connectionQuality: ConnectionQuality)-> CallParticipant
+ public func withUpdated(pin: PinInfo?)-> CallParticipant
+ public func withPausedTrack(_ trackType: TrackType)-> CallParticipant
+ public func withUnpausedTrack(_ trackType: TrackType)-> CallParticipant |
9e6ad49
to
4883ad4
Compare
Public Interface+ extension TrackType
+
+ public static let audio: Self
+ public static let video: Self
+ public static let screenshare: Self
+ public struct TrackType: RawRepresentable, Codable, Hashable, ExpressibleByStringLiteral, Sendable
+
+ public let rawValue: String
+
+
+ public init(rawValue: String)
+ public init(stringLiteral value: String)
+ public enum ClientCapability: Hashable, Sendable, CaseIterable
+
+ case subscriberVideoPause
public struct CallParticipant: Identifiable, Sendable, Hashable
- public var userId: String
+ public var pausedTracks: Set<TrackType>
- public var name: String
+ public var userId: String
- public var profileImageURL: URL?
+ public var name: String
- public var isPinned: Bool
+ public var profileImageURL: URL?
- public var isPinnedRemotely: Bool
+ public var isPinned: Bool
- public var shouldDisplayTrack: Bool
+ public var isPinnedRemotely: Bool
-
+ public var shouldDisplayTrack: Bool
-
+
- public init(id: String,userId: String,roles: [String],name: String,profileImageURL: URL?,trackLookupPrefix: String?,hasVideo: Bool,hasAudio: Bool,isScreenSharing: Bool,showTrack: Bool,track: RTCVideoTrack? = nil,trackSize: CGSize = CGSize(width: 1024, height: 720),screenshareTrack: RTCVideoTrack? = nil,isSpeaking: Bool = false,isDominantSpeaker: Bool,sessionId: String,connectionQuality: ConnectionQuality,joinedAt: Date,audioLevel: Float,audioLevels: [Float],pin: PinInfo?)
+
-
+ public init(id: String,userId: String,roles: [String],name: String,profileImageURL: URL?,trackLookupPrefix: String?,hasVideo: Bool,hasAudio: Bool,isScreenSharing: Bool,showTrack: Bool,track: RTCVideoTrack? = nil,trackSize: CGSize = CGSize(width: 1024, height: 720),screenshareTrack: RTCVideoTrack? = nil,isSpeaking: Bool = false,isDominantSpeaker: Bool,sessionId: String,connectionQuality: ConnectionQuality,joinedAt: Date,audioLevel: Float,audioLevels: [Float],pin: PinInfo?,pausedTracks: Set<TrackType>)
-
+
- public static func ==(lhs: CallParticipant,rhs: CallParticipant)-> Bool
+
- public func withUpdated(trackSize: CGSize)-> CallParticipant
+ public static func ==(lhs: CallParticipant,rhs: CallParticipant)-> Bool
- public func withUpdated(track: RTCVideoTrack?)-> CallParticipant
+ public func withUpdated(trackSize: CGSize)-> CallParticipant
- public func withUpdated(screensharingTrack: RTCVideoTrack?)-> CallParticipant
+ public func withUpdated(track: RTCVideoTrack?)-> CallParticipant
- public func withUpdated(audio: Bool)-> CallParticipant
+ public func withUpdated(screensharingTrack: RTCVideoTrack?)-> CallParticipant
- public func withUpdated(video: Bool)-> CallParticipant
+ public func withUpdated(audio: Bool)-> CallParticipant
- public func withUpdated(screensharing: Bool)-> CallParticipant
+ public func withUpdated(video: Bool)-> CallParticipant
- public func withUpdated(showTrack: Bool)-> CallParticipant
+ public func withUpdated(screensharing: Bool)-> CallParticipant
- public func withUpdated(trackLookupPrefix: String)-> CallParticipant
+ public func withUpdated(showTrack: Bool)-> CallParticipant
- public func withUpdated(isSpeaking: Bool,audioLevel: Float)-> CallParticipant
+ public func withUpdated(trackLookupPrefix: String)-> CallParticipant
- public func withUpdated(dominantSpeaker: Bool)-> CallParticipant
+ public func withUpdated(isSpeaking: Bool,audioLevel: Float)-> CallParticipant
- public func withUpdated(connectionQuality: ConnectionQuality)-> CallParticipant
+ public func withUpdated(dominantSpeaker: Bool)-> CallParticipant
- public func withUpdated(pin: PinInfo?)-> CallParticipant
+ public func withUpdated(connectionQuality: ConnectionQuality)-> CallParticipant
+ public func withUpdated(pin: PinInfo?)-> CallParticipant
+ public func withPausedTrack(_ trackType: TrackType)-> CallParticipant
+ public func withUnpausedTrack(_ trackType: TrackType)-> CallParticipant
public class Call: @unchecked Sendable, WSEventsSubscriber
+ public func enableClientCapabilities(_ capabilities: Set<ClientCapability>)async
+ public func disableClientCapabilities(_ capabilities: Set<ClientCapability>)async |
|
🔗 Issue Links
Resolves https://linear.app/stream/issue/IOS-994/featureinbound-video-pause
🎯 Goal
Provide a way for the SFU to instruct the client which tracks are remotely paused.
📝 Summary
Docs preview: https://github.com/GetStream/docs-content/pull/452
🧪 Manual Testing Notes
☑️ Contributor Checklist