Swift 切换通道不';我什么也没表现出来

Swift 切换通道不';我什么也没表现出来,swift,agora.io,Swift,Agora.io,我正在尝试切换频道,但远程视频在调用切换频道时不会同时显示任何内容。“加入频道”最初可以工作,但如果我尝试离开频道并加入频道而不是切换频道,它也不会工作。听众工作。我在下面添加了代码。导入UIKit导入AgorartKit class ViewController: UIViewController { @IBOutlet weak var remoteView: UIView! @IBOutlet weak var localView: UIView! var agoraKit: Agor

我正在尝试切换频道,但远程视频在调用切换频道时不会同时显示任何内容。“加入频道”最初可以工作,但如果我尝试离开频道并加入频道而不是切换频道,它也不会工作。听众工作。我在下面添加了代码。导入UIKit导入AgorartKit

class ViewController: UIViewController {

@IBOutlet weak var remoteView: UIView!
@IBOutlet weak var localView: UIView!

var agoraKit: AgoraRtcEngineKit!

func initializeAgoraEngine() {
    agoraKit = AgoraRtcEngineKit.sharedEngine(withAppId: AppID, delegate: self)
}

func setupVideo() {
    agoraKit.enableVideo()  // Enables video mode.
    agoraKit.setVideoEncoderConfiguration(
        AgoraVideoEncoderConfiguration(size: AgoraVideoDimension640x360,
                                  frameRate: .fps15,
                                    bitrate: AgoraVideoBitrateStandard,
                            orientationMode: .adaptative)
    ) // Default video profile is 360P
}

override func viewDidLoad() {
    super.viewDidLoad()
    
    initializeAgoraEngine()
    setupVideo()
    setupLocalVideo()
    setUpChannel()
}

func setupLocalVideo() {
    let videoCanvas = AgoraRtcVideoCanvas()
    videoCanvas.uid = 0
    videoCanvas.view = localView
    videoCanvas.renderMode = .hidden
    agoraKit.setupLocalVideo(videoCanvas)
}

func setUpChannel() {
    agoraKit.setDefaultAudioRouteToSpeakerphone(true)
    agoraKit.joinChannel(byToken: nil, channelId: User.current.uid, info:nil, uid:0) {(sid, uid, elapsed) -> Void in
    }
    UIApplication.shared.isIdleTimerDisabled = true
}

func switchChannel(channel: String) {
    agoraKit.switchChannel(byToken: nil, channelId: channel, joinSuccess: nil)
}

func leaveChannel() {
    agoraKit.leaveChannel(nil)
    UIApplication.shared.isIdleTimerDisabled = false
    remoteView.removeFromSuperview()
    localView.removeFromSuperview()
}

@IBAction func didClickSwitchCameraButton(_ sender: UIButton) {
    sender.isSelected = !sender.isSelected
    agoraKit.switchCamera()
}

func addLiveUserAndListener() {
    //listener for channel
}

extension ViewController: AgoraRtcEngineDelegate {
func rtcEngine(_ engine: AgoraRtcEngineKit, firstRemoteVideoDecodedOfUid uid:UInt, size:CGSize, elapsed:Int) {
    if (remoteView.isHidden) {
        remoteView.isHidden = false
    }
    let videoCanvas = AgoraRtcVideoCanvas()
    videoCanvas.uid = uid
    videoCanvas.view = remoteView
    videoCanvas.renderMode = .hidden
    agoraKit.setupRemoteVideo(videoCanvas)
}

internal func rtcEngine(_ engine: AgoraRtcEngineKit, didOfflineOfUid uid:UInt, reason:AgoraUserOfflineReason) {
    self.remoteView.isHidden = true
}

func rtcEngine(_ engine: AgoraRtcEngineKit, didVideoMuted muted:Bool, byUid:UInt) {
    remoteView.isHidden = muted
}
}
如果查看
开关通道
功能的,您可能会注意到:

注意:此方法仅适用于实时交互式流媒体频道中的观众角色

对于您的用例,我建议您自己调用leaveChannel和joinChannel


作为旁注,
firstRemoteVideoDecodedOfUid
已被弃用,您应该使用or。

请不要通过破坏您的帖子为其他人做更多的工作。通过在Stack Exchange网络上发布,您已授予Stack Exchange在下不可撤销的权利,以分发该内容(即,无论您未来的选择如何)。根据堆栈交换策略,帖子的非破坏版本是分发的版本。因此,任何故意破坏行为都将恢复原状。如果您想了解有关删除帖子的更多信息,请参阅: