Skip to content

Conversation

@ipavlidakis
Copy link
Contributor

🔗 Issue Links

Resolves https://linear.app/stream/issue/IOS-1093/implement-track-source

📝 Summary

Exposes the participant's media source. Useful for cases where integrators may want to prioritize users e.g. streaming using RTMP.

☑️ Contributor Checklist

  • I have signed the Stream CLA (required)
  • This change follows zero ⚠️ policy (required)
  • This change should receive manual QA
  • Changelog is updated with client-facing changes
  • New code is covered by unit tests
  • Comparison screenshots added for visual changes
  • Affected documentation updated (tutorial, CMS)
@ipavlidakis ipavlidakis self-assigned this Sep 4, 2025
@ipavlidakis ipavlidakis requested a review from a team as a code owner September 4, 2025 12:24
@ipavlidakis ipavlidakis added the enhancement New feature or request label Sep 4, 2025
@github-actions
Copy link

github-actions bot commented Sep 4, 2025

Public Interface

+ public enum ParticipantSource: CustomStringConvertible, Hashable, Sendable  +  + case webRTCUnspecified + case rtmp + case whip + case sip + case rtsp + case srt + case unrecognized(Int) +  +  + public var description: String public struct CallParticipant: Identifiable, Sendable, Hashable - public var userId: String + public var source: ParticipantSource - 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?,pausedTracks: Set<TrackType>) +  -  + 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>,source: ParticipantSource = .webRTCUnspecified) -  +  - 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 withPausedTrack(_ trackType: TrackType)-> CallParticipant + public func withUpdated(pin: PinInfo?)-> CallParticipant - public func withUnpausedTrack(_ trackType: TrackType)-> CallParticipant + public func withPausedTrack(_ trackType: TrackType)-> CallParticipant + public func withUnpausedTrack(_ trackType: TrackType)-> CallParticipant
@Stream-SDK-Bot
Copy link
Collaborator

Stream-SDK-Bot commented Sep 4, 2025

SDK Size

title develop branch diff status
StreamVideo 8.51 MB 8.53 MB +17 KB 🟢
StreamVideoSwiftUI 2.36 MB 2.36 MB 0 KB 🟢
StreamVideoUIKit 2.48 MB 2.48 MB 0 KB 🟢
StreamWebRTC 9.85 MB 9.85 MB 0 KB 🟢
@ipavlidakis ipavlidakis merged commit 8fdb6a2 into develop Sep 4, 2025
12 checks passed
@ipavlidakis ipavlidakis deleted the enhancement/track-source-type-implementation branch September 4, 2025 14:10
@Stream-SDK-Bot Stream-SDK-Bot mentioned this pull request Sep 8, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

4 participants