我在ios swift项目中实现了sinch视频调用,我遵循了sinch实现文档https://www.sinch.com/docs/video/ios/#calling中给出的所有过程。我能成功地实现,但我的问题是我的视频声音来自前扬声器。我怎样才能解决这个问题??在我的代码下面:

var client: SINClient?
var sinCall : SINCall?

配置sinch
//MARK: Configuring Sinch Delegate
func configuringSinch(){
    //Configuring Client Key
    client = Sinch.client(withApplicationKey: Constants.SINCH_APP_KEY, applicationSecret: Constants.SINCH_PRIVATE_KEY, environmentHost: Constants.SANDBOX_ENVIRONMENT, userId: Utility().getUserId())

    client?.call().delegate = self
    client?.setSupportCalling(true)
    client?.enableManagedPushNotifications()
    client?.start()
    client?.startListeningOnActiveConnection()

    let vcCont = client?.videoController()
    self.vwLocalView.addSubview((vcCont?.localView())!)

    self.sinCall?.delegate = self

}

//MARK: Sinch Video Call Delegate
func clientDidStart(_ client: SINClient!) {
    print("Client Did Start")
}

func clientDidFail(_ client: SINClient!, error: Error!) {
    print("Client failed : \(error)")
    player?.stop()
}
func clientDidStop(_ client: SINClient!) {
    print("Client Did Stop")
    player?.stop()
}

    //MARK: Video Call Did Recieve
func client(_ client: SINCallClient!, didReceiveIncomingCall call: SINCall!) {
    print("Did Recieve Incoming Call")

    playRingtoneSound() // Playing Audio
    call.delegate = self;
    self.sinCall = call
}

 //MARK: Call Did Add Video Track
func callDidAddVideoTrack(_ call: SINCall!) {
    let videoCont = client?.videoController()
    vwRemoteView.addSubview((videoCont?.remoteView())!)
}

func callDidEnd(_ call: SINCall!) {
    sinCall?.hangup()

}

最佳答案

这就是如何管理SINAudioController来管理音频输出。

func audioController() -> SINAudioController {
        return (client?.audioController())!
    }

//MARK: Video Call Did Recieve
func client(_ client: SINCallClient!, didReceiveIncomingCall call: SINCall!) {
    audioController().enableSpeaker()

    playRingtoneSound() // Playing Audio
    call.delegate = self;
    self.sinCall = call
}

// In SINCallDelegate
func callDidEstablish(_ call: SINCall!) {

    //to disableSpeaker
    audioController().disableSpeaker()
}

尝试手动管理音频输出会话
// MARK: AudioOutput Session

// to enable front speaker manually
func setSessionPlayerOn()
{
    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord)
    } catch _ {
    }
    do {
        try AVAudioSession.sharedInstance().setActive(true)
    } catch _ {
    }
    do {
        try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.none)
    } catch _ {
    }
}

// to enable speaker manually
func setSessionPlayerSpeaker()
{
    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord)
    } catch _ {
    }
    do {
        try AVAudioSession.sharedInstance().setActive(true)
    } catch _ {
    }
    do {
        try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)
    } catch _ {
    }
}

// to turnoff AudioOutput Session manually
func setSessionPlayerOff()
{
    do {
        try AVAudioSession.sharedInstance().setActive(false)
    } catch _ {
    }
}

09-10 01:29
查看更多