AmazonChimeSDK/AmazonChimeSDK/audiovideo/DefaultAudioVideoFacade.swift (199 lines of code) (raw):

// // DefaultAudioVideoFacade.swift // AmazonChimeSDK // // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 // import Foundation @objcMembers public class DefaultAudioVideoFacade: NSObject, AudioVideoFacade { public let configuration: MeetingSessionConfiguration public let logger: Logger let audioVideoController: AudioVideoControllerFacade let realtimeController: RealtimeControllerFacade let deviceController: DeviceController let videoTileController: VideoTileController let activeSpeakerDetector: ActiveSpeakerDetectorFacade let contentShareController: ContentShareController let eventAnalyticsController: EventAnalyticsController public init( audioVideoController: AudioVideoControllerFacade, realtimeController: RealtimeControllerFacade, deviceController: DeviceController, videoTileController: VideoTileController, activeSpeakerDetector: ActiveSpeakerDetectorFacade, contentShareController: ContentShareController, eventAnalyticsController: EventAnalyticsController, meetingStatsCollector: MeetingStatsCollector ) { self.audioVideoController = audioVideoController self.realtimeController = realtimeController self.deviceController = deviceController self.videoTileController = videoTileController self.configuration = audioVideoController.configuration self.logger = audioVideoController.logger self.activeSpeakerDetector = activeSpeakerDetector self.contentShareController = contentShareController self.eventAnalyticsController = eventAnalyticsController } public func start(audioVideoConfiguration: AudioVideoConfiguration) throws { try audioVideoController.start(audioVideoConfiguration: audioVideoConfiguration) trace(name: "start(audioVideoConfiguration: \(audioVideoConfiguration.description))") } public func start(callKitEnabled: Bool = false) throws { try self.start(audioVideoConfiguration: AudioVideoConfiguration(callKitEnabled: callKitEnabled)) } public func start() throws { try self.start(audioVideoConfiguration: AudioVideoConfiguration()) } public func stop() { audioVideoController.stop() trace(name: "stop") } public func startLocalVideo() throws { try audioVideoController.startLocalVideo() } public func startLocalVideo(config: LocalVideoConfiguration) throws { try audioVideoController.startLocalVideo(config: config) } public func startLocalVideo(source: VideoSource) { audioVideoController.startLocalVideo(source: source) } public func startLocalVideo(source: VideoSource, config: LocalVideoConfiguration) { audioVideoController.startLocalVideo(source: source, config: config) } public func stopLocalVideo() { audioVideoController.stopLocalVideo() } public func startRemoteVideo() { audioVideoController.startRemoteVideo() } public func stopRemoteVideo() { audioVideoController.stopRemoteVideo() } private func trace(name: String) { let message = "API/DefaultAudioVideoFacade/\(name)" audioVideoController.logger.info(msg: message) } // MARK: RealtimeControllerFacade public func realtimeLocalMute() -> Bool { return realtimeController.realtimeLocalMute() } public func realtimeLocalUnmute() -> Bool { return realtimeController.realtimeLocalUnmute() } public func addRealtimeObserver(observer: RealtimeObserver) { realtimeController.addRealtimeObserver(observer: observer) } public func removeRealtimeObserver(observer: RealtimeObserver) { realtimeController.removeRealtimeObserver(observer: observer) } public func addRealtimeDataMessageObserver(topic: String, observer: DataMessageObserver) { realtimeController.addRealtimeDataMessageObserver(topic: topic, observer: observer) } public func removeRealtimeDataMessageObserverFromTopic(topic: String) { realtimeController.removeRealtimeDataMessageObserverFromTopic(topic: topic) } public func realtimeSendDataMessage(topic: String, data: Any, lifetimeMs: Int32 = 0) throws { try realtimeController.realtimeSendDataMessage(topic: topic, data: data, lifetimeMs: lifetimeMs) } public func realtimeSetVoiceFocusEnabled(enabled: Bool) -> Bool { return realtimeController.realtimeSetVoiceFocusEnabled(enabled: enabled) } public func realtimeIsVoiceFocusEnabled() -> Bool { return realtimeController.realtimeIsVoiceFocusEnabled() } public func addAudioVideoObserver(observer: AudioVideoObserver) { audioVideoController.addAudioVideoObserver(observer: observer) } public func removeAudioVideoObserver(observer: AudioVideoObserver) { audioVideoController.removeAudioVideoObserver(observer: observer) } public func addMetricsObserver(observer: MetricsObserver) { audioVideoController.addMetricsObserver(observer: observer) } public func removeMetricsObserver(observer: MetricsObserver) { audioVideoController.removeMetricsObserver(observer: observer) } public func addRealtimeTranscriptEventObserver(observer: TranscriptEventObserver) { realtimeController.addRealtimeTranscriptEventObserver?(observer: observer) } public func removeRealtimeTranscriptEventObserver(observer: TranscriptEventObserver) { realtimeController.removeRealtimeTranscriptEventObserver?(observer: observer) } public func updateVideoSourceSubscriptions(addedOrUpdated: Dictionary<RemoteVideoSource, VideoSubscriptionConfiguration>, removed: Array<RemoteVideoSource>) { audioVideoController.updateVideoSourceSubscriptions(addedOrUpdated: addedOrUpdated, removed: removed) } public func promoteToPrimaryMeeting(credentials: MeetingSessionCredentials, observer: PrimaryMeetingPromotionObserver) { audioVideoController.promoteToPrimaryMeeting(credentials: credentials, observer: observer) } public func demoteFromPrimaryMeeting() { audioVideoController.demoteFromPrimaryMeeting() // Stop content share as well contentShareController.stopContentShare() } // MARK: DeviceController public func listAudioDevices() -> [MediaDevice] { return deviceController.listAudioDevices() } public func chooseAudioDevice(mediaDevice: MediaDevice) { deviceController.chooseAudioDevice(mediaDevice: mediaDevice) } public func addDeviceChangeObserver(observer: DeviceChangeObserver) { deviceController.addDeviceChangeObserver(observer: observer) } public func removeDeviceChangeObserver(observer: DeviceChangeObserver) { deviceController.removeDeviceChangeObserver(observer: observer) } public func switchCamera() { deviceController.switchCamera() } public func getActiveCamera() -> MediaDevice? { return deviceController.getActiveCamera() } public func getActiveAudioDevice() -> MediaDevice? { return deviceController.getActiveAudioDevice() } // MARK: VideoTileController public func bindVideoView(videoView: VideoRenderView, tileId: Int) { videoTileController.bindVideoView(videoView: videoView, tileId: tileId) } public func unbindVideoView(tileId: Int) { videoTileController.unbindVideoView(tileId: tileId) } public func addVideoTileObserver(observer: VideoTileObserver) { videoTileController.addVideoTileObserver(observer: observer) } public func removeVideoTileObserver(observer: VideoTileObserver) { videoTileController.removeVideoTileObserver(observer: observer) } public func pauseRemoteVideoTile(tileId: Int) { videoTileController.pauseRemoteVideoTile(tileId: tileId) } public func resumeRemoteVideoTile(tileId: Int) { videoTileController.resumeRemoteVideoTile(tileId: tileId) } // MARK: ActiveSpeakerDetector public func addActiveSpeakerObserver(policy: ActiveSpeakerPolicy, observer: ActiveSpeakerObserver) { activeSpeakerDetector.addActiveSpeakerObserver(policy: policy, observer: observer) } public func removeActiveSpeakerObserver(observer: ActiveSpeakerObserver) { activeSpeakerDetector.removeActiveSpeakerObserver(observer: observer) } public func hasBandwidthPriorityCallback(hasBandwidthPriority: Bool) {} // MARK: ContentShareController public func startContentShare(source: ContentShareSource) { contentShareController.startContentShare(source: source) } public func startContentShare(source: ContentShareSource, config: LocalVideoConfiguration) { contentShareController.startContentShare(source: source, config: config) } public func stopContentShare() { contentShareController.stopContentShare() } public func addContentShareObserver(observer: ContentShareObserver) { contentShareController.addContentShareObserver(observer: observer) } public func removeContentShareObserver(observer: ContentShareObserver) { contentShareController.removeContentShareObserver(observer: observer) } public func addEventAnalyticsObserver(observer: EventAnalyticsObserver) { eventAnalyticsController.addEventAnalyticsObserver(observer: observer) } public func removeEventAnalyticsObserver(observer: EventAnalyticsObserver) { eventAnalyticsController.removeEventAnalyticsObserver(observer: observer) } public func getMeetingHistory() -> [MeetingHistoryEvent] { return eventAnalyticsController.getMeetingHistory() } public func getCommonEventAttributes() -> [AnyHashable: Any] { return eventAnalyticsController.getCommonEventAttributes() } }