@@ -57,19 +57,25 @@ class LiveStreamingMain: BaseViewController {
5757 var backgroundVideo = Bundle . loadView ( fromNib: " VideoView " , withType: VideoView . self)
5858 @IBOutlet weak var foregroundVideoContainer : UIView !
5959 @IBOutlet weak var backgroundVideoContainer : UIView !
60+ @IBOutlet weak var clientRoleToggleView : UIView !
61+ @IBOutlet weak var ultraLowLatencyToggleView : UIView !
6062 @IBOutlet weak var clientRoleToggle : UISwitch !
6163 @IBOutlet weak var ultraLowLatencyToggle : UISwitch !
62- var remoteUid : UInt ?
64+ var remoteUid : UInt ? {
65+ didSet {
66+ foregroundVideoContainer. isHidden = !( role == . broadcaster && remoteUid != nil )
67+ }
68+ }
6369 var agoraKit : AgoraRtcEngineKit !
6470 var role : AgoraClientRole = . broadcaster {
6571 didSet {
66- foregroundVideoContainer. isHidden = role != . broadcaster
72+ foregroundVideoContainer. isHidden = ! ( role == . broadcaster && remoteUid != nil )
6773 ultraLowLatencyToggle. isEnabled = role == . audience
6874 }
6975 }
7076 var isLocalVideoForeground = false {
7177 didSet {
72- if ( isLocalVideoForeground) {
78+ if isLocalVideoForeground {
7379 foregroundVideo. setPlaceholder ( text: " Local Host " . localized)
7480 backgroundVideo. setPlaceholder ( text: " Remote Host " . localized)
7581 } else {
@@ -104,6 +110,9 @@ class LiveStreamingMain: BaseViewController {
104110
105111 // for audience put local video in foreground
106112 isLocalVideoForeground = role == . audience
113+ // if inital role is broadcaster, do not show audience options
114+ clientRoleToggleView. isHidden = role == . broadcaster
115+ ultraLowLatencyToggleView. isHidden = role == . broadcaster
107116
108117 // make this room live broadcasting room
109118 agoraKit. setChannelProfile ( . liveBroadcasting)
@@ -151,7 +160,7 @@ class LiveStreamingMain: BaseViewController {
151160 let videoCanvas = AgoraRtcVideoCanvas ( )
152161 videoCanvas. uid = 0
153162 // the view to be binded
154- videoCanvas. view = foregroundVideo . videoView
163+ videoCanvas. view = localVideoCanvas ( )
155164 videoCanvas. renderMode = . hidden
156165 agoraKit. setupLocalVideo ( videoCanvas)
157166
@@ -172,23 +181,25 @@ class LiveStreamingMain: BaseViewController {
172181 agoraKit. setClientRole ( . audience, options: options)
173182 }
174183
175- @IBAction func onTapForegroundVideo( _ sender: UIButton ) {
184+ func localVideoCanvas( ) -> UIView {
185+ return isLocalVideoForeground ? foregroundVideo. videoView : backgroundVideo. videoView
186+ }
187+
188+ func remoteVideoCanvas( ) -> UIView {
189+ return isLocalVideoForeground ? backgroundVideo. videoView : foregroundVideo. videoView
190+ }
191+
192+ @IBAction func onTapForegroundVideo( _ sender: UIGestureRecognizer ) {
176193 isLocalVideoForeground = !isLocalVideoForeground
177194
178195 let localVideoCanvas = AgoraRtcVideoCanvas ( )
179196 localVideoCanvas. uid = 0
180197 localVideoCanvas. renderMode = . hidden
198+ localVideoCanvas. view = self . localVideoCanvas ( )
181199
182200 let remoteVideoCanvas = AgoraRtcVideoCanvas ( )
183201 remoteVideoCanvas. renderMode = . hidden
184-
185- if ( isLocalVideoForeground) {
186- localVideoCanvas. view = foregroundVideo. videoView
187- remoteVideoCanvas. view = backgroundVideo. videoView
188- } else {
189- localVideoCanvas. view = foregroundVideo. videoView
190- remoteVideoCanvas. view = backgroundVideo. videoView
191- }
202+ remoteVideoCanvas. view = self . remoteVideoCanvas ( )
192203
193204 agoraKit. setupLocalVideo ( localVideoCanvas)
194205 if let uid = remoteUid {
@@ -274,7 +285,7 @@ extension LiveStreamingMain: AgoraRtcEngineDelegate {
274285 let videoCanvas = AgoraRtcVideoCanvas ( )
275286 videoCanvas. uid = uid
276287 // the view to be binded
277- videoCanvas. view = backgroundVideo . videoView
288+ videoCanvas. view = remoteVideoCanvas ( )
278289 videoCanvas. renderMode = . hidden
279290 agoraKit. setupRemoteVideo ( videoCanvas)
280291 }
0 commit comments