Переключение каналов ничего не показывает Agora Swift

#swift #agora.io

#swift #agora.io

Вопрос:

Я пытаюсь переключать каналы, но удаленное видео ничего не показывает для обоих, когда оно вызывает switch channel. Присоединение к каналу работает изначально, но если я попытаюсь покинуть канал и присоединиться к каналу вместо переключения, это тоже не сработает. Прослушиватель работает. Я добавил приведенный ниже код. импорт UIKit импорт AgoraRtcKit

 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
}
}
  

Комментарии:

1. Пожалуйста, не создавайте больше работы для других людей, вандализируя ваши сообщения. Размещая в сети Stack Exchange, вы предоставляете Stack Exchange право, не подлежащее отзыву, в соответствии с лицензией CC BY-SA 4.0 , на распространение этого контента (т. Е. независимо от вашего будущего выбора). Согласно политике обмена стеками, распространяется версия сообщения, не подвергшаяся вандализму. Таким образом, любой вандализм будет отменен. Если вы хотите узнать больше об удалении записи, пожалуйста, смотрите: Как работает удаление?

Ответ №1:

Если вы посмотрите на документы для switchChannel функции, вы можете заметить это:

Примечание: Этот метод применяется только к роли аудитории в интерактивном потоковом канале.

Я бы рекомендовал для вашего варианта использования, чтобы вы сами вызывали leaveChannel и joinChannel.

В качестве примечания firstRemoteVideoDecodedOfUid устарело, и вместо этого вы должны использовать didJoinedOfUid или remoteVideoStateChangedOfUid .