#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
.