【问题标题】:Enable Bluetooth for pjsip voice call in ios在 ios 中为 pjsip 语音通话启用蓝牙
【发布时间】:2018-12-26 00:49:30
【问题描述】:

我正在制作 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 启用蓝牙,请给我。

谢谢。

【问题讨论】:

  • 请编辑您的问题以将相关代码包含为文本,而不是图像
  • 您好 Paulw,已编辑答案。请检查并给出解决方案。

标签: ios objective-c pjsip ios-bluetooth


【解决方案1】:

设置好AVAudioSessionCategory端口后,将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;
    }

【讨论】:

  • 感谢您的回复,但无法使用 pjsip 解决您的解决方案。
  • 您是否在这些更改后激活了会话。 ? [会话 setActive:YES 错误:&error];
  • 您好 RJV Kumar,上述解决方案有效,但无法使用蓝牙麦克风传输语音意味着一侧语音正在工作。视频播放然后在蓝牙设备中听到语音,但使用蓝牙通话,然后不从另一台设备传输我的语音。因此,如果您有任何解决方案,请帮助我。
  • 是否有相同的解决方案?
猜你喜欢
  • 1970-01-01
  • 2017-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多