[英]Enable Bluetooth for pjsip voice call in ios
我正在制作VOIP應用程序,現在我們需要用藍牙連接語音電話。 我們嘗試將通話與藍牙連接,但聽不到任何聲音。
/* Initialize audio session category and mode */
{
AVAudioSession *sess = [AVAudioSession sharedInstance];
pj_bool_t err;
if ([sess respondsToSelector:@selector(setCategory:withOptions:error:)])
{
err = [sess setCategory:AVAudioSessionCategoryPlayAndRecord
withOptions:AVAudioSessionCategoryOptionAllowBluetooth
error:nil] != YES;
} else {
err = [sess setCategory:AVAudioSessionCategoryPlayAndRecord
error:nil] != YES;
}
if (err) {
PJ_LOG(3, (THIS_FILE,
"Warning: failed settting audio session category"));
}
if ([sess respondsToSelector:@selector(setMode:error:)] &&
[sess setMode:AVAudioSessionModeVoiceChat error:nil] != YES)
{
PJ_LOG(3, (THIS_FILE, "Warning: failed settting audio mode"));
}
}
上面的代碼添加在pjmedia-audiodev-> coreaudio_dev.m文件中。
還嘗試了以下代碼:-
+(void)EnableBluethooth
{
AVAudioSession* audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory: AVAudioSessionCategoryPlayAndRecord
error:
nil];
[audioSession setActive: YES error: nil];
UInt32 allowBluetoothInput = 1;
OSStatus ostatus = AudioSessionSetProperty (
kAudioSessionProperty_OverrideCategoryEnableBluetoothInput,
sizeof(allowBluetoothInput), &allowBluetoothInput);
pjmedia_aud_dev_route route = PJMEDIA_AUD_DEV_ROUTE_BLUETOOTH;
pj_status_t status =
pjsua_snd_set_setting(PJMEDIA_AUD_DEV_CAP_INPUT_ROUTE, &route,
PJ_TRUE);
NSLog(@"statuys is--->%d",status);
NSLog(@"status = %x", ostatus);
}
+(void)DisableBluethooth
{
AVAudioSession* audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory: AVAudioSessionCategoryPlayAndRecord
error: nil];
[audioSession setActive: NO error: nil];
pjmedia_aud_dev_route route = PJMEDIA_AUD_DEV_ROUTE_BLUETOOTH;
pjsua_snd_set_setting(PJMEDIA_AUD_DEV_CAP_INPUT_ROUTE, &route,
PJ_FALSE);
}
代碼已執行,但無法使用藍牙聽到聲音。 如果有人想為pjsip啟用藍牙,請給我。
謝謝。
設置AVAudioSessionCategory和port后 ,將preferredInput設置為藍牙端口,因此將激活藍牙。 請按照以下代碼並調用switchBluetooth
方法。
- (AVAudioSessionPortDescription*)builtinAudioDevice
{
NSArray* builtinRoutes = @[AVAudioSessionPortBuiltInMic];
return [self audioDeviceFromTypes:builtinRoutes];
}
- (AVAudioSessionPortDescription*)bluetoothAudioDevice
{
NSArray* bluetoothRoutes = @[AVAudioSessionPortBluetoothA2DP, AVAudioSessionPortBluetoothLE, AVAudioSessionPortBluetoothHFP];
return [self audioDeviceFromTypes:bluetoothRoutes];
}
- (AVAudioSessionPortDescription*)audioDeviceFromTypes:(NSArray*)types
{
NSArray* routes = [[AVAudioSession sharedInstance] availableInputs];
for (AVAudioSessionPortDescription* route in routes)
{
if ([types containsObject:route.portType])
{
return route;
}
}
return nil;
}
- (BOOL)switchBluetooth:(BOOL)onOrOff
{
NSError* audioError = nil;
BOOL changeResult = NO;
if (onOrOff == YES)
{
AVAudioSessionPortDescription *bluetoothPort = [self bluetoothAudioDevice];
if (bluetoothPort) {
changeResult = [[AVAudioSession sharedInstance] setPreferredInput:bluetoothPort
error:&audioError];
}
}
else
{
AVAudioSessionPortDescription* builtinPort = [self builtinAudioDevice];
if (builtinPort) {
changeResult = [[AVAudioSession sharedInstance] setPreferredInput:builtinPort
error:&audioError];
}
}
if (audioError) {
NSLog(@"BluetoothActiveError: %@ suggestion : %@",audioError.localizedDescription,audioError.localizedRecoverySuggestion);
}
return changeResult;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.