#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
, которое является обратным вызовом, который вы получаете при подключении удаленного пользователя. Для аудитории вещатель является удаленным пользователем, а не локальным.