ios10 iphone5s voip虹吸pjsip2.5.5打开声音设备时出错
有人能告诉我为什么会这样吗 iOS10、iPhone5s、VOIP虹吸pjsip2.5.5 这些问题并非每次都会出现,它有时会出现在您想打电话或接听电话时(添加地址:20161226) 打开声音设备时出错:ios10 iphone5s voip虹吸pjsip2.5.5打开声音设备时出错,ios,c,voip,pjsip,siphon,Ios,C,Voip,Pjsip,Siphon,有人能告诉我为什么会这样吗 iOS10、iPhone5s、VOIP虹吸pjsip2.5.5 这些问题并非每次都会出现,它有时会出现在您想打电话或接听电话时(添加地址:20161226) 打开声音设备时出错: 14:06:03.137742 pjsua_aud.c ....Set sound device: capture=-1, playback=-2 14:06:03.137775 pjsua_aud.c .....Opening sound device (speaker + mic)
14:06:03.137742 pjsua_aud.c ....Set sound device: capture=-1, playback=-2
14:06:03.137775 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@16000/1/20ms
14:06:03.137837 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:03.147404 acquire_call enter,call_id:2
14:06:03.233365 level:4,msg:14:06:03.233 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@44100/1/20ms
14:06:03.233488 level:4,msg:14:06:03.233 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:03.263379 AVAudioSessionRouteChangeNotification ..changeReason..3
14:06:03.439201 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@48000/1/20ms
14:06:03.444813 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:03.518592 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@32000/1/20ms
14:06:03.518731 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:03.587808 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@16000/1/20ms
14:06:03.587936 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:03.659660 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@8000/1/20ms
14:06:03.659837 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:03.734433 pjsua_aud.c .....Unable to open sound device: Unknown OpenSSL error 503317117 [status=506637]
14:06:03.734512 pjsua_aud.c ....Error opening sound device: Unknown OpenSSL error 503317117 [status=506637]
14:06:03.734534 pjsua_aud.c ...Conf connect: 0 --> 2
14:06:03.734555 pjsua_aud.c ....Set sound device: capture=-1, playback=-2
14:06:03.734586 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@16000/1/20ms
14:06:03.734651 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:03.799718 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@44100/1/20ms
14:06:03.799847 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:03.868825 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@48000/1/20ms
14:06:03.869031 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:03.936294 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@32000/1/20ms
14:06:03.936423 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:04.006834 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@16000/1/20ms
14:06:04.006962 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:04.075150 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@8000/1/20ms
14:06:04.075288 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:04.144082 pjsua_aud.c .....Unable to open sound device: Unknown OpenSSL error 503317117 [status=506637]
14:06:04.144165 pjsua_aud.c ....Error opening sound device: Unknown OpenSSL error 503317117 [status=506637]
14:06:04.144186 pjsua_conf_connect:pjsua_conf_connect_value 506637 ret 506637
func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) {
/* Start call audio media, now that the audio session has been
* activated after having its priority boosted.
*
* Call pjsua API pjsua_set_snd_dev() here.
*/
}
今天(2016-12-16),我收到了相同的错误,但错误号不同(iphone5 ios10.1.1虹吸pjsip2.5.5)
我的问题是,当我在来电时播放声音时,我将AudioSession Caterogray播放设置为:
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
我将其更改为播放和录制:
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord)
在那之后,它起了作用。因此,如果您在代码中的某个位置将音频会话设置为播放,请将其更改为播放和录制
@阿尔塔奈
func setAudioSessionActive(active: Bool) -> Bool{
let sessionInterface = AVAudioSession.sharedInstance()
do{
try sessionInterface.setActive(active)
if(active){
if(sessionInterface.category != AVAudioSessionCategoryPlayAndRecord){
try sessionInterface.setCategory(AVAudioSessionCategoryPlayAndRecord)
}
if(sessionInterface.mode != AVAudioSessionModeVoiceChat){
try sessionInterface.setMode(AVAudioSessionModeVoiceChat)
}
}
return true
}
catch let error{
return false
}
}
func configureAudioSession(){
let sessionInterface = AVAudioSession.sharedInstance()
do{
if(sessionInterface.responds(to: #selector(AVAudioSession.setCategory(_:with:)))){
try sessionInterface.setCategory(AVAudioSessionCategoryPlayAndRecord, with: AVAudioSessionCategoryOptions.allowBluetooth)
}
else{
try sessionInterface.setCategory(AVAudioSessionCategoryPlayAndRecord)
}
try sessionInterface.setMode(AVAudioSessionModeVoiceChat)
}
catch let error{
NSLog("SipManager - configureAudioSession error: \(error)")
}
}
步骤1:首先在支持文件文件夹中打开xcode项目中的info.plist文件,然后单击信息属性列表中的“+” 步骤2:选择并在列表中添加隐私-麦克风使用说明 步骤3:在隐私-麦克风使用说明中添加值麦克风
现在编译并运行您的项目。最后,我用IOS的CallKit修复了这个错误,请看一下这个网站: 详细信息:CallKit框架允许应用程序使用本机手机界面接收来电和拨打外线电话。为了实现这一点,CallKit要求呼叫音频仅在音频会话被激活时启动,因此建议在使用PJSIP时,仅在必要时打开声音设备。可通过以下方式完成: 在没有声音设备的情况下启动PJSIP(启动后调用pjsua_set_no_snd_dev())。使用相同的API(pjsua_set_no_snd_dev())关闭未使用的声音设备。音频会话激活后,使用API pjsua_set_snd_dev()打开声音设备。下面是一个关于如何将CallKit与PJSIP集成的示例,委托函数取自苹果公司提供的Speakerbox示例应用程序 拨出电话:
func provider(_ provider: CXProvider, perform action: CXStartCallAction) {
/* 1. We must not start call audio here, and can only do so
* once the audio session has been activated by the system
* after having its priority elevated. So, make sure that the sound
* device is closed at this point.
*/
/* 2. Provide your own implementation to configure
* the audio session here.
*/
configureAudioSession()
/* 3. Make call with pjsua_call_make_call().
* Then use pjsua's on_call_state() callback to report significant
* events in the call's lifecycle, by calling iOS API
* CXProvider.reportOutgoingCall(with: startedConnectingAt:) and
* CXProvider.reportOutgoingCall(with: ConnectedAt:)
*/
/* 4. If step (3) above returns PJ_SUCCESS, call action.fulfill(),
* otherwise call action.fail().
*/
}
处理来电:
func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
/* 1. We must not start call audio here, and can only do so
* once the audio session has been activated by the system
* after having its priority elevated. So, make sure that the sound
* device is closed at this point.
*/
/* 2. Provide your own implementation to configure
* the audio session here.
*/
configureAudioSession()
/* 3. Answer the call with pjsua_call_answer().
*/
/* 4. If step (3) above returns PJ_SUCCESS, call action.fulfill(),
* otherwise call action.fail().
*/
}
要启动声音设备,请执行以下操作:
14:06:03.137742 pjsua_aud.c ....Set sound device: capture=-1, playback=-2
14:06:03.137775 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@16000/1/20ms
14:06:03.137837 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:03.147404 acquire_call enter,call_id:2
14:06:03.233365 level:4,msg:14:06:03.233 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@44100/1/20ms
14:06:03.233488 level:4,msg:14:06:03.233 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:03.263379 AVAudioSessionRouteChangeNotification ..changeReason..3
14:06:03.439201 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@48000/1/20ms
14:06:03.444813 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:03.518592 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@32000/1/20ms
14:06:03.518731 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:03.587808 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@16000/1/20ms
14:06:03.587936 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:03.659660 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@8000/1/20ms
14:06:03.659837 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:03.734433 pjsua_aud.c .....Unable to open sound device: Unknown OpenSSL error 503317117 [status=506637]
14:06:03.734512 pjsua_aud.c ....Error opening sound device: Unknown OpenSSL error 503317117 [status=506637]
14:06:03.734534 pjsua_aud.c ...Conf connect: 0 --> 2
14:06:03.734555 pjsua_aud.c ....Set sound device: capture=-1, playback=-2
14:06:03.734586 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@16000/1/20ms
14:06:03.734651 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:03.799718 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@44100/1/20ms
14:06:03.799847 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:03.868825 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@48000/1/20ms
14:06:03.869031 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:03.936294 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@32000/1/20ms
14:06:03.936423 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:04.006834 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@16000/1/20ms
14:06:04.006962 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:04.075150 pjsua_aud.c .....Opening sound device (speaker + mic) PCM@8000/1/20ms
14:06:04.075288 coreaudio_dev. ......Using VoiceProcessingIO audio unit
14:06:04.144082 pjsua_aud.c .....Unable to open sound device: Unknown OpenSSL error 503317117 [status=506637]
14:06:04.144165 pjsua_aud.c ....Error opening sound device: Unknown OpenSSL error 503317117 [status=506637]
14:06:04.144186 pjsua_conf_connect:pjsua_conf_connect_value 506637 ret 506637
func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) {
/* Start call audio media, now that the audio session has been
* activated after having its priority boosted.
*
* Call pjsua API pjsua_set_snd_dev() here.
*/
}
你找到了解决这个问题的方法吗?我检查了pjsip源代码,在coreaudio_dev.m中找到了setCategory:AvaudioSessionCategoryPlayRecord,我确信它使用了AvaudioSessionCategoryPlayRecord。所以,这不是原因。因为现在不推荐使用这个“session.setCategory(AvaudioSessionCategoryPlayPlayRecord)”“session.setCategory(AVAudioSession.Category.playAndRecord,mode:AVAudioSession.mode.voiceChat,options:AVAudioSession.CategoryOptions.defaultToSpeaker)”但控件似乎从未在“func提供程序”(provider:CXProvider,didActivate audioSession:AVAudioSession)中着陆" . 有什么提示吗@DadoZolic@Altanai奇怪,因为它没有说我的Xcode(10.1,使用Swift 4)中不推荐使用它。但我已经更新了关于如何设置音频会话的答案。调用提供程序didActivate时调用setAudioSessionActive。在拨打或接听电话之前调用configureAudioSession。关于tje provider didActivate函数,它不是通过设置AudioSession调用的。它由CX调用操作调用,如CXStartCallAction或CXAnswerCallAction。是的,我已经完成了这些步骤。错误有时会发生,大多数情况下,它工作得很好。@steve在执行上述步骤之前,音频正在工作或完全不工作?我从一开始就执行这些步骤,所以这不是原因。音频大部分时间都工作得很好,只是有时候我没有听到声音,然后我检查日志,发现这些问题。