簡體   English   中英

在iOS中啟用藍牙以進行PJSIP語音通話

[英]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啟用藍牙,請給我。

謝謝。

設置AVAudioSessionCategoryport后 ,將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM