Не удается выполнить потоковую передачу по вновь созданному каналу в прямом эфире

#swift #live-streaming #agora.io

#swift #прямая трансляция #agora.io

Вопрос:

Я пытаюсь динамически создать канал и опубликовать, но он не отправляет поток в приложения аудитории

Ниже приведен фрагмент кода

 func setUpVideo() {
        getAgoraEngine().enableVideo()
        getAgoraEngine().enableAudio()
        
        getAgoraEngine().setChannelProfile(.liveBroadcasting)
        
        //Warning: only enable dual stream mode if there will be more than one broadcaster in the channel
        //getAgoraEngine().enableDualStreamMode(true)
        
        if isBroadcaster{
            
            let videoCanvas = AgoraRtcVideoCanvas()
            videoCanvas.uid = userID
            videoCanvas.view = localVideoView
            videoCanvas.renderMode = .fit
            
            getAgoraEngine().startPreview()
            getAgoraEngine().muteLocalAudioStream(false)
            getAgoraEngine().muteLocalVideoStream(false)
            
            getAgoraEngine().setClientRole(.broadcaster)
            getAgoraEngine().setupLocalVideo(videoCanvas)
            
        }
        else{
            getAgoraEngine().setClientRole(.audience)
            getAgoraEngine().muteLocalAudioStream(true)
            getAgoraEngine().muteLocalVideoStream(true)
            
        }
        
        //Configuration
        getAgoraEngine().setVideoEncoderConfiguration(
                             AgoraVideoEncoderConfiguration(
                                size: AgoraVideoDimension640x480,
                                     frameRate: .fps30,
                                     bitrate: AgoraVideoBitrateStandard,
                                     orientationMode: .adaptative
                             )
                     )
        
    }
    ```
    ```
    func joinChannel() {
        
                let options = AgoraRtcChannelMediaOptions()
                        options.autoSubscribeAudio = true
                        options.autoSubscribeVideo = true
                        if (rtcChannel != nil) {
                                rtcChannel.destroy()
                        }
                        rtcChannel = getAgoraEngine().createRtcChannel("Test123213")
                        rtcChannel.setRtcChannelDelegate(self)
                rtcChannel.publish()
                        let success = rtcChannel.join(byToken: nil, info: nil, uid: 0, options: options)
        
                print(success)
        
            //APPROACH FROM https://docs.agora.io/en/Interactive Broadcast/start_live_ios?platform=iOS
        /*if let name = userName {
            let channelCode =   getAgoraEngine().joinChannel(byUserAccount: name, token: tempToken, channelId: channelName) { [weak self] (sid, uid, elapsed) in
                //TODO: Hardik : Call API HERE for join
                self?.userID = uid
            }
            print("RTC---",channelCode)
        } else {
            let channelCode =   getAgoraEngine().joinChannel(byToken: tempToken, channelId:channelName, info: nil, uid: userID) { [weak self] (sid, uid, elapsed) in
                //TODO: Hardik : Call API HERE for join
                self?.userID = uid
                
            }
            print("RTC---",channelCode)
        }*/
        
        
        
    }
  
 extension AgoraVideoViewController: AgoraRtcChannelDelegate {
    func rtcChannelDidJoin(_ rtcChannel: AgoraRtcChannel, withUid uid: UInt, elapsed: Int) {
        
            if !isBroadcaster{
                let videoCanvas = AgoraRtcVideoCanvas()
                videoCanvas.uid = uid
                videoCanvas.view = localVideoView
                videoCanvas.renderMode = .fit
                getAgoraEngine().setupRemoteVideo(videoCanvas)
            }
    }
 
    func rtcChannel(_ rtcChannel: AgoraRtcChannel, didJoinedOfUid uid: UInt, elapsed: Int) {
       
    }
 
    func rtcChannel(_ rtcChannel: AgoraRtcChannel, didOfflineOfUid uid: UInt, reason: AgoraUserOfflineReason) {
        
    }

    
    func rtcChannelDidLeave(_ rtcChannel: AgoraRtcChannel, with stats: AgoraChannelStats) {
        
    }
 
    func rtcChannel(_ rtcChannel: AgoraRtcChannel, didOccurWarning warningCode: AgoraWarningCode) {
       
    }
 
    func rtcChannel(_ rtcChannel: AgoraRtcChannel, didOccurError errorCode: AgoraErrorCode) {
        
    }

}
  

Обратный вызов достигает rtcChannelDidJoin, но роль аудитории не может видеть удаленное видео. Однако обе роли могут присоединиться к каналу. createRtcChannel возвращает 0: успех для обеих ролей

Кто-нибудь, пожалуйста, может предложить правильный подход для этого?. Мое требование — создать канал, как только хост присоединится к нему. Ссылка :

https://docs.agora.io/en/Interactive Broadcast/start_live_ios?platform=iOS
https://github.com/AgoraIO-Usecase/Breakout-Class/blob/master/breakout-ios/AgoraDualChannels/AgoraDualChannels/Controllers/LiveRoomViewController.swift

Ответ №1:

rtcChannelDidJoin получен ли обратный вызов, когда локальный пользователь успешно присоединяется к каналу. Вместо этого вам нужно настроить удаленное видео в didJoinedOfUid , которое является обратным вызовом, который вы получаете при подключении удаленного пользователя. Для аудитории вещатель является удаленным пользователем, а не локальным.