Skip to content

Commit 27a0871

Browse files
committed
optimize live streaming
1 parent c94eb05 commit 27a0871

3 files changed

Lines changed: 33 additions & 16 deletions

File tree

iOS/APIExample/Examples/Advanced/LiveStreaming/Base.lproj/LiveStreaming.storyboard

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,12 +196,18 @@
196196
<connections>
197197
<outlet property="backgroundVideoContainer" destination="q9v-1n-ZYf" id="ADa-RX-kZg"/>
198198
<outlet property="clientRoleToggle" destination="7iE-Y0-bQi" id="xF0-48-qAP"/>
199+
<outlet property="clientRoleToggleView" destination="Uwe-Fi-04a" id="oys-Z9-DtO"/>
199200
<outlet property="foregroundVideoContainer" destination="XSO-cE-x5n" id="7GG-yW-hDg"/>
200201
<outlet property="ultraLowLatencyToggle" destination="cbb-WI-53A" id="n3x-pK-MuE"/>
202+
<outlet property="ultraLowLatencyToggleView" destination="Wts-5Z-p7a" id="HI8-ov-5iY"/>
201203
</connections>
202204
</viewController>
203205
<placeholder placeholderIdentifier="IBFirstResponder" id="8dQ-Wz-bG7" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
204-
<tapGestureRecognizer id="yDz-VT-Yop"/>
206+
<tapGestureRecognizer id="yDz-VT-Yop">
207+
<connections>
208+
<action selector="onTapForegroundVideo:" destination="jxp-ZN-2yG" id="GIx-yy-Bev"/>
209+
</connections>
210+
</tapGestureRecognizer>
205211
</objects>
206212
<point key="canvasLocation" x="3130" y="931"/>
207213
</scene>

iOS/APIExample/Examples/Advanced/LiveStreaming/LiveStreaming.swift

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

iOS/APIExample/zh-Hans.lproj/Localizable.strings

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
"Join a channel (Video)" = "实时视频通话/直播";
1010
"Join a channel (Audio)" = "实时语音通话/直播";
11-
"Live Streaming" = "RTC实时直播";
11+
"Live Streaming" = "RTC实时直播/主播/观众";
1212
"RTMP Streaming" = "RTMP旁路推流";
1313
"Media Injection" = "流媒体注入";
1414
"Video Metadata" = "SEI消息";

0 commit comments

Comments
 (0)